From bdf47cf0fd36a5c858575a805cca70ab623868eb Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 29 Oct 2020 19:39:42 +0800 Subject: *misc --- Assets/Scripts/Physics/PhysicsBody.cs | 14 +++++++++++++- Assets/Scripts/Physics/PhysicsWorld.cs | 24 ++++++++++++++++++------ 2 files changed, 31 insertions(+), 7 deletions(-) (limited to 'Assets/Scripts/Physics') diff --git a/Assets/Scripts/Physics/PhysicsBody.cs b/Assets/Scripts/Physics/PhysicsBody.cs index b8f3b7ed..4077696a 100644 --- a/Assets/Scripts/Physics/PhysicsBody.cs +++ b/Assets/Scripts/Physics/PhysicsBody.cs @@ -104,9 +104,21 @@ public sealed class PhysicsBody : MonoBehaviour } } - [Tooltip("摩擦系数")] + [Tooltip("地面摩擦系数")] [SerializeField] private float m_Frication; + public float GroundFriction + { + get { return m_Frication; } + } + + //[Tooltip("空气摩擦力")] + //[SerializeField] + //private Vector3 m_AirFriction; + //public Vector3 AirFriction + //{ + // get { return m_AirFriction; } + //} [Tooltip("力")] [SerializeField] diff --git a/Assets/Scripts/Physics/PhysicsWorld.cs b/Assets/Scripts/Physics/PhysicsWorld.cs index cc7ce7c6..41ea59f8 100644 --- a/Assets/Scripts/Physics/PhysicsWorld.cs +++ b/Assets/Scripts/Physics/PhysicsWorld.cs @@ -28,6 +28,9 @@ public enum PhysicsTag Oponent = 1 << 1, // 从属于对手 } +/// +/// 物理子系统 +/// public class PhysicsWorld : Singleton { private int m_UpdateRate = 60; @@ -221,15 +224,24 @@ public class PhysicsWorld : Singleton body.transform.position = position; - PhysicsBox box = prim as PhysicsBox; - if(box.Bottom < 0.1f) + if(prim.IsOnGround) { + // pos=0, Vy=0 position.y = 0.1f; body.transform.position = position; - velocity.y = 0; - body.Velocity = velocity; - } - } + + // 地面摩擦力 + if(body.Velocity.x != 0 && body.GroundFriction != 0) + { + float dv = body.GroundFriction * dt; + dv = Mathf.Min(dv, Mathf.Abs(body.Velocity.x)); + dv = body.Velocity.x > 0 ? -dv : dv; + velocity.x += dv; + } + velocity.y = 0; + body.Velocity = velocity; + } + } void SolveCollision(PhysicsPrimitive prim, PhysicsCollisionInfo collision, float dt) { -- cgit v1.1-26-g67d0