Unity移动旋转对象

时间:2016-03-20 20:16:00

标签: c# unity3d

我有一个绕Z轴点0,0,0旋转的球。按下空格键时,球必须进入大圆圈内。现在我的代码看起来像这样。当你按空格时,球的表现并不像他们应该的那样。我想知道如何准确地向下制作气球

这就是球应该如何表现 - > behavior image

我的代码:

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);
    }
}

1 个答案:

答案 0 :(得分:1)

“跳跃”轨道的代码不能达到你想要的效果,因为Transform.RotateAround会修改对象变换的旋转和位置。 Demonstration of how RotateAround modifies the transform

因此,每次跳到(位置 - 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和相关例程。