性能提示
此页面包含一些关于如何提高 UdonSharp 脚本性能的提示。
UdonSharp 比 C# 慢
Udon 运行代码的速度比普通 C# 慢约 200 到 1000 倍,具体取决于你在做什么。
- 避免遍历数千个元素的大规模复杂算法。
- 避免每帧遍历非常长的数组。
- 考虑对数组进行"时间切片",每帧只处理有限数量的数组元素。
- 尽可能使用原生 Unity 组件或 VRChat SDK 组件。
- 例如:使用动画代替在 Udon 中旋转 40 个 GameObject。
- 缓存方法结果以提高性能。
- 例如:不要每帧都调用
GameObject.transform或Networking.LocalPlayer,而应在Start()事件中将它们保存为变量并重复使用。
- 例如:不要每帧都调用
使用 private 方法
如果方法不从其他脚本调用,应将其标记为 private。由于 Udon 搜索要调用的方法的方式,公共方法越少,自定义事件的性 能越好。
跨 behaviour 的调用比本地方法调用慢。如果可以,将类似的行为保留在一个 UdonSharpBehaviour 中,而不是分散到不同的 behaviour 中。
别忘了,要发送 CustomNetworkEvent,目标方法必须是 public。如果不是公共的,它将不会触发。此外,任何以下划线开头的方法(如 _MyLocalMethod)将不会接收网络事件。
不要频繁使用 GetComponent<T>
应仅在 Start() 事件或不经常发生的事件中使用 GetComponent<T>。
GetComponent<T>() 很慢,特别是在 Udon 中检索 UdonSharpBehaviour 类型时。这是因为 UdonSharp 需要插入一个循环来检查所有 UdonBehaviour,以确保它们是正确的 UdonSharpBehaviour 类型。