using UnityEngine;
///
/// 物理模拟器脚本
///
public class PhysicsRootScript : MonoBehaviour
{
//保存唯一对象
private static PhysicsRootScript instance;
//累计时间
private float _timer;
//物理模拟的时间,-1:表示每帧只模拟器一次 ,默认的情况可以使用Time.fixedDeltaTime
public float FixedDeltaTime = -1;
private void Start()
{
if (instance != null)
{
//把原来的给删除掉,使用新的
Destroy(instance);
instance = null;
}
instance = this;
}
private void Update()
{
//如果autoSimulation被设置为enabled,不进行处理
if (Physics.autoSimulation)
return;
if (FixedDeltaTime <= 0)
{
Physics.Simulate(Time.deltaTime);
}
else
{
_timer += Time.deltaTime;
while (_timer >= FixedDeltaTime)
{
_timer -= FixedDeltaTime;
Physics.Simulate(FixedDeltaTime);
}
}
}
//静态函数 启动模拟
public static void StartSimulate()
{
if (instance == null)
{
var go = new GameObject("[PhysicsRoot]");
go.AddComponent();
DontDestroyOnLoad(go);
}
}
}