别用 Enum,尽管会让你的代码更好看
别听标题的,你得用 Enum。但是你要注意以下所有的问题:
尽可能不要把 Enum 转成其他类型用
相关 Feedback: https://feedback.vrchat.com/udon/p/converting-enum-to-int-in-datatoken-parameter-errors-at-runtime
// Cannot retrieve heap variable of type 'Int32' as type 'DataToken'
DataList dataList = new DataList();
AnEnum anEnumState = AnEnum.AState;
dataList.Add((int)anEnumState);
// Cannot retrieve heap variable of type 'Int32' as type 'byte'
Foo(EnumType e) {
byte bar = 0;
bar += (byte)e;
}
不要在可选方法参数使用 Enum
Feedback: https://feedback.vrchat.com/udon/p/udonsharp-enum-as-optional-argument-causes-compile-errors
enum AnEnum {
Option,
AnotherOption
}
public class Test : UdonSharpBehaviour
{
void OptionalEnum(AnEnum anEnum = AnEnum.Option) // Compile Error
{
}
}
不要对着非用户定义 Enum 做比较(==)操作
Feedback: https://feedback.vrchat.com/udon/p/checking-a-system-defined-enum-with-equality-operators-fails
public override void OnInputMethodChanged(VRCInputMethod inputMethod)
{
if (inputMethod == VRCInputMethod.Touch)
{
// Run code for touch input
}
else
{
// Run code for non-touch input
}
}
当然也有 Workaround
if ((int)inputMethod == (int)VRCInputMethod.Touch)