32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プログラミング未習得者でも作れるVRChat SDK3ワールド

Last updated at Posted at 2021-02-04

#こんな人に向けて書きます
・今までVRChat SDK2でワールドを作った経験がある
・つよつよな人が作ってくれたUdonギミックを使ってワールドを作りたいけど、そもそもSDK3ワールドの作り方がわからないウギギ
・だからSDK3を覚えたいんだけど、Udonってプログラミングなんでしょ……?(絶望)

こういった、プログラミングがわからないワールドクリエイターに向けて、
SDK2のような感覚でSDK3ワールドを作れるようになってもらうのが当記事の目標です。
「Udonの作り方」ではなく、「Udonの使い方」です。
極力、プログラミングの話はしないように心掛けたいと思います。

まずは基本的なパッケージインポートから

まず、最低限必要なパッケージのインポートを行いましょう。
次の2つは確実に必要です。

1.VRChat SDK3-World
2.UdonSharp

1は説明不要ですね。VRChat公式からダウンロードしてインポートしてください。
2についても、あらゆるUdonのツールを使う上ではほぼ必須となります。

そもそもUdonというのは、公式ではこういったUdonGraphという編集画面を用意して、ノードを作ってつないでいろんな機能を使えるようにしたものです。
pic1.png
めちゃくちゃ凄いですね。
よし、これを使っていろんな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というコンポーネントがあります。
image.png
そのProgramSourceに、ProgramAssetがセットされていますね。
ここに、「インタラクトしたときにミラーを出したり引っ込めたりする」というUdonプログラムが入っています。
そして、そのプログラムがUdonSharp製であれば、ProgramScriptにC#のアセットが紐づいています。つまり、ソースのソースです。
UdonSharp製のUdonプログラムは、この2つがセットで必要になります。

#Sceneの作り方
SDK3のSceneの作り方は、SDK2と殆ど違いがないです。
コントロールパネルも同じです。
VRCWorldを設置すれば、そこがリスポーン地点になります。
ただ、SDK2の場合はVRC_PlayerModsを設置してジャンプできるようにしたり、歩行速度を変えたりしていましたが、
SDK3にはそれに相当するUdonが既に備わっています。
image.png
この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にチェックを入れることです。
image.png
これで、そのGameObjectのTransformは全ユーザーに同期します。
Program Sourceは空でも問題ありません。

(追記)SDK3でVRCObjectSyncが実装されました!

別の方法は、位置の同期ではなく、トリガの共有です。
誰かがトリガを引いたら、全ユーザーの元でそれぞれ実行する、という考え方です。
つまりVRC_Triggerでいう、Broadcastの設定をやりたいですね。
image.png
SDK3の標準では備わっていないのですが、「Trigger2to3」には準備されています。
これで同期も怖くない!(多分)

#まとめ
まとめると、Udonプログラミングがわからなくても、
私の「Trigger2to3」を使えばなんとかなりますよ、という手前味噌な宣伝話になってしまいました。
元々は、それがなくてもワールドが作れるという話にしたかったのですが、
ちょっと難しそうだったので、力づくで実現させた格好です。
当記事と、「Trigger2to3」がお役に立てれば幸いです。

#余談
こちらは有料(200円)なのですが、
ハンドルをぐるぐる回してオブジェクトやアニメーションを動かせるギミックを作りました。
あなたのSDK3ワールドに、手回しの仕掛けはいかがでしょう?

・販売所
https://hoke.booth.pm/items/2707355

32
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?