在黑板功能的扩展方法中,TryGetSharedObject 实际上无法按预期工作的,并且在代码库中没有任何引用(引用数为0)。
我不确定这个方法有没有其他“隐藏”作用,但我看到它的引用为0并且大多数情况下无法正常工作(只有在T=UnityEngine.Object能工作)同时我注意到代码库中已存在一个能正常工作的方法 GetObject。
通过 SetTObject/SetObject 方法设置变量时,无论泛型 T 是什么类型 (如 GameObject, Transform 等),其容器的实际类型始终被统一为 SharedObject (继承自 SharedVariable<UnityEngine.Object>)。
此方法尝试将取出的变量容器直接转换为 SharedVariable。
在\Runtime\Core\Utility\BehaviorTreeExtension.cs中
public static bool TryGetSharedObject<T>(this IVariableSource variableScope, string variableName, out SharedVariable<T> sharedTObject) where T : Object
{
if (variableScope.TryGetSharedVariable(variableName, out SharedVariable sharedVariable))
{
sharedTObject = sharedVariable as SharedVariable<T>;
return sharedTObject != null;
}
sharedTObject = null;
return false;
}
这里由于 C# 的泛型不变性 (Invariance),SharedVariable 不能被安全地转换为 SharedVariable。因此,as 操作符会返回 null,导致该方法几乎永远返回 false。
我不知道是不是我遗漏了什么,如果是,麻烦告知,谢谢
在黑板功能的扩展方法中,TryGetSharedObject 实际上无法按预期工作的,并且在代码库中没有任何引用(引用数为0)。
我不确定这个方法有没有其他“隐藏”作用,但我看到它的引用为0并且大多数情况下无法正常工作(只有在T=UnityEngine.Object能工作)同时我注意到代码库中已存在一个能正常工作的方法 GetObject。
通过 SetTObject/SetObject 方法设置变量时,无论泛型 T 是什么类型 (如 GameObject, Transform 等),其容器的实际类型始终被统一为 SharedObject (继承自 SharedVariable<UnityEngine.Object>)。
此方法尝试将取出的变量容器直接转换为 SharedVariable。
在\Runtime\Core\Utility\BehaviorTreeExtension.cs中
这里由于 C# 的泛型不变性 (Invariance),SharedVariable 不能被安全地转换为 SharedVariable。因此,as 操作符会返回 null,导致该方法几乎永远返回 false。
我不知道是不是我遗漏了什么,如果是,麻烦告知,谢谢