🎮Unreal4/Blueprint

[UE4] 데미지 프레임워크(Apply Damage/Any Damage), Instigator Controller, Authority 전용 아이콘

공대 컴린이 2023. 1. 24. 00:47
728x90

👊 데미지 프레임워크

💥 데미지 전달 함수

Apply Damage Function

언리얼 엔진4에는 총 4개의 데미지 처리 함수가 있다. Apply Damage함수는 입힐 데미지를 전달(Return)하여 사용한다.

예를 들어 플레이어가 적(Enemy)과 충돌하면 Apply Damage함수를 호출하여 Enemy에게 입힐 데미지를 전달하여 사용한다.

  • Apply Damage
    - 일반적인 면 충돌로 처리하여 데미지를 입힌다.
  • Apply Point Damage
    - 점 충돌을 이용하여 총알같은 피격 무기 구현에 사용된다.
    - 어떤 방향에서 Actor의 어느 위치에 맞았는지 데미지를 주는 위치 정보도 얻어올 수있는 함수이다.
  • Apply Radial Damage
    - 구 형태의 데미지로 수류탄같이 방사형으로 퍼지는 데미지를 구현하는데 사용된다.
    - Origin으로부터 Radius만큼의 범위 데미지를 줄 수 있다.
  • Apply Radial Damage with Falloff
    - Radial Damage와 같은 형태의 데미지 처리지만, Radial Damage는 거리가 멀어질수록 데미지가 줄어들지만, with Falloff 함수는 범위 안에서 일정한 데미지를 주도록 구현 가능한 함수이다.

💥 데미지 처리 함수

Damage Event

Damage이벤트는 플레이어로부터 충돌되어 데미지를 받은 Enemy가 Any Damage이벤트를 호출하여 입혀질 데미지 수치를 받아올 수 있는 함수이다. 각 Apply Damage 함수와 맞추어 사용하면 된다.

참고로 Any Damage 함수는 BP에서만 사용이 가능하다.

  • Instigated By : Actor형, 데미지를 입힌 액터를 연결
    ex) AnyDamage 이벤트 자체가 누군가에게 맞아서 데미지를 입었을 때 호출되는 함수이다. 따라서 플레이어가 Enemy를 공격했을 때 데미지를 입힌 액터는 플레이어이므로, 플레이어를 Instigated By에 연결한다.
  • Damage Causer : Actor형, 데미지를 유발한 액터를 연결
    ex) 검, 총알, 수류탄 등의 때린 무기?를 연결. 언리얼 문서에서는 Causer에 물을 연결해서 물속에 들어간 경우 피를 깎는 프로그램을 예시로 보여주었음

💥 데미지 처리 예제

공격 전 Player와 Enemy Player의 검(Sword)로 Enemy 공격

Player의 오른손에 검(Sword)를 붙여놓았다. 공격키를 눌러 검을 휘두르면 검에 있는 Collider로 Enemy와의 충돌을 검사하였다. 

Sword 객체의 BP에서 Enemy에게 인가할 데미지를 설정하였다.

Sword BP

Sword의 Owner는 플레이어이기 때문에 Owner를 불러와서 Apply Damage값으로 20을 전달해주었다.

🚀 Instigator Controller (조정자, 전파자)

이때 보이는 Instigator Controller는 개념이 좀 어려워서 자세한 설명은 어렵지만 쉽게 말하자면,
캐릭터가 여러명 존재할 때 첫번째 기본 캐릭터가 실행될 때 컨트롤러가 거기에 빙의를 하게 된다. 이후에 컨트롤러가 플레이어를 제어하게 되고, 도중에 다른 캐릭터로 실행한다면 해당하는 다른 캐릭터로 빙의를 하는것과 비슷한 역할을 수행한다.
Sword BP에서의 Get Instigator Controller는 데미지를 전파할 컨트롤러의 역할을 수행한다. 네트워크의 입장에서 캐릭터는 User에게 보여주기 위함이지 서버의 입장에서는 캐릭터, 즉 어떻게 보여지는가는 전혀 중요하지 않고 누가 제어(Control)하느냐가 가장 중요한 요소이다. 

예를들어, 특정 클라이언트가 서버에게 데미지 입음을 전달했을 때 서버는 데미지 입음을 다시한번 검증하고 검증이 완료되면, 맞음 처리(Any Damage)를 수행하고 다른 클라이언트들에게도 해당 정보를 전파한다. 이와 같은 역할을 수행하는 객체가 Instigator Controller이다.

Enemy BP

Enemy의 BP에는 AnyDamage 함수를 배치하여 Enemy가 입은 데미지를  출력하였다.

성공적으로 Enemy에게 전달된 데미지가 출력되었다.

서버 아이콘

블루프린트에 노드를 배치하여 함수를 작성할 때 간혹 보이는 아이콘이다.

컴퓨터 본체같은 아이콘에 번개모양이 그려져있는 이 아이콘은 "서버"에서만 실행되는 함수라는 의미이다.

해당 아이콘에 마우스를 올리면 Authority 전용이라는 문구가 쓰여져있는데 여기서 Authority는 서버를 의미한다. 만약 서버가 없는 경우엔 Local에서 함수가 실행된다.

728x90