Проблема с анимацией прыжка Unity при использовании BoxCast для обнаружения земли.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Проблема с анимацией прыжка Unity при использовании BoxCast для обнаружения земли.

Сообщение Гость »


Я разрабатываю платформер с бесконечным раннером для устройств Android, и у меня возникла проблема. Я использую BoxCast для обнаружения земли, и анимация работает неправильно. Также иногда при первом прыжке он подпрыгивает намного выше, чем должен. Я думаю, проблема в том, как я останавливаю анимацию в функции GroundCheck. Похоже, он сразу останавливает анимацию. Но я не нашел других мест, где можно было бы остановить анимацию. Ребята, не могли бы вы помочь с этой проблемой? Также к модели прикреплен аниматор, который является дочерним элементом игрового объекта Player. (если вам не нравится код, выскажите свое мнение, я стараюсь стать лучше в этом)

с использованием UnityEngine; Игрок публичного класса: MonoBehaviour { [Заголовок("Переместить настройки")] [SerializeField] float jumpSpeed ​​= 5f; [SerializeField] floatnormalSpeed ​​= .2f; [SerializeField] float медленная скорость = .01f; [SerializeField] float медленнаяAnimationSpeed ​​= .02f; [Заголовок("Настройки CastBox")] общедоступный размер коробки Vector3; общедоступное число с плавающей запятой maxDistance; общественная LayerMask LayerMask; //Кэшированные ссылки частный игрок RigidbodyRigidBody; личный аниматор playerAnimator; //Характеристики частный bool canDoubleJump = false; частный переход Vector3; частный плавающий moveSpeed; частная пустота Пробуждение() { playerRigidBody = GetComponent(); playerAnimator = GetComponentInChildren(); } частная пустота Старт() { moveSpeed ​​= нормальная скорость; jumpInput = Vector3.up * jumpSpeed; } частная пустота фиксированного обновления() { ГраундПроверка(); Двигаться(); } частная пустота OnJump() { если (GroundCheck()) { Прыгать(); canDoubleJump = правда; playerAnimator.SetBool("Прыжок", true); } иначе, если (!GroundCheck() && canDoubleJump) { Прыгать(); playerAnimator.SetBool("DoubleJump", true); canDoubleJump = ложь; } } частная пустота Jump() { playerRigidBody.AddForce(jumpInput, ForceMode.Impulse); } частная пустота Move() { если (Input.GetKeyDown(KeyCode.Space)) { При прыжке(); } if (Input.GetKey(KeyCode.LeftShift) && GroundCheck()) { Медленная скорость(); } еще { НормальнаяСкорость(); } Transform.position += Vector3.right * moveSpeed; } частная пустота SlowSpeed() { moveSpeed ​​= медленнаяСкорость; playerAnimator.speed = медленная скорость анимации; } частная пустота NormalSpeed() { moveSpeed ​​= нормальная скорость; playerAnimator.speed = 1; } логический GroundCheck() { если (Physics.BoxCast(transform.position, boxsize, -transform.up, Transform.rotation, maxDistance, LayerMask)) { playerAnimator.SetBool("Прыжок", false); playerAnimator.SetBool("DoubleJump", false); вернуть истину; } еще { вернуть ложь; } } частная пустота OnDrawGizmos() { Гизмо.цвет = Цвет.красный; Gizmos.DrawCube(transform.position - Transform.up * maxDistance, boxsize); } } Я пытался использовать логическое значение DidJumpStopped, но оно не сработало или я использовал его неправильно. Я пытался установить для обоих значений анимации значение false в разных местах, но это тоже не работает. В моем первом прототипе я останавливал анимацию в функции «OncollisionEnter» с тегом «Ground» на дороге, и она работала правильно. Но мне не нравится использовать теги при обнаружении столкновений.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»