vault backup: 2024-10-12 17:19:45

This commit is contained in:
2024-10-12 17:19:46 +08:00
parent ff94ddca61
commit 244c0c52f6
960 changed files with 31348 additions and 10 deletions

View File

@@ -0,0 +1,39 @@
# CallableWithoutWorldContext
- **功能描述:** 让函数也可以脱离WorldContextObject而使用
- **使用位置:** UFUNCTION
- **元数据类型:** bool
- **关联项:** [WorldContext](../WorldContext/WorldContext.md)
让函数也可以脱离WorldContextObject而使用。
CallableWithoutWorldContext 是配合WorldContext或DefaultToSelf来使用这二者会使得一个函数会要求外部传入一个WorldContext对象才能调用。因此这种函数在没有实现GetWorld的Object子类里就不能调用。但有时某些函数又不一定必须得有WorldContextObject才能工作比如PrintString或VisualLogger里的函数。
## 测试代码:
```cpp
UFUNCTION(BlueprintPure, meta = (WorldContext = "WorldContextObject"))
static FString MyFunc_HasWorldContextMeta(const UObject* WorldContextObject, FString name, FString value);
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject",CallableWithoutWorldContext))
static FString MyFunc_CallableWithoutWorldContext(const UObject* WorldContextObject, FString name, FString value);
UCLASS(Blueprintable, BlueprintType)
class INSIDER_API UMyObject_NoGetWorld :public UObject
{
GENERATED_BODY()
};
```
## 蓝图测试效果:
在UMyObject_NoGetWorld 的子类内MyFunc_HasWorldContextMeta不能调用因为其外部类必须提供WorldContextObject。而MyFunc_CallableWithoutWorldContext可以调用可以接受不提供WorldContextObject。
![Untitled](Untitled.png)
## 源码里典型的应用是:
```cpp
UFUNCTION(BlueprintCallable, meta=(WorldContext="WorldContextObject", CallableWithoutWorldContext, Keywords = "log print", AdvancedDisplay = "2", DevelopmentOnly), Category="Development")
static ENGINE_API void PrintString(const UObject* WorldContextObject, const FString& InString = FString(TEXT("Hello")), bool bPrintToScreen = true, bool bPrintToLog = true, FLinearColor TextColor = FLinearColor(0.0f, 0.66f, 1.0f), float Duration = 2.f, const FName Key = NAME_None);
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB