Проблема с анимацией прыжка Unity при использовании BoxCast для обнаружения земли. ⇐ 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» на дороге, и она работала правильно. Но мне не нравится использовать теги при обнаружении столкновений.
Я разрабатываю платформер с бесконечным раннером для устройств 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» на дороге, и она работала правильно. Но мне не нравится использовать теги при обнаружении столкновений.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
Anonymous » » в форуме C# - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Мой персонаж не может двигаться во время прыжка, когда сцена сбрасывает C# Unity 2d
Anonymous » » в форуме C# - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Ищу опцию Cartopy для отображения земли поверх данных, когда zorder не работает
Anonymous » » в форуме Python - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-