Как сделать что бы звук не накладывался на себя? Unity, C#
Я пытаюсь сделать, что бы звук проигрывался при нажатии на кнопку, но оно начинается только тогда когда я уже отпускаю кнопку, если сделаю что звук проигрывался при скорости больше одного оно начинает проигрывать бесконечно и накладывается на себя. Как я могу сделать что бы звук играл при нажатии на кнопку и не накладывался на себя?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveUI : MonoBehaviour
{
float speed = 4.5f;
Rigidbody2D rb;
bool FacingRight = true;
int directionInput;
public float jumpForce = 6f;
public bool onGround;
public Transform GroundCheck;
public float checkRadius = 0.5f;
public LayerMask Ground;
public LayerMask Hitbox;
public GameObject KnopkaDown;
public AudioSource footstep1;
public AudioSource footstep2;
Animator anim;
void Start()
{
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
}
void Update()
{
rb.velocity = new Vector2(speed * directionInput, rb.velocity.y);
if (directionInput < 0 && FacingRight)
{
Flip();
}
else if (directionInput > 0 && !FacingRight)
{
Flip();
}
if (directionInput == 0)
{
anim.SetBool("Run", false);
}
else
{
anim.SetBool("Run", true);
footstep1.Play(); //here
}
if (onGround == false)
{
anim.SetBool("Jump", true);
anim.SetBool("Run", false);
}
else
{
anim.SetBool("Jump", false);
}
CheckingGround();
Physics2D.IgnoreLayerCollision(9, 14);
Physics2D.IgnoreLayerCollision(14, 9);
Debug.DrawRay(transform.position, transform.TransformDirection(Vector2.left) * 2f, Color.yellow);
RaycastHit2D hitLeft = Physics2D.Raycast(transform.position, transform.TransformDirection(Vector2.left), 2f, Hitbox);
//RayRight
Debug.DrawRay(transform.position, transform.TransformDirection(Vector2.right) * 2f, Color.yellow);
RaycastHit2D hitRight = Physics2D.Raycast(transform.position, transform.TransformDirection(Vector2.right), 2f, Hitbox);
if(hitLeft)
{
KnopkaDown.SetActive(true);
}
else
{
KnopkaDown.SetActive(false);
}
if(hitRight)
{
KnopkaDown.SetActive(true);
}
else
{
KnopkaDown.SetActive(false);
}
if (directionInput >= 0)
{
}
}
public void Move(int ImputAxis)
{
directionInput = ImputAxis;
}
void Flip()
{
FacingRight = !FacingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
transform.localScale = theScale;
}
public void Jump()
{
if (onGround)
{
rb.AddForce(Vector2.up * jumpForce);
}
}
void CheckingGround()
{
onGround = Physics2D.OverlapCircle(GroundCheck.position, checkRadius, Ground);
}
public void Down()
{
Physics2D.IgnoreLayerCollision(8, 9, true);
Invoke("IgnoreLayerOff", 1f);
}
void IgnoreLayerOff()
{
Physics2D.IgnoreLayerCollision(8, 9, false);
}
}