사전 지식
1. 벡터의 크기 구하는 방법
직선상에 빈틈이 없도록 실수 집합으로 모든 수를 표시한 것을 수직선이라고 한다.

0을 기준으로 음수와 양수라는 두 개의 체계가 서로 대칭되어 있고, 원점에서부터 크기와 방향을 가진 화살표로 표현할 수 있다.
수가 지니는 방향은 부호로 나타내며 크기는 원점으로부터의 거리를 의미한다.
ex) "-2" 라는 수는 왼쪽 방향으로 원점으로부터 2칸 떨어진 거리에 있다.
어떤 수의 원점으로부터의 거리는 수직 막대 기호를 써서 절댓값이라고 표현을 한다.
새로운 수직선을 추가해 수직으로 배치해서 벡터 공간(2차원 공간)으로 확장을 해보자.
수의 크기는 원점으로부터의 거리를 의미하며 절댓값 기호를 사용해 구할 수 있었다.
마찬가지로 벡터 공간에서도 원점으로부터의 최단 거리를 의미한다.

피타고라스 정리를 사용하여 거리를 구할 수 있다.
3차원 벡터 공간도 마찬가지로 z 축이 추가됐기 때문에 새로운 축을 포함해서 계산한다.

Q) 벡터와 벡터 사이의 크기(magnitude)는 어떻게 구하는가?


V1 - V2 = (1,1) - (2,2)
= | -(1,1) | = (1,1) = 크기는 루트 2
V2 - V1 = (2,2) - (1,1)
= | (1,1) | = (1,1) = 크기는 루트 2
즉, 크기는 절댓값(||) 이므로 빼는 순서가 뒤 바뀌어도 동일한 결과를 도출하기 때문에 순서 상관없이 두 개의 벡터를 빼준 이후 나온 벡터에 대해서 피타고라스 정리를 적용하면 크기를 구할 수 있다.
플레이어 감지거리 체크


public void RangeCheck()
{
GameObject player = Managers.Game.GetPlayer();
if (player == null)
return;
float distance1 = (player.transform.position - _monsterController.transform.position).magnitude;
if (_monsterController.ScanRange >= distance1)
{
_monsterController.LockTarget = player;
_monsterController.State = Defines.State.Moving;
return;
}
}
public void RangeCheck()
{
GameObject player = Managers.Game.GetPlayer();
if (player == null)
return;
float distance2 = (_monsterController.transform.position - player.transform.position).magnitude;
if (_monsterController.ScanRange >= distance2)
{
_monsterController.LockTarget = player;
_monsterController.State = Defines.State.Moving;
return;
}
}
크기(거리)를 체크하기 때문에 플레이어 위치 - 몬스터 위치 or 몬스터 위치 - 플레이어 위치를 빼던 동일한 거리를 구할 수 있다.
'게임개발 > 유니티 엔진' 카테고리의 다른 글
3D 게임 오브젝트 클릭 or 터치시 UI 띄우기 (0) | 2024.04.24 |
---|---|
모바일 가상 조이스틱 구현 (0) | 2024.04.20 |
GameObject.AddComponent("스크립트") start 메서드 실행 문제점 (0) | 2024.03.26 |
Game Object 파괴시 null 처리 (0) | 2024.03.15 |
네비게이션 시스템 (0) | 2024.03.10 |