VRCSDK3-WORLDのアセットに付属しているサンプルコードを一通り解説していきます。ついでにUdon GraphをU#に書き直たサンプルコードを作成します。

スクリプト作成の説明が中心で、シーン作成の説明は手順が長くなるので割愛します。SDK3.0をインポートすると一緒にサンプルシーンも存在するので、そちらを確認して下さい。

目次

アセットをインポートするとAssets\VRChat Examples\UdonExampleScene.unityにサンプルシーンがあります。目次はそのシーンのHierarchyの上から順に並べています。

Prefabs

VRCChair3・・・・・ 椅子に座るオブジェクトを作成する
AvatarPedestal・・・ アバターペデスタルを作成する
MirrorSystem・・・・ボタンで 表示・非表示するミラーを作成する

Cubes

ClickableCube・・・・・ マウスクリックで使用するコマンドをオブジェクトに作成する
TimerCube・・・・・・・常に実行する処理を作成する
InteractCube・・・・・・使うコマンドをオブジェクトに作成する
PickupCube・・・・・・ 拾い上げられるオブジェクトを作成する
ClickableCubeForLoop・・ループ処理を作成する

Udon Variable Sync

PickupCube・・・・・・・・自動同期を作成する
PickupSphere・・・・・・・ PickupCube とほぼ同じなので説明は省略
ButtonSyncOwner・・・・・手動同期をオーナーしか値を変更できない方法で作成する
ButtonSynceAnyone・・・・手動同期をオーナーに値を変更してもらう方法で作成する
ButtonSynceBeconOwner・・手動同期をオーナーが譲与される方法で作成する
SliderSynce・・・・・・・・スライダーを作成する
Toggle・・・・・・・・・・トグルボタンを作成する
Dropdown・・・・・・・・ドロップボックスを作成する
InputField・・・・・・・・ テキスト入力ボックスを作成する

PlayerDetection

PlayerTrigger・・・・・・ 当たり判定を作成する
PlayerCollision・・・・・・壁や床の接触判定を作成する
PlayerParticleCollision・・・パーティクルの接触判定を作成する

UdonSyncPlayer (Unity)

動画プレイヤーを作成する

CubeArraySync

配列の手動同期を作成する

Object Pool

オブジェクトを使いまわす

SimplePenSystem

ペンを作成する

あとがき

一通りサンプルコードをU#に書き直しつつAPIを学習できた感触です。まだU#に書き直し切れていないサンプルがありますが、面白みが無さそうなのでここで終わります。

Udon,U#は簡単なギミックを作る分には申し分なさそうですが、発展途上感があるのでゲームワールド作るとかは苦行そう(それ作っている人はスゴイ)。自分はUnityやシェーダーとか長く息が続きそうな技術を優先して勉強しようかなと思っています。

U#の不満点は この記事と同じ思いです。検索してヒットするような似た内容を書いても無駄なので、ここではU#ではUdonSharpBehaviourを継承したクラス以外が使えないという視点で3点まとめます。

サーバと連携するワールドを作成しづらい

VRChat以外のサーバと連携するワールドを作ったら面白いんじゃね?写真立てにtwitterで投稿した画像が表示されたら面白いジャン?セーブデータを保存するサーバを自前で立ててパトロン者にのみ提供したら良くね?と妄想してました。

しかし、サーバから受信したJSONを格納するにはDTOクラスが必要ですが U#では UdonSharpBehaviourを継承したクラス以外が使えない ので詰みです\(^o^)/

イベントカレンダーがサーバを使って更新しているから実装可能だと思っていましたが、どうもパノラマ画像を表示する機能で開発しているようです。

品質を考えたコードを作れない

ソフトウェア開発ではバグ修正でバグ発生はよくある事です。なので、テストコードにバグを探してもらえる設計にして、以前発生したバグはテストコードを作って二度と発生しないように封じ込めます。手間の掛かるバグチェックなんて誰もしたくありません。敵を全滅したのに次のステージに遷移しないバグなんて誰が確認します?

しかし、テストコードの作成にはインターフェースが必要ですが、 U#ではUdonSharpBehaviourを継承したクラス以外が使えないため詰みです \(^o^)/

学生のころは品質を考えずに熱意だけでゲームを作りましたが、現職で積み上げてきたスキルが使えないのは手痛いです。

コードを再利用できない

優れたエンジニアはフレームワークの依存性に気を付けてコーディングします。そうすると、あらゆるプラットフォームで再利用できるコードを資産として残せるからです。例えば、モバイル版のオセロゲームが開発済みで、白と黒どちらの石が多いか計算して勝者を決める処理を.netframeworkにしか依存しないクラスで書いていれば、その処理はWeb版だろうがVR版だろうが再利用できるはずです。

しかし、再利用できるコードで書いていようが U#ではUdonSharpBehaviourを継承したクラス以外が使えない ので詰みです \(^o^)/

Unityでモバイルゲームを作っている個人や会社とかがC#の資産をVRChatで使えれば、新しいゲームワールドがバンバン出てきそうな気がするんだけどなぁ