스크립트 작성
[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은 직접 설정해야 한다.
'유니티' 카테고리의 다른 글
오프닝 카메라 연출 효과 구현 (Dolly Track) (0) | 2024.06.03 |
---|---|
UI에 3D 캐릭터 보이게하기 (Rendertexture) (0) | 2024.05.15 |
데이터 저장 (Easy Save 에셋) (0) | 2024.05.05 |
조이스틱 구현 (0) | 2024.05.03 |
구글 플레이 업로드 (0) | 2024.04.19 |