如何在Unity 3D中更改向前飞船的Y位置

时间:2019-01-19 09:38:54

标签: unity3d smoothing

我已经在3d单元中启动了一个项目。我想制作一个向前移动的太空船,但是当我按下ArrowUp时,我想将其y位置更改为 (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位置可以b改变,但是它是如此之快,我想使其平滑。 所以请帮我

3 个答案:

答案 0 :(得分:0)

我认为解决您问题的最佳方法是使用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);

}

此示例将在1秒的时间内将y坐标平滑地更改为5(您可以在不同的时间更改smoothTime常数)。

答案 1 :(得分:0)

根据您自己的代码,最简单的解决方法可能是这样的

//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,因此您可以从检查器中对其进行修改以获得所需的效果。

希望有帮助!

答案 2 :(得分:0)

假设您的宇宙飞船是刚体,则应该看看Rigidbody.AddForce https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

通过作用力,您可以轻松地在所有方向上实现平滑运动,并在“刚体”的参数(如质量)内进行调整,而无需再次摆弄脚本。它是Unity物理模型的一部分。

如果只想在y方向上移动,则输入(0,1,0)之类的向量,但您也可以输入太空船Gameobject的Transform.forward向量。这样,它将始终朝其面向的方向移动。