UdonSharp からの移行

UdonSharp からの移植で実際に変える必要があるものと、そのまま持ち越せるもの。

更新日 2026-09-03

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] 使えません。再帰は拒否されます

イベントは UdoniteBehaviourvirtual メソッドなので、Unity や VRChat のイベントには public override が必要です。シグネチャが合っていないときはコンパイラが教えてくれます(UDN0010)。

楽になること

UdonSharp で避ける癖がついていた制限のほとんどは当てはまりません。ジェネリクス、インターフェース、レコード、LINQ、async、コルーチン、ディクショナリ、あらゆる対象への foreach、switch 式、パターンマッチング、書式指定子付きの文字列補間、null 許容値型は、すべてコンパイルできます。詳しくは対応状況を参照してください。

変わらないこと

Udon 自体の制限は Udon のものです。例外なし、書き換え可能な static なし、タグなし、Awake なし。Udonite はそれらを UDN0011 で拒否し、代わりに何を書けばよいかを示します。オーナーシップ、シリアライズ、イベントの規則は VRChat のもので、変わりません。

併用する

Udonite と UdonSharp は同じプロジェクトに同居できます。Udonite は UdonSharpBehaviour を継承していないクラスだけをコンパイルするため、既存の UdonSharp スクリプトはそのまま動き、一つずつ移植していけます。

Something went wrong. Reload