- 벡터(Vector) : 벡터는 크기와 방향을 가진 양을 나타내는 수학적 개념
- 스칼라(Scalar) : 크기만을 가지고 방향이 없는 양을 의미
- 벡터와 반대되는 개념으로 단순히 크기만을 가지고 있습니다.
- 벡터는 크기와 방향을 가지는 양으로 크기는 벡터의 길이를 의미하며, 방향은 벡터가 가리키는 방향을 의미합니다.
- 벡터는 덧셈과 뺄셈이 가능합니다.
ex) A벡터(1, 1) + B벡터(2, 1) = (1+2, 1+1) = (3, 2)
ex) A벡터(1, 1) - B벡터(2, 1) = (1-2, 1-1) = (-1, 0)
- 벡터는 스칼라(Scalar)와 곱셈과 나눗셈이 가능합니다.
ex) 3 x (1, 2) = (1 x 3, 2 x 3) = (3, 6)
ex) (2, 4) / 2 = 0.5 x (2, 4) = (0.5 x 2, 0.5 x 4) = (1, 2)
- 벡터를 만드는 방법은 다음과 같습니다.
- A(x1, y1)과 B(x2, y2) 사이의 벡터 = (x2 - x1, y2 - y1)
- 만약 플레이어의 위치(1, 1), 몬스터의 위치(2, 2)가 주어진 경우라면
플레이어에서 몬스터로 가기 위한 벡터는 (2, 2) - (1, 1)이 됩니다.
- 벡터의 크기(Magnitude)를 구하는 방법은 다음과 같습니다.
- 크기 = sqrt(x^2 + y^2)
- 벡터의 정규화(normalize) : 해당 벡터의 크기를 1로 만들어주는 과정
- 벡터의 크기가 1이 되면 방향은 유지한 채 크기를 표준화할 수 있습니다.
- 정규화된 벡터는 항상 크기가 1이므로 "단위 벡터(Unit Vector)"라고도 불립니다.
- 게임 개발에서 벡터는 다양한 용도로 활용되며, 주로 위치, 방향, 속도 등을 나타내기 위해 사용됩니다.
- 이전 시간에 만들었던 대포에 유도 기능을 추가해보도록 하겠습니다.
- 목표 : 발사 후 0.5초가 지나면 Target에게 날라가는 탄환 제작
- 타겟 역할을 해줄 Buleprint Class를 생성합니다.
- 타겟이 생성되었으므로 레벨 블루프린트에서 탄환에 타겟을 세팅합니다.
Target BluePrint Class 생성
간단히 원뿔 모형의 타겟을 생성해 레벨에 배치해줍니다.
탄환에 Target 변수를 생성하고 SetTarget() 함수를 생성합니다.
레벨 블루프린트를 열어 탄환 생성과 동시에 Target을 설정해줍니다.
- 0.5초가 지난 후 유도를 시작할 것입니다.
- Target의 위치벡터와 현재 Bullet의 위치벡터를 통해 방향(Unit) 벡터를 생성합니다.
- 해당 방향으로 Speed만큼 매 프레임 이동하도록 설정합니다.
0.5초가 지나면 분기될 로직을 구현합니다.
시간을 저장하기 위한 변수를 설정하고, branch 노드를 통해 분기합니다.
0.5초 이후 진행될 로직을 구현합니다.
탄환에서 Target으로 가기 위한 방향벡터를 구해야 합니다.
(Target의 위치 - 탄환의 현재 위치 = 타겟 방향으로의 벡터)
(위에서 구한 벡터를 정규화 하면 크기가 1인 방향 벡터가 생성됩니다.)
방향 벡터에 속도를 곱해 매 프레임 속도만큼 이동하도록 설정합니다. (누적)
(delta Seconds를 곱한 이유: 모든 컴퓨터에서 동일한 속도로 이동시키기 위함)
결과 확인
0.5초가 지나기 전
0.5초가 지난 후 유도되는 상황
결과 : 성공적으로 Target을 추적