Files
XRLib/Assets/HybridIK/Scripts/Main/TargetRangeLimiter.cs
2025-12-08 10:59:29 +09:00

43 lines
1.4 KiB
C#

using UnityEngine;
/// 이 Transform의 위치를 지정된 중심점으로부터 최대 거리를 벗어나지 않도록 제한
public class TargetRangeLimiter : MonoBehaviour
{
[Header("Range Limit")]
[SerializeField] private Transform centerPoint;
[SerializeField] private float maxDistance = 2.0f;
// LateUpdate를 사용하여 다른 스크립트에 의해 위치가 변경된 후 최종적으로 위치 보정
private void LateUpdate()
{
if (centerPoint == null)
{
return;
}
// 1. 중심점에서 현재 핸들 위치까지의 벡터와 거리를 계산
Vector3 directionFromCenter = transform.position - centerPoint.position;
float currentDistance = directionFromCenter.magnitude;
// 2. 현재 거리가 최대 거리를 초과했는지 확인
if (currentDistance > maxDistance)
{
// 3. 방향은 유지한 채, 거리를 최대 거리로 제한하는 새로운 위치 계산
Vector3 newPosition = centerPoint.position + directionFromCenter.normalized * maxDistance;
// 4. 핸들의 위치를 계산된 새 위치로 강제 설정
transform.position = newPosition;
}
}
//// 기즈모를 그려서 작업 범위를 시각적으로 보여줌 (에디터 전용)
//private void OnDrawGizmosSelected()
//{
// if (centerPoint != null)
// {
// Gizmos.color = Color.green;
// Gizmos.DrawWireSphere(centerPoint.position, maxDistance);
// }
//}
}