Как изменить положение Y движущегося вперед космического корабля в Unity 3D - PullRequest
0 голосов
/ 19 января 2019

Я запустил проект в Unity 3D. Я хочу сделать космический корабль, который движется вперед, но когда я нажал ArrowUp, я хочу изменить его положение на (currentpos + 1,5), но я хочу это плавно.это мой код

transform.position += transform.forward * Time.deltaTime * 10f;

if (Input.GetKey (KeyCode.UpArrow))
transform.position = new Vector3 (transform.position.x, 5f, 
transform.position.z);

с помощью приведенного выше кода позиция Y объекта может быть изменена, но она работает так быстро, и я хочу, чтобы она была плавной.поэтому, пожалуйста, помогите мне.

Ответы [ 3 ]

0 голосов
/ 19 января 2019

Основанный на вашем собственном коде, самый простой способ решить его - что-то вроде этого

//this sets the X position
transform.position += transform.forward * Time.deltaTime * 10f;

//if the button is pressed then modify Y
if (Input.GetKey (KeyCode.UpArrow))
    transform.position += new Vector3 (0, 5f  * Time.deltaTime * y_speed,0);

y_speed может быть public float y_speed = 1.0f в вашем скрипте, поэтому вы можете изменить его из инспектора, чтобы получить желаемый эффект.

Надеюсь, это поможет!

0 голосов
/ 19 января 2019

Предполагая, что ваш космический корабль - твердое тело, вам следует взглянуть на Rigidbody. AddForce https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

Работая с силами, вы можете очень легко получить плавное движение во всех направлениях и настроить его в пределахПараметры Rigidbody (например, масса) без повторения в скрипте.Это часть модели физики Unity.

Если вы хотите двигаться только в направлении y, введите вектор, подобный (0,1,0), но вы также можете ввести вектор Transform.forward Gameobject вашего космического корабля.,Таким образом, он всегда будет двигаться в том направлении, в котором он стоит.

0 голосов
/ 19 января 2019

Я думаю, что лучшим решением вашей проблемы является использование Mathf.SmoothDamp.

Пример:

private float targetY = 0f;
private float verticalVelocity = 0f;
private const float smoothTime = 1f;

private void Update()
{
    transform.position += transform.forward * Time.deltaTime * 10f;

    if (Input.GetKey(KeyCode.UpArrow))
    {
        targetY = 5f;
    }

    float y = Mathf.SmoothDamp(transform.position.y, targetY, ref verticalVelocity, smoothTime);
    transform.position = new Vector3 (transform.position.x, y, transform.position.z);

}

Этот пример плавно изменит yкоордината до 5 в течение 1 секунды (вы можете изменить постоянную smoothTime для другого времени).

...