summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Physics')
-rw-r--r--Assets/Scripts/Physics/PhysicsBody.cs14
-rw-r--r--Assets/Scripts/Physics/PhysicsWorld.cs24
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)
{