89 lines
2.3 KiB
Markdown
Raw Normal View History

2024-10-12 17:19:46 +08:00
# ScriptNoExport
- **功能描述:** 不导出该函数或属性到脚本。
- **使用位置:** UFUNCTION, UPROPERTY
- **引擎模块:** Script
- **元数据类型:** bool
- **常用程度:** ★★★
不导出该函数或属性到脚本。
## 测试代码:
```cpp
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里并没有。
```cpp
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来判断一个属性或函数是否导出。
```cpp
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);
}
```