如何投掷物体并使其围绕球体旋转,就像它在轨道上一样

时间:2017-10-01 17:43:07

标签: c# unity3d

我可以通过向它添加一个力来拾取并抛出一个物体,它会以正确的方向投掷它。如果这个物体被抛出并且它的速度大于速度Threshold,它就会开始RotateAround行星运转良好。

现在我要做的是:

如果我在投掷时对速度大于速度阈值的物体施加一个力,物体将进入轨道,但不是正确的方向,这将是玩家向前的方向。

Example Video demonstrating the problem when I throw the frisbee (object)

这是我的代码:

Vector3 planetDir = planet.transform.position - transform.position;
    Vector3 axis = Vector3.Cross(Vector3.Normalize(planetDir), transform.forward);

    if (rb.velocity.magnitude * 10 > speedThreshold)
    {
        rb.isKinematic = true;
        isOrbiting = true;
    }
    if (isOrbiting == true)
    {
        transform.RotateAround(planet.transform.position, axis, rotationSpeed); //start orbiting

        desiredAltitude = (transform.position - planet.transform.position).normalized * radius +
                          planet.transform.position; //set the altitude
        transform.position = desiredAltitude; //move this gameobject to desired altitude
    }

1 个答案:

答案 0 :(得分:0)

这似乎在transform.forward前面添加了一个负号,所以这个

      Vector3 axis = Vector3.Cross(Vector3.Normalize(planetDir), 
transform.forward);

到此

Vector3 axis = Vector3.Cross(Vector3.Normalize(planetDir), -
transform.forward);