유니티

특정 방향으로 화살표 가리키기

잼잼재미 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은 직접 설정해야 한다.