벡터 : 3D 공간에서의 방향과 크기
컴퓨터 프로그래밍에서의 벡터 : 3개의 부동소수점 값 (x, y, z)
벡터의 덧셈
위치 벡터(pos)+ 이동 벡터(move) = 새로운 위치 벡터(newPos)
순서를 바꿔도 결과는 마찬가지
newPos.x = pos.x + move.x
newPos.y = pos.y + move.y
벡터의 뺼셈
A - B = C
A + (-B) = C
벡터의 곱셈
A * 2 = B
A + A = B
방향은 같고, 크기가 2배인 벡터
전방 벡터는 회전한 X축 방향. 즉, 회전한 다음 앞쪽 방향이 전방 벡터.
우측 벡터는 회전한 Y축 방향. 즉, 회전한 다음 오른쪽 방향이 우측 벡터.
따라서 특정 액터의 전방 벡터를 구하기 위해선, 반드시 해당 액터를 회전시켜야 함. 그리고 해당 엑터가 회전한 방향(향하는 방향)이 곧 그 액터의 전방 벡터임.
플레이 중 현재 내가 바라보고 있는 방향으로 발사체를 날리고 싶기 때문에 나(Pawn) 노드를 Get Control Rotation 노드와 연결하여 회전된 시점 벡터를 가져오고, 이 벡터를 SpawnActor 노드의 Rotation 입력으로 연결시킨 뒤 전방 벡터 노드를 연결하고 이 방향으로 impulse를 줘야 함.
전방 벡터와 우측 벡터의 흥미로운 점은 길이(크기)가 항상 1 이라는 점
우리가 특정 방향으로 원하는 길이만큼 이동시키고 싶으면 원하는 만큼 단순히 곱하면 됨.
Actor를 회전시키고 해당 Actor 의 레퍼런스를 참조하여 get Actor Forward Vector 노드 생성
이때, 스폰된 발사체를 전방으로 날리는 것이므로 스폰된 액터의 전방 벡터를 구해야 함. Pawn의 전방 벡터가 아님.
그리고 Add impulse 노드의 impulse 입력 데이터핀에 연결
그러나 이렇게만 하면 전방 벡터의 길이는 기본적으로 1이며, 언리얼에선 단위가 cm 이므로 초당 1cm, 매우 낮은 속도로 이동하게 됨. 사실상 이동X
따라서 해당 벡터에 부동소수점 값을 곱해야함.
Get Actor Forward Vector 노드 리턴값에서 Multiply 노드에 연결
생성하면 기본적으로 벡터에 벡터를 곱하게 돼있는데, Multiply 노드의 데이터핀 우클릭 -> Convert Pin -> Float 선택시 하나의 입력받는 노드로 변경할 수 있음. 그리고 적당한 값 입력 후 impulse 노드와 연결.