43 lines
1.4 KiB
C#
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);
|
|
// }
|
|
//}
|
|
} |