Skip to main content

眼见不一定为实:U# 在 Unity Editor 中的代理对象

TL;DR

U# 脚本对于 Unity 来说也是有效的 C# 脚本,也就是 Unity 依旧会给 U# 脚本生成对应的 Behaviour。但是这些 Behaviour 并没有实际的功能。在 U# 的环境中这些 Behaviour 都是作为“代理对象”使用的,哎呀我不想写了也就是所有对这些 Behaviour 上的用户方法字段的调用和修改都会把转发到实际的 UdonBehaviour 上(被设置为隐藏)。

在一部分情况下(比如说在运行时实例化 UdonSharpBehaviour),代理对象的状态会和 UdonBehaviour 失去同步。

对这些“代理对象”进行操作也不是 100% 会被应用到 UdonBehaviour 上的,在部分情况下调用这些 Behaviour 反而会调用其原本的逻辑而不是转发给 UdonBehaviour。

哇可以扯的东西多了去了:比如说为什么要这么设计?为什么我调用 GetComponent() 会拿到实际的 UdonBehaviour 而不是 UdonSharpBehaviour?为什么我可以直接在 U# 代码像直接操作 UdonSharpBehaviour 一样编写代码?为什么这玩意不会炸了我的场景/构建产物?尔尔