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,当然这个测试用了常规字符串也没问题。
面板配置:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理