diff options
Diffstat (limited to 'Assets/Scripts/Physics')
-rw-r--r-- | Assets/Scripts/Physics/PhysicsBody.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Physics/PhysicsWorld.cs | 24 |
2 files changed, 31 insertions, 7 deletions
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, // 从属于对手
}
+/// <summary>
+/// 物理子系统
+/// </summary>
public class PhysicsWorld : Singleton<PhysicsWorld>
{
private int m_UpdateRate = 60;
@@ -221,15 +224,24 @@ public class PhysicsWorld : Singleton<PhysicsWorld> 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)
{
|