summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Physics/PhysicsHelper.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-10-24 17:30:07 +0800
committerchai <chaifix@163.com>2020-10-24 17:30:07 +0800
commit65ed53a40f990e895305ff17a5e48e3cd6b8785b (patch)
tree3333c6a9b19fa5602fd8827e582273f602452bec /Assets/Scripts/Physics/PhysicsHelper.cs
parent56a9b3bf4edc56e9c1dd502a469a7a0167751215 (diff)
*物理系统
Diffstat (limited to 'Assets/Scripts/Physics/PhysicsHelper.cs')
-rw-r--r--Assets/Scripts/Physics/PhysicsHelper.cs47
1 files changed, 29 insertions, 18 deletions
diff --git a/Assets/Scripts/Physics/PhysicsHelper.cs b/Assets/Scripts/Physics/PhysicsHelper.cs
index 0bd11ba7..821241e3 100644
--- a/Assets/Scripts/Physics/PhysicsHelper.cs
+++ b/Assets/Scripts/Physics/PhysicsHelper.cs
@@ -2,7 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
-enum CollisionType
+public enum CollisionType
{
BallvsBall = 1,
BallvsBox,
@@ -13,12 +13,12 @@ enum CollisionType
/// <summary>
/// 碰撞的信息
/// </summary>
-public class PhysicsCollisionInfo
+public struct PhysicsCollisionInfo
{
- CollisionType type;
- PhysicsPrimitive prim1;
- PhysicsPrimitive prim2;
- Vector3 contacts;
+ public CollisionType type;
+ public PhysicsPrimitive prim1;
+ public PhysicsPrimitive prim2;
+ public Vector3 contact;
}
public sealed class PhysicsHelper
@@ -44,22 +44,33 @@ public sealed class PhysicsHelper
return false;
}
- public static bool BallvsBall2D(PhysicsBall ball1, PhysicsBall ball2, out PhysicsCollisionInfo info)
+ public static bool BallvsBall2D(PhysicsBall ball1, PhysicsBall ball2, ref PhysicsCollisionInfo info)
{
- info = null;
return true;
}
- public static bool BoxvsBox2D(PhysicsBox box1, PhysicsBox box2, out PhysicsCollisionInfo info)
+ public static bool BoxvsBox2D(PhysicsBox box1, PhysicsBox box2, ref PhysicsCollisionInfo info)
{
- info = null;
- return true;
+ if(box1.Left < box2.Right && box1.Right > box2.Left && box1.Bottom < box2.Top && box1.Top > box2.Bottom)
+ {
+ info.type = CollisionType.BoxvsBox;
+ info.prim1 = box1;
+ info.prim2 = box2;
+
+ float left = Mathf.Max(box1.Left, box2.Left);
+ float right = Mathf.Min(box1.Right, box2.Right);
+ float top = Mathf.Min(box1.Top, box2.Top);
+ float bottom = Mathf.Max(box1.Bottom, box2.Bottom);
+ info.contact = new Vector3((left + right )/2f, (top + bottom)/2f, 0 );
+
+ return true;
+ }
+ return false;
}
- public static bool BallvsBox2D(PhysicsBall ball, PhysicsBox box, out PhysicsCollisionInfo info)
+ public static bool BallvsBox2D(PhysicsBall ball, PhysicsBox box, ref PhysicsCollisionInfo info)
{
- info = null;
return true;
}
@@ -78,21 +89,21 @@ public sealed class PhysicsHelper
return false;
}
- public static bool PrimvsPrim(PhysicsPrimitive prim1, PhysicsPrimitive prim2, out PhysicsCollisionInfo info)
+ public static bool PrimvsPrim(PhysicsPrimitive prim1, PhysicsPrimitive prim2, ref PhysicsCollisionInfo info)
{
if(prim1.Type == PrimitiveType.Ball)
{
if (prim2.Type == PrimitiveType.Ball)
- return BallvsBall2D(prim1 as PhysicsBall, prim2 as PhysicsBall, out info);
+ return BallvsBall2D(prim1 as PhysicsBall, prim2 as PhysicsBall, ref info);
else
- return BallvsBox2D(prim1 as PhysicsBall, prim2 as PhysicsBox, out info);
+ return BallvsBox2D(prim1 as PhysicsBall, prim2 as PhysicsBox, ref info);
}
else
{
if (prim2.Type == PrimitiveType.Ball)
- return BallvsBox2D(prim2 as PhysicsBall, prim1 as PhysicsBox, out info);
+ return BallvsBox2D(prim2 as PhysicsBall, prim1 as PhysicsBox, ref info);
else
- return BoxvsBox2D(prim1 as PhysicsBox, prim2 as PhysicsBox, out info);
+ return BoxvsBox2D(prim1 as PhysicsBox, prim2 as PhysicsBox, ref info);
}
}