유니티
특정 방향으로 화살표 가리키기
잼잼재미
2024. 8. 20. 02:49
스크립트 작성
[SerializeField] private float _distanceFromPlayer = 2f;
[SerializeField] private float _arrowHeight = 0.5f;
[SerializeField] private Quaternion _arrowBaseRotation = Quaternion.Euler(90, 0, 0);
private GameController _gameController;
private Transform _player;
private void Awake()
{
_gameController = GameObject.FindWithTag("GameController").GetComponent<GameController>();
_player = transform.parent.parent.gameObject.transform;
}
void Update()
{
UpdateArrowToTarget();
}
void UpdateArrowToTarget()
{
// 화살표의 위치를 플레이어 중심으로 원형 궤도로 설정
Vector3 direction = (_gameController.ArrowTarget.transform.position - _player.position).normalized;
Vector3 arrowPosition = _player.position + direction * _distanceFromPlayer;
// 지면에서 일정 높이에 위치시키기 위해 오프셋 적용
arrowPosition.y = _arrowHeight;
transform.position = arrowPosition;
// 타겟 방향으로 회전 설정 (2차원으로 구현)
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x, 0, direction.z));
// 최종 화살표의 회전 = 타겟을 바라보는 회전 * 기본 회전
transform.rotation = lookRotation * _arrowBaseRotation;
}
환경에 따라서 _arrowBaseRotation은 직접 설정해야 한다.