UdonSharp からの移行
UdonSharp からの移植で実際に変える必要があるものと、そのまま持ち越せるもの。
UdonSharp のスクリプトのほとんどは、すでに普通の C# です。移植で変えるのは基底クラスと、いくつかの属性名くらいです。
機械的に置き換える部分
| UdonSharp | Udonite |
|---|---|
using UdonSharp; |
using Udonite.Package.Runtime; |
: UdonSharpBehaviour |
: UdoniteBehaviour |
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] |
同じ名前、同じ enum |
[UdonSynced]、[UdonSynced(UdonSyncMode.Linear)] |
そのまま |
[FieldChangeCallback(nameof(Prop))] |
そのまま |
void Start()、void Update()、void Interact() |
public override void Start() など |
RequestSerialization() |
this.RequestSerialization() |
SendCustomNetworkEvent(target, "Name") |
this.SendCustomNetworkEvent(target, nameof(Name)) |
SendCustomEventDelayedSeconds("Name", 1f) |
this.SendCustomEventDelayedSeconds(nameof(Name), 1f) |
VRCInstantiate(prefab) |
Instantiate(prefab) |
[RecursiveMethod] |
使えません。再帰は拒否されます |
イベントは UdoniteBehaviour の virtual メソッドなので、Unity や VRChat のイベントには public override が必要です。シグネチャが合っていないときはコンパイラが教えてくれます(UDN0010)。
楽になること
UdonSharp で避ける癖がついていた制限のほとんどは当てはまりません。ジェネリクス、インターフェース、レコード、LINQ、async、コルーチン、ディクショナリ、あらゆる対象への foreach、switch 式、パターンマッチング、書式指定子付きの文字列補間、null 許容値型は、すべてコンパイルできます。詳しくは対応状況を参照してください。
変わらないこと
Udon 自体の制限は Udon のものです。例外なし、書き換え可能な static なし、タグなし、Awake なし。Udonite はそれらを UDN0011 で拒否し、代わりに何を書けばよいかを示します。オーナーシップ、シリアライズ、イベントの規則は VRChat のもので、変わりません。
併用する
Udonite と UdonSharp は同じプロジェクトに同居できます。Udonite は UdonSharpBehaviour を継承していないクラスだけをコンパイルするため、既存の UdonSharp スクリプトはそのまま動き、一つずつ移植していけます。