我有一个具有自身引力的行星,并且我有一个坚持在行星表面的角色。现在,我希望他一直直立(站立)。
这是他当前状态的照片-他没有站起来:
这是我的代码:
void Update () {
Vector2 difference = planet.transform.position - this.transform.position;
rb.AddForce((difference).normalized * gravitypull);
float angle = Mathf.Atan2(difference.x, difference.y);
}
答案 0 :(得分:2)
您只需将角色的向上方向与重力的方向对齐-无需进行任何复杂的角度计算,只需将其留给游戏引擎即可!因此,添加如下内容:
// May need to be -difference because of how you calculated the vector
transform.up = difference;
如果您的星球将不完全是圆形的,或者表面将具有障碍物/不规则性,这将要求角色不能完全站立起来,那么您将需要获取的法线向量角色站立的表面,并使角色与该表面对齐。 (请注意,非圆形行星也可能会对重力计算产生影响。)