게임개발/Unreal 블루프린트

[Unreal_블루프린트]#28_Change Targeting

Hardii2 2022. 9. 29. 23:26

 

[Unreal_블루프린트]#28_Change Targeting

Unreal 블루프린트 개발 중 "타게팅" 구현에 대해 알아보겠습니다.

"블루 프린트" 활용에 대한 내용입니다.

 


 

Camera Focal Point

1. End Lock On 커스텀 이벤트 생성

Targeting Event -> End Lock On 커스텀 이벤트

 

2. Tick Lock On, Targeting 액션의 실시간 업데이트

Targeting Event -> Tick Lock On 이벤트

1. Lock Distance 변수

  • Targeting 입력 액션이 발생할 때마다, 주어진 "최대 범위"를 의미합니다.

2. Set Control Rotation

  • Targeting이 성공적으로 이루어졌을 때, Controller, 즉 Camera의 회전을 Enemy 방향으로 설정합니다.

3. Tick 이벤트

  • 당연하게도, Tick Lock On 이벤트를 호출하기 위해선 Tick 이벤트에 연결해줘야 합니다!

 

Targeting Change, 범위 내 Targeting 대상 순회

1. Get Nearest Enemy 함수 생성

BP_Player::Get Nearest Enemy 함수

2. Target Enemy & Player To Enemy Distance 

  • Target Enemy 객체(Key) + Player와 해당 Target Enemy 객체 간의 거리(Value)를 Pair로 "map 컨테이너"를 생성합니다. 이때 중요한 점은 "내적(Dot Product)" + "외적(Cross Product)"의 활용입니다!

 

3. Dot Product + Cross Product

1. 벡터 A의 길이와 벡터 B의 길이가 같다고 가정합니다. A = B

2. 이때 단순히 검정색 구와 빨간색 구 간의 거리를 map 컨테이너에 저장하면, 혼란을 가져옵니다!!

3. Cross Product + Dot Product

  • 검은색 구의 전방 벡터와 A 벡터 그리고 B 벡터의 외적을 구합니다.
  • 외적의 결과와 검은색 구의 상방 벡터내적을 구하면 Scalar 값이 나옵니다!
  • 왼쪽에 있는 검정색검은색 구는 - N 값이 나오며, 오른쪽에 있는 검은색 구는 +N 값이 나오게 되죠!

4. Map 컨테이너 순회

1. Map을 순회하며 Value 값들에 접근합니다.

2. Player의 전방 벡터 기준으로 오른쪽은 양수(+) 왼쪽은 음수(-)이므로 "0"을 기준으로 비교를 진행

3. 최소 값을 경신하는 Value 값을 통해 Key 값, 즉 가까운 BP_Enemy 객체를 map 컨테이너에서 찾습니다.

4. 찾아낸 BP_Enemy 객체에 "Set Target Cursor(마킹)"을 호출하고 Lock On Enemy로 설정합니다.

 

결과 화면