您的位置:首页 > 产品设计 > UI/UE

ue4动态调用obj对象的方法

2016-08-02 20:48 281 查看
在使用AnimInstance的Notify时候发现可以动态调用UObject对象的方法,前提是这个方法必须是暴露给蓝图的或者是蓝图中的方法,应该是ue4中的某中反射机制生成的蓝图类XXX.generated.h

1、使用一个AMychar对象调用自身的bp func或者 c++暴露给蓝图的方法

void UMyBpFuncLib::TestObjFunc(AMyChar* _myChar,FString _funcName)
{
FName FuncFName = FName(*_funcName);
UFunction* Function = _myChar->FindFunction(FuncFName);
if (Function)
{
FString str = FString::Printf(TEXT("--- UFunction arg num:%d"), Function->NumParms); //这个方法的参数个数

GEngine->AddOnScreenDebugMessage(0, 2.0f, FColor::Green, str);

struct FAnimNotifierHandler_Parms //结构体和方法参数的类型和顺序要一致
{
int32 NotifyNum;
FString NotifyStr;
};

FAnimNotifierHandler_Parms Parms;
Parms.NotifyNum = 987;
Parms.NotifyStr = FString(TEXT("yangx"));
_myChar->ProcessEvent(Function, &Parms);
}
}


2、然后看下AMychar要被动态调用的方法

一定要暴露给蓝图,也就是加UFUNCTION

//h
UFUNCTION(BlueprintCallable, Category = "MyChar")
void TestFunction(int32 _num, FString _str);

//cpp
void AMyChar::TestFunction(int32 _num, FString _str)
{
FString str = FString::Printf(TEXT("--- AMyChar::TestFunction - num:%d, str:%s"), _num, *_str);
GEngine->AddOnScreenDebugMessage(0, 5.0f, FColor::Green, str);
}


3、蓝图动态调用c++方法



结果:



4、蓝图动态调用blueprint方法

在AMychar的蓝图类中其个方法



然后动态调用



结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: