diff options
author | chai <chaifix@163.com> | 2020-10-14 10:15:19 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-14 10:15:19 +0800 |
commit | 4056f06baea18d3c5ae23c4a022fc6ae6b135bb2 (patch) | |
tree | ec33414096256b2df270ef43452ee21be55179df /Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs | |
parent | 104ca96a6581bddf48b769abdcb84842459260c3 (diff) |
+dynamic bone
Diffstat (limited to 'Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs')
-rw-r--r-- | Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs b/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs new file mode 100644 index 00000000..7265d26a --- /dev/null +++ b/Assets/ThirdParty/DynamicBone/Scripts/DynamicBonePlaneCollider.cs @@ -0,0 +1,76 @@ +using UnityEngine;
+
+[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
+public class DynamicBonePlaneCollider : DynamicBoneColliderBase
+{
+ void OnValidate()
+ {
+ }
+
+ public override bool Collide(ref Vector3 particlePosition, float particleRadius)
+ {
+ Vector3 normal = Vector3.up;
+ switch (m_Direction)
+ {
+ case Direction.X:
+ normal = transform.right;
+ break;
+ case Direction.Y:
+ normal = transform.up;
+ break;
+ case Direction.Z:
+ normal = transform.forward;
+ break;
+ }
+
+ Vector3 p = transform.TransformPoint(m_Center);
+ Plane plane = new Plane(normal, p);
+ float d = plane.GetDistanceToPoint(particlePosition);
+
+ if (m_Bound == Bound.Outside)
+ {
+ if (d < 0)
+ {
+ particlePosition -= normal * d;
+ return true;
+ }
+ }
+ else
+ {
+ if (d > 0)
+ {
+ particlePosition -= normal * d;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ void OnDrawGizmosSelected()
+ {
+ if (!enabled)
+ return;
+
+ if (m_Bound == Bound.Outside)
+ Gizmos.color = Color.yellow;
+ else
+ Gizmos.color = Color.magenta;
+
+ Vector3 normal = Vector3.up;
+ switch (m_Direction)
+ {
+ case Direction.X:
+ normal = transform.right;
+ break;
+ case Direction.Y:
+ normal = transform.up;
+ break;
+ case Direction.Z:
+ normal = transform.forward;
+ break;
+ }
+
+ Vector3 p = transform.TransformPoint(m_Center);
+ Gizmos.DrawLine(p, p + normal);
+ }
+}
|