개요
보스 몬스터와 부하 몬스터가 있다고 생각해보자.
보스가 버프를 사용하면 부하의 공격력이 증가하고
보스가 죽으면 부하도 죽는 코드를 구현해보자.
델리게이트 X
<hide/>
class Boss
{
public:
bool IsUsingBuff = false;
bool IsDie = false;
};
class Servant //부하
{
public:
void BossBuffCheck(Boss boss)
{
if (boss.IsUsingBuff == true)
{
AtkUP();
}
}
void BossDieCheck(Boss boss)
{
if (boss.IsDie == true)
{
Suicide();
}
}
void AtkUP()
{
//중복 호출 방지
//공격력 증가
}
void Suicide()
{
//중복 호출 방지
//자살
}
};
위 코드는 Update문에서 부하의 BossBuffCheck와 BossDieCheck를 통해 보스의 상태를 계속 체크해야 한다.
매우 비효율적이다.
보스가 버프를 사용하거나 죽는 이벤트 때 부하의 AtkUp나 Suicide가 자동으로 호출되면 좋을 것이다.
이럴 때 사용하는 것이 델리게이트다.
델리게이트 O
<hide/>
class Boss
{
public:
delegate OnBossUseBuff; //보스가 버프를 사용함
delegate OnBossDie; // 보스가 죽음
//내부 로직
};
class Servant //부하
{
public:
Servant(Boss boss)
{
boss.OnBossUseBuff(this, &Servant::AtkUP); //보스가 버프를 사용할 때 AtkUP 호출
boss.OnBossDie(this, &Servant::Suicide); //보스가 죽으면 Suicide 호출
}
void AtkUP()
{
//공격력 증가
}
void Suicide()
{
//자살
}
};
Unreal Engine 5 - Delegate vs Dynamic Delegate
Delegate
델리게이트 선언
DECLARE_DELEGATE
함수 등록
AddUObject(객체, 함수 이름)
AddLambda
Dynamic Delegate
델리게이트 선언
DECLARE_DYNAMIC_DELEGATE
함수 등록
AddDynamic(객체, 함수 이름)
등록하는 함수는 반드시 UFUNCTION 매크로를 사용해야 한다. - 따라서 람다식 사용이 불가능하다.
'언리얼 > 엔진 공부' 카테고리의 다른 글
Unreal Engine 5 - WeaponBox 구조 (0) | 2023.03.10 |
---|---|
Unreal Engine 5 - MakeFrom 축 (0) | 2023.02.23 |
Unreal Engine 5 - 콜리전 (1) | 2023.02.23 |
Unreal Engine 5 - 애니메이션 몽타주 (0) | 2023.02.23 |