¾ð¸®¾ó µ¨¸®°ÔÀÌÆ®¿¡ ´ëÇؼ ¾Ë¾Æ º¸ÀÚ. ¸®ÅÏ°ªÀÌ ¾ø´Â µ¨¸®°ÔÀÌÆ® DECLARE_DELEGATE(DelegateName) void Function() DECLARE_DELEGATE_OneParam(DelegateName, Param1Type) void Function(<Param1>) DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type) void Function(<Param1>, <Param2>) DECLARE_DELEGATE_<Num>Params(DelegateName, Param1Type, Param2Type, ...) void Function(<Param1>, <Param2>, ...) ¸®ÅÏ°ªÀÌ ÀÖ´Â µ¨¸®°ÔÀÌÆ® DECLARE_DELEGATE_RetVal(RetValType, DelegateName) < RetVal > Function() DECLARE_DELEGATE_RetVal_OneParam(RetValType, DelegateName, Param1Type) < RetVal > Function(<Param1>) DECLARE_DELEGATE_RetVal_TwoParams(RetValType, DelegateName, Param1Type, Param2Type) < RetVal > Function(<Param1>, <Param2>) DECLARE_DELEGATE_RetVal_<Num>Params(RetValType, DelegateName, Param1Type, Param2Type, ...) < RetVal > Function(<Param1>, <Param2>, ...) ³×ÀÌƼºê ±â´ÉÀ» ¹ÙÀεù ÇÒ¶§ »ç¿ë DECLARE_DELEGATE DECLARE_MULTICAST_DELEGATE ºí·çÇÁ¸°Æ® ±â´ÉÀ» ¹ÙÀεù ÇÒ¶§ »ç¿ë ÆĶó¹ÌÅÍ ¾ø°í ¸®ÅÏ°ª ¾ø´Â ±âº» µ¨¸®°ÔÀÌÆ®µ¨¸®°ÔÀÌÆ® »ç¿ëÀº ´ÙÀ½ 4´Ü°è·Î »ç¿ë ÇÒ¼ö ÀÖ´Ù.1. µ¨¸®°ÔÀÌÆ® ¼±¾ð DECLARE_DELEGATE(VoidSimple); 2. µ¨¸®°ÔÀÌÆ® Á¤ÀÇ VoidSimple VoidDeleFunc; 3. ¹ÙÀεù VoidDeleFunc.BindUFunction(this, FName("CallTest")); 4. ½ÇÇà VoidDeleFunc.Execute(); 5. ¹ÙÀεù ¿©ºÎ °Ë»ç VoidDeleFunc.IsBound() ¹ÙÀεùÇÒ ÇÔ¼ö¿¡ "UFUNCTION()"À» ÁöÁ¤ ÇÏÁö ¾ÊÀ¸¸é ÇÔ¼ö°¡ Á¦´ë·Î ºÒ·ÁÁöÁö ¾Ê´Â´Ù. ²À "UFUNCTION()"À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. //Çì´õ ÆÄÀÏ
DECLARE_DELEGATE(VoidSimple); UCLASS() class UMyGameInstance : public UGameInstance { public: VoidSimple VoidDeleFunc; private: UFUNCTION() void CallTest() } //CPP ÆÄÀÏ void UMyGameInstance::TestDelegate() { VoidDeleFunc.BindUFunction(this, FName("CallTest")); if (VoidDeleFunc.IsBound()) VoidDeleFunc.Execute(); } void UMyGameInstance::CallTest() { UE_LOG(LogTemp, Warning, TEXT("UMyGameInstance::CallTest-------------------")); } ÆĶó¹ÌÅÍ ¾ø°í ¸®ÅÏ°ª ¾ø´Â ¸ÖƼ ±âº» µ¨¸®°ÔÀÌÆ®¸ÖƼ ±âº» µ¨¸®°ÔÀÌÆ® »ç¿ëÀº ´ÙÀ½ 4´Ü°è·Î »ç¿ë ÇÒ¼ö ÀÖ´Ù.¸ÖƼ µ¨¸®°ÔÀÌÆ®´Â ¿©·¯°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÇÇàÇÏ¸é ¿©·¯°³ÀÇ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. 1. µ¨¸®°ÔÀÌÆ® ¼±¾ð DECLARE_MULTICAST_DELEGATE(MultiVoidSimple); 2. µ¨¸®°ÔÀÌÆ® Á¤ÀÇ MultiVoidSimple MultiVoidDeleFunc; 3. ¹ÙÀεù MultiVoidDeleFunc.AddUFunction(this, FName("CallTest")); 4. ½ÇÇà MultiVoidDeleFunc.Broadcast(); 5. ¹ÙÀεù ¿©ºÎ °Ë»ç MultiVoidDeleFunc.IsBound() ¹ÙÀεùÇÒ ÇÔ¼ö¿¡ "UFUNCTION()"À» ÁöÁ¤ ÇÏÁö ¾ÊÀ¸¸é ÇÔ¼ö°¡ Á¦´ë·Î ºÒ·ÁÁöÁö ¾Ê´Â´Ù. ²À "UFUNCTION()"À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. //Çì´õ ÆÄÀÏ
DECLARE_MULTICAST_DELEGATE(MultiVoidSimple); UCLASS() class UMyGameInstance : public UGameInstance { public: MultiVoidSimple MultiVoidDeleFunc; private: UFUNCTION() void CallTest() } //CPP ÆÄÀÏ void UMyGameInstance::TestDelegate() { MultiVoidDeleFunc.AddUFunction(this, FName("CallTest")); if (MultiVoidDeleFunc.IsBound()) MultiVoidDeleFunc.Broadcast(); } void UMyGameInstance::CallTest() { UE_LOG(LogTemp, Warning, TEXT("UMyGameInstance::CallTest-------------------")); } ÆĶó¹ÌÅÍ ¾ø°í ¸®ÅÏ°ª ¾ø´Â µ¿Àû ±âº» µ¨¸®°ÔÀÌÆ®µ¿Àû µ¨¸®°ÔÀÌÆ®´Â ºí·çÇÁ¸°Æ®ÀÇ ±â´É¿¡ »ç¿ë ÇÒ¼ö ÀÖ´Ù.µ¿Àû ±âº» µ¨¸®°ÔÀÌÆ® »ç¿ëÀº ´ÙÀ½ 4´Ü°è·Î »ç¿ë ÇÒ¼ö ÀÖ´Ù. µ¿Àû µ¨¸®°ÔÀÌÆ®´Â ¿©·¯°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÇÇàÇÏ¸é ¿©·¯°³ÀÇ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. 1. µ¨¸®°ÔÀÌÆ® ¼±¾ð DECLARE_DYNAMIC_DELEGATE(FVoidSimple); µ¿Àû µ¨¸®°ÔÀÌÆ®´Â µ¨¸®°ÔÀÌÆ® ¼±¾ð½Ã "F"¸¦ ²À ºÙ¿©¾ß ÇÑ´Ù. 2. µ¨¸®°ÔÀÌÆ® Á¤ÀÇ FVoidSimple VoidDeleFunc; 3. ¹ÙÀεù VoidDeleFunc.BindDynamic(this, &UMyGameInstance::CallTest); 4. ½ÇÇà VoidDeleFunc.ExecuteIfBound(); ExecuteIfBound ÇÔ¼ö´Â ¹ÙÀεù µÇ¾î ÀÖÀ¸¸é ½ÇÇàÇÏ°í, ¹ÙÀεù ¾ÈµÇ¾î ÀÖÀ¸¸é ½ÇÇàÇÏÁö ¾Ê´Â´Ù. IsBound·Î °Ë»çÇÏ°í Execute()°Í°ú °°Àº ±â´ÉÀ» ÇÑ´Ù. ¹Ýȯ°ªÀÌ ¾ø´Â µ¨¸®°ÔÀÌÆ®¿¡ »ç¿ë ÇÒ¼ö ÀÖ´Ù. 5. ¹ÙÀεù ¿©ºÎ °Ë»ç VoidDeleFunc.IsBound() ¹ÙÀεùÇÒ ÇÔ¼ö¿¡ "UFUNCTION()"À» ÁöÁ¤ ÇÏÁö ¾ÊÀ¸¸é ÇÔ¼ö°¡ Á¦´ë·Î ºÒ·ÁÁöÁö ¾Ê´Â´Ù. ²À "UFUNCTION()"À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. //Çì´õ ÆÄÀÏ
DECLARE_DYNAMIC_DELEGATE(FVoidSimple); UCLASS() class UMyGameInstance : public UGameInstance { public: FVoidSimple VoidDeleFunc; private: UFUNCTION() void CallTest() } //CPP ÆÄÀÏ void UMyGameInstance::TestDelegate() { VoidDeleFunc.BindDynamic(this, &UMyGameInstance::CallTest); VoidDeleFunc.ExecuteIfBound(); } void UMyGameInstance::CallTest() { UE_LOG(LogTemp, Warning, TEXT("UMyGameInstance::CallTest-------------------")); } ÆĶó¹ÌÅÍ ¾ø°í ¸®ÅÏ°ª ¾ø´Â µ¿Àû ¸ÖƼ ±âº» µ¨¸®°ÔÀÌÆ®µ¿Àû µ¨¸®°ÔÀÌÆ®´Â ºí·çÇÁ¸°Æ®ÀÇ ±â´É¿¡ »ç¿ë ÇÒ¼ö ÀÖ´Ù.µ¿Àû ¸ÖƼ ±âº» µ¨¸®°ÔÀÌÆ® »ç¿ëÀº ´ÙÀ½ 4´Ü°è·Î »ç¿ë ÇÒ¼ö ÀÖ´Ù. µ¿Àû ¸ÖƼ µ¨¸®°ÔÀÌÆ®´Â ¿©·¯°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÇÇàÇÏ¸é ¿©·¯°³ÀÇ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù. 1. µ¨¸®°ÔÀÌÆ® ¼±¾ð DECLARE_DYNAMIC_MULTICAST_DELEGATE(FMultiVoidSimple); µ¿Àû µ¨¸®°ÔÀÌÆ®´Â µ¨¸®°ÔÀÌÆ® ¼±¾ð½Ã "F"¸¦ ²À ºÙ¿©¾ß ÇÑ´Ù. 2. µ¨¸®°ÔÀÌÆ® Á¤ÀÇ FMultiVoidSimple dynaMultiVoidDeleFunc; 3. ¹ÙÀεù MultiVoidDeleFunc.AddDynamic(this, &UMyGameInstance::CallTest); 4. ½ÇÇà MultiVoidDeleFunc.Broadcast(); 5. ¹ÙÀεù ¿©ºÎ °Ë»ç MultiVoidDeleFunc.IsBound() ¹ÙÀεùÇÒ ÇÔ¼ö¿¡ "UFUNCTION()"À» ÁöÁ¤ ÇÏÁö ¾ÊÀ¸¸é ÇÔ¼ö°¡ Á¦´ë·Î ºÒ·ÁÁöÁö ¾Ê´Â´Ù. ²À "UFUNCTION()"À» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. //Çì´õ ÆÄÀÏ
DECLARE_MULTICAST_DELEGATE(FMultiVoidSimple); UCLASS() class UMyGameInstance : public UGameInstance { public: FMultiVoidSimple MultiVoidDeleFunc; private: UFUNCTION() void CallTest() } //CPP ÆÄÀÏ void UMyGameInstance::TestDelegate() { MultiVoidDeleFunc.AddDynamic(this, &UMyGameInstance::CallTest); if (MultiVoidDeleFunc.IsBound()) MultiVoidDeleFunc.Broadcast(); } void UMyGameInstance::CallTest() { UE_LOG(LogTemp, Warning, TEXT("UMyGameInstance::CallTest-------------------")); } ÂüÁ¶) ¾ð¸®¾ó µ¨¸®°ÔÀÌÆ® ¹®¼ ¾ð¸®¾ó µ¨¸®°ÔÀÌÆ® ¹®¼2 |