From f049177e20a276049c61edbad631c1b2bbdd5706 Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 15 Oct 2020 19:05:22 +0800 Subject: -advanced inspector +odin --- Assets/Scripts/Physics/PhysicsWorld.cs | 65 +++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 8 deletions(-) (limited to 'Assets/Scripts/Physics/PhysicsWorld.cs') diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs index 653bad0d..5ef747b2 100644 --- a/Assets/Scripts/Physics/PhysicsWorld.cs +++ b/Assets/Scripts/Physics/PhysicsWorld.cs @@ -3,30 +3,79 @@ using System.Collections.Generic; using UnityEngine; /// -/// 标记 +/// primitive标记 /// public enum PhysicsTag { - Player, - Oponent, + Player = 1, // 从属于玩家 + Oponent = 1 << 1, // 从属于对手 } /// -/// 分类 +/// primitive分类 /// public enum PhysicsGroup { - Character, - Environment, - Props, + Character, // 角色 + Prop, // 物体 + Ground, // 地面 + Wall, // 墙面 } public class PhysicsWorld : Singleton { - private int m_UpdateRate = 60; + private int m_UpdateRate = 30; + // 重力加速度 + private readonly Vector3 m_Gravity = new Vector3(0, -9.8f, 0); + // 当前管理的碰撞体 + private List m_Primitives; + private float m_TimeCount; + public void Init() + { + m_Primitives = new List(); + m_TimeCount = Time.time; + } + + public void AddPrimitive(PhysicsPrimitive prim) + { + if (prim == null) + return; + if(m_Primitives.Contains(prim)) + { + Debug.LogError("PhysicsWorld已经存在此碰撞体,ID=" + prim.ID + ", 类型=" + prim.Tag); + return; + } + m_Primitives.Add(prim); + } + + public void RemovePrimitive(PhysicsPrimitive prim) + { + if (prim == null) + return; + m_Primitives.Remove(prim); + } + + /// + /// 物理系统已稳定的逻辑帧率执行 + /// public void Update() { + float preTime = m_TimeCount; + m_TimeCount = Time.time; + float dt = m_TimeCount - preTime; + while (dt > 1f / m_UpdateRate) + { + Tick(); + dt -= 1f / m_UpdateRate; + } + m_TimeCount -= dt; + } + + private void Tick() + { + float deltaTime = 1f / m_UpdateRate; + //Debug.Log("Physics Tick"); } -- cgit v1.1-26-g67d0