IExposedPropertyTable与ExposedReference的使用

近期回顾Dead of the Book demo时,看见了它们的运用。感觉主要是用于ScriptableObject资源和Scene资源解耦;

并将这类做法规范化。

 

做一个小测试,IExposedPropertyTable做容器,存放具体目标对象:

复制代码
public class ExposeTableObj : MonoBehaviour, IExposedPropertyTable
{
    [System.Serializable]
    public struct Info
    {
        public PropertyName id;
        public Object value;
    }

    [SerializeField] private Info[] infos;


    public void ClearReferenceValue(PropertyName id)
    {
        infos = System.Array.Empty<Info>();
    }

    public Object GetReferenceValue(PropertyName id, out bool idValid)
    {
        idValid = false;

        for (int i = 0; i < infos.Length; i++)
        {
            var info = infos[i];
            if (info.id == id)
            {
                idValid = true;
                return info.value;
            }
        }

        return null;
    }

    public void SetReferenceValue(PropertyName id, Object value)
    {
    }
}
复制代码

 

使用者:

复制代码
public class ExposeTableUser : MonoBehaviour
{public ExposeTableObj exposeTable;


    private void Start()
    {
        ExposedReference<GameObject> myReference = new ExposedReference<GameObject>();
        myReference.exposedName = "myGoObj";
        GameObject go = myReference.Resolve(exposeTable);
        Debug.Log(go);
    }
}
复制代码

这里直接动态创建了myReference,如果作为成员字段也可以被序列化,但是unity不会初始化匹配的exposedName。

然后在Start里,通过exposedName匹配了对应的对象。Unity用Guid作为exposedName,当然这个测试用了常规字符串也没问题。

 

面板配置:

 

posted @   HONT  阅读(687)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
回到顶部