效果图:
做法:
把下面的Gravity.cs代码放在需要被引力作用的物体上,然后给Body1拖拽一个吸引该对象的物体,并在InitSpeed处给此物体一个初速度,即可
引力公式:F=G*M*m/r/r
(G视情况而定,自己调参寻找合适值)
(两个物体间的距离和速度也要自己慢慢调参,大一点小一点都没法公转,这样才能得到预期效果)
using UnityEngine;
public class Gravity : MonoBehaviour {
public Transform Body1; //星体对象
private Rigidbody Rigid0, Rigid1; //Rigid对象
private Vector3 Pos0, Pos1; //位置
private Vector3 Vec1; //受力方向
private float F1; //受力大小
private float Dis1; //距离的平方
private float G = 30000.0f; //重力常量
public Vector3 InitSpeed; //初始速度
private float m0, m1; //物体质量
void Start() {
Rigid0 = transform.GetComponent<Rigidbody>();
Rigid1 = Body1.GetComponent<Rigidbody>();
Rigid0.velocity = InitSpeed;
m0 = Rigid0.mass;
m1 = Rigid1.mass;
}
void FixedUpdate() {
Pos0 = transform.position;//位置
Pos1 = Body1.position;
Vec1 = Pos1 - Pos0;//受力方向矢量
Dis1 = Vec1.x * Vec1.x + Vec1.y * Vec1.y + Vec1.z * Vec1.z;
F1 = G * m1 * m0 / Dis1;//受力大小
Rigid0.AddForce(Vec1 / Dis1 * F1);//牵引物体
}
}