尝试使用AddTorque

时间:2019-03-24 18:58:00

标签: c# unity3d

假设我在2D统一游戏中拥有一名玩家飞船和一颗行星。我要使船的旋转相对于其正下方的水平面下降(例如,如果船下方的水面部分为80度,则在该点上方时船应趋向于下降至80度)。

我目前有一种可以工作的代码:

    Vector2 direction = planet.position - transform.GetChild(0).position;
    float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg + 90;
    rig[0].AddTorque(-rig[0].rotation + angle);

除了船的旋转从360变为0的位置(突然进行360度翻转)之外,它可以满足我的要求。我正试图弄清楚如何做到这一点。

我不想为此使用LookAt(),因为这应该是趋向于目标方向的转矩,而不是朝该方向的捕捉设置。

1 个答案:

答案 0 :(得分:0)

我过去使用的粗略解决方法是:

创建2个对象,并使它们成为播放器对象的子对象。

将其中一个放置在(-1,0,0)本地,并将其命名为LeftObj。将另一个放置在(1,0,0)处,并将其命名为RightObj。

现在,您可以简单地检查哪个更接近目标,从而找出哪种是最有效的转弯方式。

float LDist = Vector3.Distance(LeftObj.transform.position, target.transform.position);

float RDist = Vector3.Distance(RightObj.transform.position, target.transform.position);

if (LDist < RDist){

    // Turn left

}else{

    // Turn right

}

这不是最有效的方法,但是它设置简单,快速,并且可以清楚地告诉您“左还是右”,而与旋转值无关。

一个明显的缺点是,当您靠近目标时,您将无法获得旋转值来缩放扭矩,因此您可能需要增加播放器刚体上的“ angularDrag”以消除一些卡顿现象。 / p>