我正在做一个关于行星的游戏,所以我决定为我的行星添加重力。我一直在YouTube上关注一个视频,其中一个人一直在指导我完成整个过程。该脚本适用于简单的球体/行星,但它不适用于我的播放器,然后我收到错误 "刚性身体强制分配'玩家'的尝试无效。输入力为{ NaN, NaN, NaN }.
UnityEngine.Rigidbody:AddForce(Vector3)"
播放器确实附加了一个移动脚本。
好吧,这是我的脚本
public class Attractor : MonoBehaviour
{
public Rigidbody rb;
private void FixedUpdate()
{
Attractor[] attractors = FindObjectsOfType<Attractor>();
foreach (Attractor attractor in attractors)
{
if(attractor != this)
Attract(attractor);
}
}
void Attract (Attractor objToAttract)
{
Rigidbody rbToAttract = objToAttract.rb;
Vector3 direction = rb.position - rbToAttract.position;
float distance = direction.magnitude;
float forceMagnitude = (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
Vector3 force = direction.normalized * forceMagnitude;
rbToAttract.AddForce(force);
}
}
我认为巨大的距离将你的力量大小除以一个太小的数字。
如果距离太大,我建议跳过吸引过程。 或者,您可以尝试将距离固定为最大值和最小值。
干杯。