VRChatワールドを作る#2 (モデル配置とコライダー編)

床、置けましたか?
前回は床だけのシンプルなワールドを作成し、アップロードするまでの手順を紹介しました。
今回は3Dモデルをワールドに配置して、より豪華なワールドにしていきましょう。
前回記事が未読の方はぜひVRChatワールドを作る#1(基礎編)からご覧ください。
作る物

家があって、木があって…
いよいよワールド感が出てきますね。
今回でここまでできるようになります。
手順
- 3Dモデルを用意する
- 3Dモデルを読み込み、配置する
- コライダーを設定する
今回の手順はこれだけです!
前回作成したプロジェクトに追加する形で進めていきましょう。
ワールドに物(オブジェクト)を置く
3Dモデルを用意…の前に、Unityに慣れるために何かオブジェクトを置いてみましょう。
まずは前回のプロジェクトを開きます。
Unityを起動し、並んでいるプロジェクトから前回作成した物を選択してください。

床が配置されたワールドが表示されるはずです。
では、今回はCubeを置いてみましょう。
Hierarchyウインドウで適当な空きスペースを左クリック→右クリック→メニューから3D Object→Cubeを選択

こんな感じでSceneウインドウにCubeが表示されましたか?

場所がずれている場合はこれから修正するので問題ありません。
表示されない場合はHierarchyにCubeが追加されているか確認してください。
さて、Cubeが配置できたかと思いますが、画像ような状態(X:0 Y:0 Z:0の位置)だとプレイヤーの出現位置と被るので変な挙動になってしまいます。
(プレイヤーの出現位置は前回置いたVRC_Worldプレハブの位置です)
ではCubeの位置を調整してみましょう。
HierarchyウインドウでCubeを選択し、InspectorウインドウでPosition, Rotation, Scaleを変更します。

数値は好きに設定してみてください。
Cubeが移動したり伸びたりして面白いですよ!

今回はひとまずこんな感じで設定しました。
勘のいい方はお気付きかもしれませんが、ここまで、床を設置した時と同じ事をしています。
床の時はCubeではなくPlaneだっただけで、Unity標準のオブジェクトを配置→位置を調整という操作は一緒です。
Unityからすれば、CubeもPlaneも形が違うだけで「オブジェクト」として同じように扱われます。
オブジェクトの見た目とコライダーについて
CubeもPlaneもオブジェクト!という話をしましたが、Unityのオブジェクトには様々な情報を付けて見た目や挙動を決める事ができます。
例えば、既に触れている位置の情報(Position)だったり、すり抜けないための当たり判定(Collider)がそれです。
これらの情報はコンポーネントと言い、オブジェクトを選択した時にInspectorウインドウに並びます。

これがさっき配置したCubeのコンポーネントです。
このInspectorでは、大きく分けて3つの役割のコンポーネントが付いています。
Transformというのがオブジェクトの位置(Position)、角度(Rotation)、Scale(大きさ)を持っているコンポーネントです。これはオブジェクトから外すことができません。
Cube(Mesh Filter)とMeth Renderer、あと、下の方のDefault-Materialというのがこのオブジェクトの見た目を設定しているコンポーネントです。
そして、Box Colliderというのがプレイヤーがすり抜けないで物にぶつかるための当たり判定(コライダー)を設定するコンポーネントです。
見た目と当たり判定を別々の情報としてオブジェクトが持っていることがポイントです。
さて、置いたCubeは記念にワールドに飾っておくか、削除しておいてください。
オブジェクトの削除はシーンまたはヒエラルキーからCubeを選択してDeleteキーです。
3Dモデルを用意する
長い長い前置きになってしまいましたが、Unityの仕組みが少し理解できたかと思います。
ここからが本番です!まずは3Dモデルのお話
UnityにはCube(立方体)やCapsule(カプセル)といった単純な形状のオブジェクトしか用意されていません。
そのため、複雑な形状を表現したい場合は別途3Dモデルを用意することになります。
(厳密にはTerrain等で複雑な形状も作成できるのですが今回は省略します)
3Dモデルを用意するには例えば
- 自作する
- 販売サイトやUnityのAssetStoreから入手する
- 無料で配布されているものを使用する
などの方法があります。
AssetStoreはUnityで使用できる素材が入手できるサービスです(有料のものが多いです)。

あとは、BOOTHやバーチャルマーケットβといった販売サイトもあります。
BOOTH
https://booth.pm/
バーチャルマーケットβ
https://www.v-market.work/
いずれのサイトで入手する場合も、モデルの利用規約には十分注意してください。
ワールドに配置して公開することが禁止されている物もあります。
モデリングができる方はもちろん作成してUnityへ持ってきても良いです。
3DモデルはFBX形式で導入することが多いと思います。
Unityでは他にも.dae(Collada)、.3ds、.dxf、.obj形式に対応しています。
詳細は下記をご参照ください。
【参考資料】Unityで読み込める3Dモデルの形式
https://docs.unity3d.com/ja/2018.4/Manual/3D-formats.html
モデルは各自好きな物を用意頂けばOKです。
が、とりあえずワールド制作を進めたいという方向けにBOOTHにモデルを置いておきます。
以降、こちらのモデルデータを使用して進めますが、各自で用意頂いたモデルでも同様の操作で進められます。
3Dモデルを読み込み、配置する
3Dモデルが用意できたら、いよいよワールドに配置します。
3DモデルのFBXファイルをAssetsにドラッグしてプロジェクトに読み込みます。

読み込みに成功するとAssetsにモデルが追加されます。

更に、Assetsに並んだ3DモデルをHierarchyウインドウへドラッグしてシーンへ配置!

モデルをワールドに置く事が出来ました!
が、家を置くには狭すぎますね。あと、中に木が生えてるビックリハウスになってます。
順番に解決していきましょう。
まずはワールドのサイズを拡張します。
特に難しい事はなく、床を大きくしてしまいましょう。
HierarchyウインドウでPlaneを選択して、InspectorウインドウのScaleをX:3 Y:1 Z:3に設定します。

次に、HouseとTreeもInspectorで好きな位置に移動させましょう。
邪魔であればCubeも置き直してください。

どうでしょうか。かなりワールドとしての雰囲気が出てきたのでは??
ワールドの動作確認(ローカルテスト)
このあたりで一度ワールドの状態を確認しましょう。
早速VRChat SDKのコントロールパネルからアップロードして…
と言いたいところですがアップロードには時間がかかるため、もっと簡単に動作確認する方法を紹介します。
ローカルテスト というものです。
通常のアップロードはVRChatサーバーに置かれているワールドのデータを実際に更新します。
そのため時間がかかるのですが、ローカルテストは自分のPCだけで気軽に今の状態を確認することができます。
ローカルテストはVRChat SDKコントロールパネルのBuild & Testボタンから実行できます。

デスクトップモードでローカルテストを行う時はForce Non-VRにチェックを入れて下さい。
また、VRChatがPCにインストールされていないとローカルテストは動作しません。
それではBuild & Testボタンを押しましょう。
VRChatが起動して、制作していたワールドに入ることができます。

夢のマイホームが建った!
コライダーを設定する
先ほどのワールドですが、動き回ってみると家と木をすり抜けてしまうことがわかります。
Unity標準のCubeやPlaneと違い、読み込んだ3Dモデルには最初はコライダーが設定されていないのです。
意図的にそのままにする場合もあるのですが、今回はせっかくなのでコライダーを設定しましょう。
HierarchyウインドウでHouseを選択し、Inspectorウインドウの下の方にあるAdd Componentボタンを押します。

Unityに用意されているコンポーネントの数は膨大なので、検索してコライダー関連のコンポーネントを表示させます。
検索文字に”collider”を入力してください。

コライダーにも種類があるのですが、今回、家のモデルにはBox Colliderを選択してください。
すると、Sceneウインドウで家を囲む緑色の線が表示されます。これはコライダーの範囲を示しています。
Inspectorウインドウの方を見ると、こちらにはBox Colliderのコンポーネントが並んでいます。
先ほど追加した物ですね。

あとは同じ要領で木にCapsule Colliderコンポーネントを追加してみましょう。

さあ、コライダーが設定できたら改めてローカルテストを実行してみます。

家にも木にもぶつかって押し戻されるようになったら成功です。
お疲れさまでした!
え?家に入れないのは困る?
確かに、ボックスコライダーはモデル全体を覆うような立方体をしているため、家の中に入ることができなくなってしまいます。
家のような複雑な形状の物にコライダーを設定する方法は2種類あります。
- コライダーを複数付けてそれぞれの位置を調整する
- メッシュコライダーを使用する
今回はメッシュコライダーを使用してみます。
まずはHouseに付いているBox Colliderを外します。
HouseのInspectorから、Box Colliderの右にある歯車をクリック→Remove Componentを選択

改めてAdd ComponentでMesh Colliderを選択します。

緑色の線は見えませんが、これでコライダーが設定されています。
Mesh Colliderの形状はコンポーネントを取り付けた3Dモデルと同じ形になります。
つまり、見た目通り、家の入口などの壁が無い部分が通り抜けられるように、壁がある部分はぶつかるようになります。
これはめちゃくちゃ便利!!
ですが、Mesh Colliderにも弱点があり、モデルが複雑になればなるほど処理の負荷が上がります。
Houseのモデルであれば88ポリゴンなのでそれほど負荷は無いですが、これが数万、数十万ポリゴンになってくると別の単純な形状のコライダーへ置き換えることを検討した方が良いでしょう。
ワールドをアップロードする
全ての作業が完了しました。あとはワールドをアップロードするのみです。
前回と同じ手順でVRChat SDKコントロールパネルのBuild & Publish for Windowsボタンでアップロード画面へと進みます。

前回アップロードしたワールドに上書きする形になるので、World Nameやワールドのイメージは既に入力されています。
The above Information … のチェックを入れてUploadボタンを押してください。
念のため、アップロードされたワールドをVRChatで実際に確認しておいてくださいね。
Mesh Colliderを使用していれば家の中にも入れるはずです。
まとめ
今回で3Dモデルの配置とコライダーについて学びました。
かなり盛りだくさんの内容でしたが無事に完走できましたでしょうか?
もし質問や理解が難しい部分があれば、ページ上部のメニューからTwitterや質問箱へ行けますのでご意見を頂ければありがたいです。
Twitter https://twitter.com/unitystudygo
質問箱 https://peing.net/ja/unitystudygo
全てに個別に回答することは難しいですが、参考にさせていただき記事の更新や新規コンテンツに反映させていただきます。
次回ですが、いよいよ、ギミック編に突入です。
ミラーやイスを置いて、機能的なワールドを作成する方法を学びます。
それでは、ご覧いただきありがとうございました。