1.C++聲明函數,藍圖實現該函數,C++調用
首先,在C++類中聲明一個方法,使用BlueprintImplementableEvent標識該方法為藍圖實現事件;
/*此函數可以在藍圖或關卡藍圖圖表內進行重載*/ UFUNCTION(BlueprintImplementableEvent, Category="SplineMesh") void PrintMessage(const FString &Message)
其次,新建一個藍圖繼承此類,並重載PrintMessage函數
圖片引用自:https://blog.csdn.net/qq992817263/article/details/52571678
2.C++聲明函數,並添加默認實現,藍圖可實現,可不實現,如未實現,則使用C++默認實現方法
//C++實現默認版本,藍圖可override實現 UFUNCTION(BlueprintNativeEvent, Category="NativeEvent") void FuncNativeBPEvent();
C++實現該函數時,函數名稱要加上“_Implementation”,如下:
void FuncNativeBPEvent_Implementation() { // 函數具體實現 }
3.C++ 調用純藍圖方法
C++ 可以通過命令行的方式調用藍圖實現的方法並傳遞參數,當然,前提是你能夠獲取到擁有這個方法的對象(DCRLabelWidget);下面例子中,我們調用DCRLabelWidget對象的名為SetName的方法,並傳入參數“0011”.
#include "Misc/OutputDeviceDebug.h" FString FieldName = TEXT("0011"); FString cmd = TEXT("SetName ")+ FieldName; FOutputDeviceDebug device; DCRLabelWidget->CallFunctionByNameWithArguments(*cmd, device, NULL, true);
4.C++獲取藍圖UserWidget內部控件
假設UI_Label為我們藍圖創建的UserWidget,內部有一個名為Btn_OnClick的Button組件,可以通過如下方式,找到這個Button對象,並給該button綁定點擊事件。
// UserWidget綁定2D screen模式下的點擊事件 if (UButton* ButtonOnClick = Cast<UButton>(UI_Label->GetWidgetFromName(TEXT("Btn_OnClick"))))//Button_OnClick { FScriptDelegate ButtonOnClickDelegate; ButtonOnClickDelegate.BindUFunction(this, "LabelOnClickCallBack"); ButtonOnClick->OnClicked.Add(ButtonOnClickDelegate); }
5.C++獲取藍圖屬性,及向藍圖屬性賦值
// 從DCRLabelWidget讀取Float類型屬性PX for (TFieldIterator<FFloatProperty> StrProperty(DCRLabelWidget->GetClass()); StrProperty; ++StrProperty) { if (StrProperty->GetName().Contains(TEXT("PX"))) { AbsoluteSizeX = StrProperty->GetPropertyValue_InContainer(DCRLabelWidget); break; } }
// DCRLabelWidget 為要設置屬性的UserWidget對象,這里以float類型屬性為例 for (TFieldIterator<FFloatProperty> StrProperty(DCRLabelWidget->GetClass()); StrProperty; ++StrProperty) { // 屬性名稱為SizeX if (StrProperty->GetName().Contains(TEXT("SizeX"))) { StrProperty->SetPropertyValue_InContainer(DCRLabelWidget, AbsoluteSizeX); break; } }