959e80cf72
assets upload description.
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);
|
|
}
|
|
}
|