Skip to main content

避免使用 internal 可见性

如果你使用 internal 关键字,你的方法或属性可能会随机无法导出,而且不会有任何错误提示。

截止到 VRCSDK 版本 3.8.2,这一问题一直没有得到修复。在 VRCSDK 解决这个错误前,你至少不应该在 UdonSharp 脚本中使用 internal 修饰类属性访问器类方法。由于 UdonSharp 从未考虑过该访问修饰符,取决于 U# 程序集被编译的顺序,你的 UdonSharp 脚本对应的类方法将随机的被导出或不被导出

这听起来很奇怪,对吗?

这篇文章将带领你深入探索 UdonSharp 编译器的实现,并解释该问题的具体原因。

但在阅读下文之前,为了理解一些复杂概念,你可能需要先阅读一下:UdonSharp 的前世今生

Workaround

我知道突然跳一个 Workaround 出来很突兀,但是我们最近才发现有一个 Workaround 而且懒得直接写完这一节。

#if COMPILER_UDONSHARP
        public
#else
        internal protected
#endif

你可以使用 COMPILER_UDONSHARP 这个符号。在使用 U# 编译器编译代码时暂时把 class 变成 public,在使用其他 C# 编译器时正常编译 internal

但是我需要提醒一下:如果出现了两个不同命名空间有重名并且同时 using 有这两个命名空间,这可能会导致在 U# 编译器编译时出现冲突。