我已经在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改变,但是它是如此之快,我想使其平滑。 所以请帮我
答案 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向量。这样,它将始终朝其面向的方向移动。