メインコンテンツまでスキップ

UdonSharp メモ

TSMP コンポーネントは、Unity C# と UdonSharp の両方で使用するために作成されています。これは API の形状と実装スタイルに影響します。

シンボルをコンパイルする

重要な記号:

シンボル意味
UDONSHARPUdonSharp が利用可能です。 TSMP の動作は UdonSharpBehaviour から継承されます。
COMPILER_UDONSHARPUdonSharp はスクリプトを Udon アセンブリにコンパイルしています。
UNITY_EDITORUnityエディター環境。

ほとんどのコードを IDE に表示できるようにしておくことをお勧めします。 COMPILER_UDONSHARP は、UdonSharp がコンパイルできないコードの周囲でのみ使用してください。

うどんに面したコードでは避ける

  • UdonSharp の動作に関する一般的なメソッド。
  • サポートされていない Unity API。
  • Udon が解決できないインターフェイス キャスト。
  • 複雑なLINQ。
  • 実行時の反映。
  • UdonSharp が誤ってバインドする暗黙的な数値変換。
  • 配列を別の配列型として扱います。
  • 後で一貫性のないランタイム型を保持するオブジェクト配列。

## 好む

  • 明示的な for ループ。
  • 単純な intfloatboolbyteushortuint の値。
  • 繰り返し値のパックされた byte[] データ。
  • 純粋なロジック用の静的ヘルパー クラス。
  • うどん橋データのパブリックフィールド。
  • シンプルな制御フローを備えた小規模なメソッド。
  • 数値型をまたぐ場合の明示的なキャスト。

ブリッジ通話

Udon と Mono の両方の動作をターゲットにする必要があるコードを記述する場合は、TSMPBehaviour.SetProgramVariableGetProgramVariable、および SendCustomEvent を使用します。

ブリッジは可能な場合はエディタ プロキシ ルックアップを処理し、Udon 用にコンパイルされると Udon ランタイム呼び出しにフォールバックします。

ブリッジ呼び出しはフレームワーク コードに役立ちます。通常のカスタム同期コンポーネントは、通常、独自のフィールドに直接アクセスする必要があります。

ランタイムコスト

うどんブリッジの通話は高価です。高周波同期の場合:

  • Pack multiple values into one byte[].
  • SetProgramVariable をスカラーごとに 1 回ではなくパック フィールドごとに 1 回呼び出します。
  • パックされたパケットがすべての値を表すことができる場合は、ボーンごとまたはブレンドシェイプごとのブリッジ呼び出しを避けてください。
  • Reuse buffers where possible.
  • Keep receive apply code short.

うどんのみの失敗のデバッグ

コンポーネントが Unity C# では動作するが、VRChat では失敗する場合:

  1. すべての UdonSharp プログラムをコンパイルします。
  2. シリアル化された古い Udon フィールドを確認します。
  3. 失敗したメソッドでサポートされていない API を探します。
  4. 配列型と数値キャストを確認します。
  5. ランタイムに表示される状態の Debug.LogWarning 診断を追加します。

インスペクターのみの診断では、アップロードされたワールドには十分ではありません。