76 lines
1.8 KiB
C#
76 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|