2.3 KiB
2.3 KiB
ScriptNoExport
- 功能描述: 不导出该函数或属性到脚本。
- 使用位置: UFUNCTION, UPROPERTY
- 引擎模块: Script
- 元数据类型: bool
- 常用程度: ★★★
不导出该函数或属性到脚本。
测试代码:
UCLASS(Blueprintable, BlueprintType, meta = (ScriptName = "MyPythonLib"))
class INSIDER_API UMyPythonTestLibary :public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
static void MyScriptFunc_None();
UFUNCTION(BlueprintCallable, meta = (ScriptNoExport))
static void MyScriptFunc_NoExport();
public:
UPROPERTY(BlueprintReadWrite, EditAnywhere)
float MyFloat = 123.f;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta = (ScriptNoExport))
float MyFloat_NoExport = 123.f;
};
测试效果py代码:
可见默认的函数和属性都会导出到脚本里。而MyScriptFunc_NoExport和MyFloat_NoExport在py里并没有。
class MyPythonLib(BlueprintFunctionLibrary):
r"""
My Python Test Libary
**C++ Source:**
- **Module**: Insider
- **File**: MyPythonTest.h
"""
@property
def my_float(self) -> float:
r"""
(float): [Read-Write]
"""
...
@my_float.setter
def my_float(self, value: float) -> None:
...
@classmethod
def my_script_func_none(cls) -> None:
r"""
X.my_script_func_none() -> None
My Script Func None
"""
...
原理:
根据这个ScriptNoExport来判断一个属性或函数是否导出。
bool IsScriptExposedProperty(const FProperty* InProp)
{
return !InProp->HasMetaData(ScriptNoExportMetaDataKey)
&& InProp->HasAnyPropertyFlags(CPF_BlueprintVisible | CPF_BlueprintAssignable);
}
bool IsScriptExposedFunction(const UFunction* InFunc)
{
return !InFunc->HasMetaData(ScriptNoExportMetaDataKey)
&& InFunc->HasAnyFunctionFlags(FUNC_BlueprintCallable | FUNC_BlueprintEvent)
&& !InFunc->HasMetaData(BlueprintGetterMetaDataKey)
&& !InFunc->HasMetaData(BlueprintSetterMetaDataKey)
&& !InFunc->HasMetaData(BlueprintInternalUseOnlyMetaDataKey)
&& !InFunc->HasMetaData(CustomThunkMetaDataKey)
&& !InFunc->HasMetaData(NativeBreakFuncMetaDataKey)
&& !InFunc->HasMetaData(NativeMakeFuncMetaDataKey);
}