12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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);
- }
- }
|