#こんな人に向けて書きます
・今までVRChat SDK2でワールドを作った経験がある
・つよつよな人が作ってくれたUdonギミックを使ってワールドを作りたいけど、そもそもSDK3ワールドの作り方がわからないウギギ
・だからSDK3を覚えたいんだけど、Udonってプログラミングなんでしょ……?(絶望)
こういった、プログラミングがわからないワールドクリエイターに向けて、
SDK2のような感覚でSDK3ワールドを作れるようになってもらうのが当記事の目標です。
「Udonの作り方」ではなく、「Udonの使い方」です。
極力、プログラミングの話はしないように心掛けたいと思います。
まずは基本的なパッケージインポートから
まず、最低限必要なパッケージのインポートを行いましょう。
次の2つは確実に必要です。
1.VRChat SDK3-World
2.UdonSharp
1は説明不要ですね。VRChat公式からダウンロードしてインポートしてください。
2についても、あらゆるUdonのツールを使う上ではほぼ必須となります。
そもそもUdonというのは、公式ではこういったUdonGraphという編集画面を用意して、ノードを作ってつないでいろんな機能を使えるようにしたものです。
めちゃくちゃ凄いですね。
よし、これを使っていろんなUdonを作ってみよう!
となるわけですが、内容はけっこうプログラミング寄りなので、プログラミングわからん勢には難しいし、
プログラミングわかる勢にも実はちょっと不評なのです。
いつものC#というプログラミング言語で記述すれば2,3行で済むようなことが、
画面いっぱいにノードを作ってつないで、を重ねないとダメだったりします。
あぁ……これをC#で記述できたらなぁ……
と多くの人の願いが渦巻いたところで、神が降臨しました。
それが、UdonSharp(通称U#)です。
UdonSharpは、UdonプログラムをC#で記述できるようにしたものです。
その機能は本家UdonGraphに対して制限されるどころか、拡張されている感じさえあります。
もはや、Udonを作る上で、UdonSharpを使わない理由はなく、
今やほとんどの開発者がUdonSharpでUdonギミックを作っています。
前置きが長くなりましたが、
そういうわけなので、とにかくUdonSharpもダウンロードしてインポートしてください。例外はないです。
最新版パッケージのダウンロードはこちらから
https://github.com/Merlin-san/UdonSharp/releases/latest
#便利なSDK3対応アセットをインポートする
次にあなたが入れたいアセットを入れましょう。
まず、以下はSDK3に対応している、オススメのアセットです。
VRChatでワールドを巡っている人であれば、必ずどこかで見たことがあるはず。
有難いことに、どれも無料です。
・Lura's Switch
ミラーなど、ワールドでよく使うスイッチがモデル付きで提供されています。
・iwaSync3
ビデオプレイヤーといえばコレ!
・Qv Pen
色とりどりの色鉛筆でワールドに絵や文字が描けるペンツールです。
この3つが備わっているだけでも、VRChatのワールドとして形になるでしょう。
これにプラスして、あなたが使いたかったUdonならではのワールドギミックをインポートしてみましょう。
#ギミックを作りたいなら
そうはいっても、やはり独自ギミックは必要ですね。
今のままでは、ただのスイッチすら作れません。
SDK3には、SDK2のギミック作成の肝だったVRC_Triggerが(今のところ)存在しません。
ギミックを作りたい?
Udonがありますよ! Udonをこねましょう!
という状態です。
プログラミングわからん勢には厳しいですよね。
これまでも、あらゆる開発者が便利なツールを作ってくださっていますが、
もう一つ汎用性に欠けるとか、何かが足りないとか……
いや、やっぱり、皆さんはVRC_Triggerが欲しいはず。
ということで、私が作ってしまいました。
こちらの「Trigger2to3」を使ってください。
https://github.com/hoke946/Trigger2to3/
VRC_Triggerの代替ツールです。
使い方は、この記事を一度読んだ後に見てください。
VRC_Triggerが使える人であれば、きっとすぐにモノにできるはずです。
(追記)その後、cyanlaser氏によるCyanTriggerが発表されました。
自由度が高く、おそらく品質はTrigger2to3より優れていると言え、おススメです。
ただ、CyanTriggerは英語ベースであることと、
Trigger2to3はSDK2との互換性を重視して作っているため、
SDK2に慣れた人で、日本人で、そこまでの自由度を求めないのであれば、
Trigger2to3がきっと扱いやすいとは思います。
#UdonBehaviourとProgramAsset
さて、SDK3-Worldを知るためには、まずUdonBehaviourとは何かを知っておいた方がいいかと思います。
SDK3では、UdonBehaviourというコンポーネントによって様々な機能を動かすことになります。
UdonBehaviourの内容は自由度が高く、
Udonプログラミングによって様々にカスタマイズしてAsset化することができます。
そのカスタマイズしてAsset化されたものが、ProgramAssetです。
これをUdonBehaiviourのProgramSourceにセットすると、そのカスタマイズされた機能が使えるようになります。
例えば、先ほどご紹介したLura's Switchの「Mirror_WithSwitch」を覗いてみると、
Prefabの中にある「Switch_Mirror」にUdonBehaviourというコンポーネントがあります。
そのProgramSourceに、ProgramAssetがセットされていますね。
ここに、「インタラクトしたときにミラーを出したり引っ込めたりする」というUdonプログラムが入っています。
そして、そのプログラムがUdonSharp製であれば、ProgramScriptにC#のアセットが紐づいています。つまり、ソースのソースです。
UdonSharp製のUdonプログラムは、この2つがセットで必要になります。
#Sceneの作り方
SDK3のSceneの作り方は、SDK2と殆ど違いがないです。
コントロールパネルも同じです。
VRCWorldを設置すれば、そこがリスポーン地点になります。
ただ、SDK2の場合はVRC_PlayerModsを設置してジャンプできるようにしたり、歩行速度を変えたりしていましたが、
SDK3にはそれに相当するUdonが既に備わっています。
この4つのパラメータを設定すればOKです。
#SDK3はSDK2の完全上位互換ではないという話
ここで、SDK3のデメリットについてもお話したいと思います。
まだアルファ版だから、という理由はあるかもしれませんが、
SDK2でできたことがSDK3で厳しくなってしまっていることもあります。
その最も重大なことといえば、
途中でスポーンさせたオブジェクトに対する挙動です。
現状、私が知る限りでは、途中スポーンさせたオブジェクトは
・グローバル化して共有できない
・PickUpで動かない
・内部に組み込まれているUdonも動かない
という問題が発生します。
もはや、置き物しか生み出すことができないのです。
対処としては、スポーンさせるという考えをやめ、
個数は有限になりますが、Sceneに最初から配置して、非表示にして隠しておくということです。
これでうまくやりくりするしかありません。
「Trigger2to3」には、子のGameObjectを一括で非表示にしたり、1つずつ表示させたり、という機能を用意してみました。
これが助けになれば幸いです。
(追記)公式でも、VRCObjectPoolという機能が実装されました。(ちょっとクセがありそうですが)
あとは、SDK2で備わっていたVRCのまとまったコンポーネントがSDK3ではあまり用意されていないという弱点もあります。
例えば、VRC_AudioBankとか。
これから増えていくのでしょうか。
(追記)VRC_AudioBankはTrigger2to3の中で再現実装しました!
#オブジェクト同期について
SDK3にはVRC_ObjectSyncがありません。
SDK3のオブジェクト同期といえば、UdonBehaviourのSynchronize Positionにチェックを入れることです。
これで、そのGameObjectのTransformは全ユーザーに同期します。
Program Sourceは空でも問題ありません。
(追記)SDK3でVRCObjectSyncが実装されました!
別の方法は、位置の同期ではなく、トリガの共有です。
誰かがトリガを引いたら、全ユーザーの元でそれぞれ実行する、という考え方です。
つまりVRC_Triggerでいう、Broadcastの設定をやりたいですね。
SDK3の標準では備わっていないのですが、「Trigger2to3」には準備されています。
これで同期も怖くない!(多分)
#まとめ
まとめると、Udonプログラミングがわからなくても、
私の「Trigger2to3」を使えばなんとかなりますよ、という手前味噌な宣伝話になってしまいました。
元々は、それがなくてもワールドが作れるという話にしたかったのですが、
ちょっと難しそうだったので、力づくで実現させた格好です。
当記事と、「Trigger2to3」がお役に立てれば幸いです。
#余談
こちらは有料(200円)なのですが、
ハンドルをぐるぐる回してオブジェクトやアニメーションを動かせるギミックを作りました。
あなたのSDK3ワールドに、手回しの仕掛けはいかがでしょう?
Animationも再生できるようになったよ@0ne_chan pic.twitter.com/K6Lpo7UDlX
— ほけ (@hoke946) January 27, 2021