초보 코린이의 성장 일지

UE4 타겟팅 보정, 외적, 내적 이론 본문

언리얼

UE4 타겟팅 보정, 외적, 내적 이론

코오린이 2023. 2. 8. 12:19

게임에서 보면 타겟팅이 고정되는 순간 마우스가 움직일 수 있게 되는데 대부분 좌우는 보정치를 둬서 막아두게 된다.

위 아래는 자유롭게 움직일수 있도록 만들어 볼 것이다.

함수 Tick Targeting 시퀀스 0번

1. 아래까지 작성을 하게된다면, 타겟팅을 했을시 마우스 좌우위아래가 보정이 생겨서 어느 지점에서 움직이기 힘들어진다.

2. 이 지점을 풀어주기위해 핀분활을 통해 Character, Target에서 X, Z축만 가져가고 회전은 Y만 가져가준다.

함수 Tick Targeting 시퀀스 1번

사용 할 함수, 변수 추가한 상태

1. false 경우 보간을 통해서 타겟팅이 이뤄지도록 만들어준다.

2. 회전이 딱 맞도록 완료되어야 하는 값이 Owner to Target 이며, 거기까지 가야하므로 ture로 연결

3. 위와 동일하게 보정이 들어가므로, Target에 대한 축을 이용하기 위해 분활을 통해 필요한 값만 가져간다.

4. Owner Target에 X, Z축을 이어주고 Control Rotation에 Y축은 연산을 안할것이므로 그대로 이어준다,

5. 위 2개의 과정이 끝나면 위아래는 보간이 안되서 자유롭게 움직일 수 있다.

TargetComponent 이벤트그래프 뒷 부분 추가

1. 위에 작성한 Targeting을 매 Tick마다 호출시켜서 타겟을 검사하고 지정할 것이기 때문에 true에 추가만 해준다.

 

 

언리얼 좌표계를 나타낼때 360분법을 사용하게 된다.

내적의 치명적인 단점이 존재한다. 

내적으로 각을 구해서 판단했을때 전방과 뒤는 알수있지만 좌우를 판단 할 수가 없다.

이때 외적으로 360분법에 적용해서 좌우를 알아내줘야 한다.

그리고 외적은 시계방향이며, 계산 들어가는 순서가 중요하다 꼬이면 계산에 차질이 생긴다.

3D공간부터 잘라내면 컬링, 2D공간부터 잘라내면 클리핑이라 부른다.

 

 

타겟팅 이동을 하기에 앞서서 이 이론을 바탕으로 간단하게 눈으로 볼 수 있는 구현을하고 진행해 보겠다.

 

 

1. 맵을 하나 새로만들어서 구체 2개를 올려 놓는다.

2. Actor로 객체 하나를 생성해준다.

3. 이를 통해 원리를 알아볼 것이다.

 

사용 할 함수와, 변수를 추가했다. 

1. 변수유형은 보이는바와 같이 Static Mesh Acotr로 받아준다.

 

함수 GetPlayerLocation

1. Player 위치를 리턴

함수 GetPlayerToEnemy

1. Enemy에 방향은 만들어지고 길이는 살아있는 상태

 

1. Draw Debug Arrow를 통해 선을 볼 수 있다. 이걸로 방향을 눈으로 확인해 보겠다.

2. Player에서부터 Enemy까지 그릴 것이다 정규화를 안했기 때문에 방향과, 길이가 살아있다. 

3. Forward에 * 500을 계산, 방향만 있는 상태

1. 실제로 Cross를 사용하여 외적을 그려 볼것이다.

2. Player에 GetActorForwardVector를 통해 전방 길이가 1이되고, 기준이 될 것이다.

3. 위에서 정해준 Player 기준으로 Enemy 외적을 해준다.

4. Player에 전방방향과 Player에서 Enemy로 향하는 방향과 외적이 이뤄지면서 Player에 Z축이 생겨난다.

5. 이제부터 Enemy가 움직이더라도 Player와에 평행 축은 변화하지 않는다.

 

보는거와 같이 눈으로 확인이 가능하도록 표현이 된다.

 

이제 이걸 토대로 타겟팅을 구현하게 될 것이다.

 

https://www.youtube.com/watch?v=1qTtunPKDak 

 

- 외적, 내적 이해 필수

Comments