Как сделать что бы звук не накладывался на себя? 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);
    }

}

Ответы (0 шт):