summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Physics/PhysicsWorld.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-15 19:05:22 +0800
committerchai <chaifix@163.com>2020-10-15 19:05:22 +0800
commitf049177e20a276049c61edbad631c1b2bbdd5706 (patch)
tree7d1a1cd9b690a5d9a8b9a65554a191d6ec769601 /Assets/Scripts/Physics/PhysicsWorld.cs
parent6990a0d1fbdcbbf404f40713363ac1a148c8840a (diff)
-advanced inspector
+odin
Diffstat (limited to 'Assets/Scripts/Physics/PhysicsWorld.cs')
-rw-r--r--Assets/Scripts/Physics/PhysicsWorld.cs65
1 files changed, 57 insertions, 8 deletions
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;
/// <summary>
-/// 标记
+/// primitive标记
/// </summary>
public enum PhysicsTag
{
- Player,
- Oponent,
+ Player = 1, // 从属于玩家
+ Oponent = 1 << 1, // 从属于对手
}
/// <summary>
-/// 分类
+/// primitive分类
/// </summary>
public enum PhysicsGroup
{
- Character,
- Environment,
- Props,
+ Character, // 角色
+ Prop, // 物体
+ Ground, // 地面
+ Wall, // 墙面
}
public class PhysicsWorld : Singleton<PhysicsWorld>
{
- private int m_UpdateRate = 60;
+ private int m_UpdateRate = 30;
+ // 重力加速度
+ private readonly Vector3 m_Gravity = new Vector3(0, -9.8f, 0);
+ // 当前管理的碰撞体
+ private List<PhysicsPrimitive> m_Primitives;
+ private float m_TimeCount;
+ public void Init()
+ {
+ m_Primitives = new List<PhysicsPrimitive>();
+ 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);
+ }
+
+ /// <summary>
+ /// 物理系统已稳定的逻辑帧率执行
+ /// </summary>
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");
}