95 lines
2.1 KiB
C#
95 lines
2.1 KiB
C#
|
using UnityEngine;
|
|||
|
|
|||
|
[AddComponentMenu("Dynamic Bone/Dynamic Bone Plane Collider")]
|
|||
|
public class DynamicBonePlaneCollider : DynamicBoneColliderBase
|
|||
|
{
|
|||
|
// prepare data
|
|||
|
Plane m_Plane;
|
|||
|
|
|||
|
void OnValidate()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public override void Prepare()
|
|||
|
{
|
|||
|
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);
|
|||
|
m_Plane.SetNormalAndPosition(normal, p);
|
|||
|
}
|
|||
|
|
|||
|
public override bool Collide(ref Vector3 particlePosition, float particleRadius)
|
|||
|
{
|
|||
|
float d = m_Plane.GetDistanceToPoint(particlePosition);
|
|||
|
|
|||
|
if (m_Bound == Bound.Outside)
|
|||
|
{
|
|||
|
if (d < 0)
|
|||
|
{
|
|||
|
particlePosition -= m_Plane.normal * d;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (d > 0)
|
|||
|
{
|
|||
|
particlePosition -= m_Plane.normal * d;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* // consider particleRadius
|
|||
|
if (m_Bound == Bound.Outside)
|
|||
|
{
|
|||
|
if (d < particleRadius)
|
|||
|
{
|
|||
|
particlePosition += m_Plane.normal * (particleRadius - d);
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (d > -particleRadius)
|
|||
|
{
|
|||
|
particlePosition -= m_Plane.normal * (particleRadius + d);
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
*/
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
void OnDrawGizmosSelected()
|
|||
|
{
|
|||
|
if (!enabled)
|
|||
|
return;
|
|||
|
|
|||
|
Prepare();
|
|||
|
|
|||
|
if (m_Bound == Bound.Outside)
|
|||
|
{
|
|||
|
Gizmos.color = Color.yellow;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Gizmos.color = Color.magenta;
|
|||
|
}
|
|||
|
|
|||
|
Vector3 p = transform.TransformPoint(m_Center);
|
|||
|
Gizmos.DrawLine(p, p + m_Plane.normal);
|
|||
|
}
|
|||
|
}
|