[英]Unity Move rotating object
我有一个围绕 Z 轴上的 0,0,0 点旋转的球。 当按下空格键时,球必须进入大圆圈内。 现在我的代码看起来像这样。 当你按下空间时,球不会像他们应该的那样表现。 我想知道如何使气球完全向下
这就是球的行为方式 ->行为图像
我的代码:
void Update () {
if (Input.GetKeyDown (KeyCode.Space)) {
transform.position = new Vector3 (transform.position.x - 1, transform.position.y - 1, 0);
} else {
transform.RotateAround(new Vector3(0,0,0), new Vector3(0,0,1), 2);
}
}
您“跳跃”轨道的代码不会执行您想要的操作,因为Transform.RotateAround修改了对象变换的旋转和位置。
因此,每次跳转到世界中的 (position - 1,1,0) 都会返回截然不同的结果。
你想要做的,而不是什么是计算从对象(矢量)方向的轨道(差)的中心,那么你想多远它移动缩放下来到,然后将其应用到位置。
private Vector3 _orbitPos = Vector3.zero;
private float _orbitAngle = 2f;
private float _distanceToJump = 2f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
var difference = (_orbitPos - transform.position).normalized * _distanceToJump;
transform.Translate(difference);
}
transform.RotateAround(_orbitPos, Vector3.forward, _orbitAngle);
}
当立即按下空格键时,这会将要绕轨道运行的物体移近 2 个单位。
如果您想要平滑过渡而不是跳转,请考虑使用Mathf.Lerp 、 Vector3.Lerp 和所涉及的例程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.