70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
|
using System.ComponentModel;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace ABI.CCK.Components
|
|||
|
{
|
|||
|
[ExecuteInEditMode]
|
|||
|
[AddComponentMenu("Scripts/CVR Distance Constraint")]
|
|||
|
public class CVRDistanceConstrain : MonoBehaviour
|
|||
|
{
|
|||
|
public Transform target;
|
|||
|
public float minDistance = 0;
|
|||
|
public float maxDistance = 0;
|
|||
|
|
|||
|
[ReadOnly]
|
|||
|
[SerializeField]
|
|||
|
private float currentDistance = 0f;
|
|||
|
|
|||
|
public void OnDrawGizmosSelected()
|
|||
|
{
|
|||
|
if (target == null) return;
|
|||
|
|
|||
|
if (maxDistance < minDistance && maxDistance != 0f) return;
|
|||
|
|
|||
|
Vector3 direction = (transform.position - target.position).normalized;
|
|||
|
|
|||
|
if (minDistance == 0)
|
|||
|
{
|
|||
|
if (maxDistance == 0)
|
|||
|
{
|
|||
|
Gizmos.color = Color.green;
|
|||
|
Gizmos.DrawRay(target.position, direction * 9999f);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Gizmos.color = Color.green;
|
|||
|
Gizmos.DrawLine(target.position, target.position + direction * maxDistance);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (maxDistance == 0)
|
|||
|
{
|
|||
|
Gizmos.color = Color.red;
|
|||
|
Gizmos.DrawLine(target.position, target.position + direction * minDistance);
|
|||
|
Gizmos.color = Color.green;
|
|||
|
Gizmos.DrawRay(target.position + direction * minDistance, direction * 9999f);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Gizmos.color = Color.red;
|
|||
|
Gizmos.DrawLine(target.position, target.position + direction * minDistance);
|
|||
|
Gizmos.color = Color.green;
|
|||
|
Gizmos.DrawLine(target.position + direction * minDistance, target.position + direction * maxDistance);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void Update()
|
|||
|
{
|
|||
|
if (target == null)
|
|||
|
{
|
|||
|
currentDistance = 0f;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
currentDistance = Vector3.Distance(transform.position, target.position);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|