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); } } }