Реализация приседания в Unity: несколько методов приседания игрока

Чтобы присесть в Unity, обычно необходимо изменить положение или масштаб персонажа игрока. Вот несколько методов, которые вы можете использовать для реализации приседания в Unity, а также примеры кода:

Метод 1: изменение позиции Y игрока

public class PlayerController : MonoBehaviour
{
    private float crouchHeight = 0.5f;
    private float standHeight = 1.0f;
    private bool isCrouching = false;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {
            isCrouching = !isCrouching;
            if (isCrouching)
            {
                transform.localScale = new Vector3(transform.localScale.x, crouchHeight, transform.localScale.z);
            }
            else
            {
                transform.localScale = new Vector3(transform.localScale.x, standHeight, transform.localScale.z);
            }
        }
    }
}

Метод 2: изменение коллайдера игрока

public class PlayerController : MonoBehaviour
{
    private Vector3 crouchScale = new Vector3(1.0f, 0.5f, 1.0f);
    private Vector3 standScale = new Vector3(1.0f, 1.0f, 1.0f);
    private bool isCrouching = false;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {
            isCrouching = !isCrouching;
            if (isCrouching)
            {
                GetComponent<Collider>().enabled = false;
                transform.localScale = crouchScale;
                GetComponent<Collider>().enabled = true;
            }
            else
            {
                GetComponent<Collider>().enabled = false;
                transform.localScale = standScale;
                GetComponent<Collider>().enabled = true;
            }
        }
    }
}

Метод 3. Изменение анимации игрока

public class PlayerController : MonoBehaviour
{
    private Animator animator;
    private bool isCrouching = false;
    void Start()
    {
        animator = GetComponent<Animator>();
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.C))
        {
            isCrouching = !isCrouching;
            animator.SetBool("IsCrouching", isCrouching);
        }
    }
}