Skip to content

废弃或移除无法使用的 TryGetSharedObject<T> 扩展方法 #19

@Rebelxin

Description

@Rebelxin

在黑板功能的扩展方法中,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。

我不知道是不是我遗漏了什么,如果是,麻烦告知,谢谢

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions