如何在2D行星上对齐角色以使其在行星表面上直立?

时间:2018-08-17 18:39:37

标签: c# unity3d

我有一个具有自身引力的行星,并且我有一个坚持在行星表面的角色。现在,我希望他一直直立(站立)。

这是他当前状态的照片-他没有站起来:

he is not on his feet, i want he align correct

这是我的代码:

void Update () {
    Vector2 difference = planet.transform.position - this.transform.position;
    rb.AddForce((difference).normalized * gravitypull);
    float angle = Mathf.Atan2(difference.x, difference.y);
}

1 个答案:

答案 0 :(得分:2)

您只需将角色的向上方向与重力的方向对齐-无需进行任何复杂的角度计算,只需将其留给游戏引擎即可!因此,添加如下内容:

// May need to be -difference because of how you calculated the vector
transform.up = difference; 

如果您的星球将不完全是圆形的,或者表面将具有障碍物/不规则性,这将要求角色不能完全站立起来,那么您将需要获取的法线向量角色站立的表面,并使角色与该表面对齐。 (请注意,非圆形行星也可能会对重力计算产生影响。)