Реалистичный прыжок

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Реалистичный прыжок

Сообщение alicewithalex 13 апр 2018, 23:51

Всем привет, сейчас делаю контроллер от третьего лица, уже почти со всем разобрался, даже с коллизией камеры..) остался такой вопрос: сейчас прыжок только вверх работает, ну или если во время жать кнопки, то в сторону можно. А можно сделать как-нибудь, чтобы персонаж разбежались прыгнул и летел вперёд по параболе примерно, ну как в жизни то есть, чтобы нажал пробел после во время бега и персонаж прыгнул и летит не только вверх, но и вперед( в сторону куда прыгнул). Буду очень благодарен... Очень сильно интересует вопрос этот.. Спасбт
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 14 апр 2018, 07:58

ну так velocity + гравитация, вот тебе и "параболический прыжок"))
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 14 апр 2018, 12:58

Просто у меня сейчас прыжок выглядит так:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Movement : MonoBehaviour {
        public Transform cam; // Ссылка на Transform камеры, чтобы получить ее rotation
        // Скорость ходьбы и бега
        public float walkSpeed=8.0f;
        public float runSpeed=20.0f;
        // Скорость поворота
        public float rotaionSpeed=15.0f;
        // Приватные компоненты
        private CharacterController controller;
        private Animator animator;
        // Для SmoothDampAngle
        float currentVelocity;
        public float speedsmoothTime=0.2f;
        public float AnimspeedSmoothTime=0.1f;
        float velocityY;
        public float gravity=-9.8f;
        public float jumpHeight=20.0f;

        void Start () {
                // Получаем компоненты
                controller = GetComponent<CharacterController> ();
                animator = GetComponent<Animator> ();
        }
       

        void Update () {
                // Получаем ввод от пользователя
                Vector2 input = new Vector2 (Input.GetAxis ("Horizontal"), Input.GetAxis ("Vertical"));
                // Нормализуем вектор
                Vector2 inputDir = input.normalized;
                if(Input.GetKeyDown(KeyCode.Space)){
                        Jump();
                }
                if (inputDir != Vector2.zero) {
                        // Вычисляем нужный поворот... тут самая жесть <img src="./images/smilies/2.gif" alt=":(" title="Sad" />
                        float targetRotation = Mathf.Atan2(inputDir.x,inputDir.y)*Mathf.Rad2Deg+cam.eulerAngles.y;
                        transform.rotation = Quaternion.AngleAxis(Mathf.SmoothDampAngle(transform.eulerAngles.y,targetRotation,ref currentVelocity,speedsmoothTime),Vector3.up);
                        // Или можно так
                        // transform.eulerAngles = Vector3.up*(Mathf.SmoothDampAngle(transform.eulerAngles.y,targetRotation,ref currentVelocity,speedsmoothTime));
                        // Просто тут тяжело понять, что вращаем относительно оси Y
                }
                // Булева переменная, считывающая бежит ли персонаж или идёт
                bool isRunning = Input.GetKey (KeyCode.LeftShift) && controller.isGrounded;
                // Основываясь на переменной, описанной выше, вычисляем скорость
                float speed = ((isRunning) ? runSpeed : walkSpeed) * inputDir.magnitude;
                Vector3 velocity;
                velocity = transform.forward*speed+Vector3.up*velocityY;
                velocityY += Time.deltaTime * gravity;
                // Вычисляем вектор перемещения

                // Двигаем персонажа
                controller.Move(velocity*Time.deltaTime);
                if (controller.isGrounded) {
                        velocityY = 0;
                }

                float currentSpeed = new Vector2 (controller.velocity.x, controller.velocity.z).magnitude;
                // Работаем с аниматором
                float animationSpeedPercent = ((isRunning)? currentSpeed/runSpeed : currentSpeed/walkSpeed*0.5f);
                // Делаем анимацию плавной, иначе слишком дёрганно всё получается
                animator.SetFloat("speedPercent",animationSpeedPercent,AnimspeedSmoothTime,Time.deltaTime);

        }

        void Jump(){
                if (controller.isGrounded) {
                        float jumpVelocity = Mathf.Sqrt (-2 * gravity * jumpHeight);
                        velocityY = jumpVelocity;

                }
        }
}
 


И как сюда добавить реалистичность хз...
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 16 апр 2018, 23:52

Может просто к текущей скорости добавлять силу вверх
controller.velocity += Vector3.up * jumpForce;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 09:19

Да, но мне надо сделать, чтобы игрок не управлял персонажем в воздухе, а чтобы двигался он вперед или в другие направления в зависимости от разгона.А так у меня сейчас есть прыжок, но если разбежаться, прыгнуть и не жать вперед, то он остановится просто на месте
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 17 апр 2018, 10:43

Просто заблокируй управление wasd во время прыжка.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 10:59

Это я сделаю, но у меня вектор передвижения зависит от скорости, а скорость от Input(WASD) Н
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 17 апр 2018, 12:00

Это плохо, сделай так чтобы во время прыжка убрать эту зависимость и velocity менялся сам, вплоть до приземления.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 12:09

Вот я это и не могу сделать) Как раз решил спросить как лучше это сделать...
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 17 апр 2018, 12:14

Самый простой способ создать булку)

bool jumping = false;
...
if (Input.GetKeyDown(KeyCode.Space)
jumping = true;
даем velocity вверх и блокируем движение кнопками
...
if (!jumping)
move...
тут меняется velocity через WASD

ну и после приземления jumping = false;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 13:02

А velocity во время прыжка мне нужно не только вверх, но и в направление куда прыгнули. спасибо за код кстати) Попробую
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение 1max1 17 апр 2018, 13:37

У тебя велосити уже в том направлении просто добавь к нему вектор вверх
velocity += Vector3.up * 100...
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 13:58

Спасибо буду пробовать, как получится отпишусь)
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение alicewithalex 17 апр 2018, 21:31

не получается почему-то... видимо не так делаю что-то... У меня как-будто вектор моего движения обрывается ,когда я не жму никуда и он остнавливается в воздухе
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

Re: Реалистичный прыжок

Сообщение alicewithalex 18 апр 2018, 18:32

Может мне стоить переписать контроллер от третьего Лица? Я вот цель сейчас ставлю перед собой сделать движение относительно камеры + поворот в сторону куда нажата кнопка(так же относительно камеры). Может есть у кого дельный урок или статья? Или свой код? Буду рад почитать его
alicewithalex
UNец
 
Сообщения: 34
Зарегистрирован: 17 янв 2018, 12:43

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12