LoginSignup
30
24

More than 3 years have passed since last update.

VRChatのワールド作成を完全に理解してお金を降らせてみた

Last updated at Posted at 2020-12-18

はじめに

この記事は「完全に理解したTalk Advent Calendar 2020」の19日目の記事です。
UnityのパーティクルシステムとVRChatのワールド作成に入門して完全に理解をしましたので記事を作成しました。
この記事を見て面白いと思った方は是非勉強してみてください。

VRChatとは

VRChatはVRSNS(バーチャル・リアリティ・ソーシャル・ネットワーキング・サービス)の一種です。
バーチャルリアリティ上で人と交流できるサービスになります。

VRChatではアバターを使用してログインを行います。
VRChat上で他人と交流できる空間の事をワールドと言います。
アバターはあらかじめ決められたもの以外にも自分でカスタマイズができ、人以外の動物などのアバターを使用することも可能です。
同じくワールドも自分でカスタマイズすることが可能です。

ただし、オリジナルのアバターやワールドをアップロードするためにはトラストレベルを上げる必要があります。
トラストレベル別にできることについてはこちらが参考になると思います。
VRChatでトラストレベル別にできること

今回やったこと

この記事を書いているときに「お金持ちになった気分になりたいのでお金を空からいっぱい降らせてほしい」と言われたので、紙幣が大量に降ってくるワールドを作成しました。
この記事を見れば何となくワールド作成とUnityのパーティクルシステムがわかるようになると思います。
詳しく知りたい方は公式のドキュメントを確認するのが一番良いと思います。

事前準備

  • Windows PC(推奨)
    ※MacでもワールドのアップロードはできますがVRChatにログインができません
  • トラストレベルをNew Userまで上げたVRChatアカウント
  • VRChat SDK(SDK2またはSDK3)
  • Unityのダウンロード&インストール
  • 紙幣または硬貨の3Dモデル
  • Unityアカウント(任意)

プロジェクトの作成

まずワールドを作るためのプロジェクトを作成します。
VRChat SDKは2020年12月現在2018.4.20f1以外のUnityのバージョンには対応していません。
必ずこのバージョンでプロジェクトを作成しましょう。

  • Unity Hubを起動して右上の「新規作成」横の▽をクリック。
  • 2018.4.20f1を選択してクリック。
    ※2018.4.20f1をインストールしていない場合は先にインストールしておく
  • テンプレートで「3D」が選択されていることを確認。
  • プロジェクト名に任意のプロジェクト名を入れ、保存先を選択して「作成」をクリック。

create_project.png

VRChat SDKのインポート

VRChatにアップロードするためのSDKをインポートします。

プロジェクト作成後、事前準備でダウンロードしたVRC SDKをProjectウィンドウにドラッグ&ドロップ。
今回はVRChat SDK3を使用。

※注意
Avatarの方のSDKと間違えないこと
import_sdk_01.png
インポートのためのウィンドウが表示されるのでそのまま「Import」をクリック。
import_sdk_02.png
インポートが完了したらメニューに「VRChat SDK」が表示されていることを確認します。
import_sdk_04.png

ワールドの作成

事前準備ができたのでここからワールド作成に入ります。

VRCWorldの追加

VRChatでワールドとして認識されるために必ずVRChatWorldというプレハブをシーンに追加する必要があります。

  • Projectsウィンドウの「Assets」、「VRChat Examples」、「Prefabs」フォルダ内にあるVRCWorldというプレハブをHierarchyウィンドウにドラッグ&ドロップ。
  • Hierarchyウィンドウに青文字で「VRCWorld」というオブジェクトが表示されたらOK。 create_VRCWorld_01.png

デフォルトではこのVRCWorldの位置がアバターのスポーン(出現)位置になります。

床の作成

アバターが立つための床が必要なので床を作成します。

Hierarchyウィンドウで右クリックし、「3D Object」を選択して「Plane」をクリック。
create_floor_01.png
Hierarchyウィンドウで先程作成したPlaneをクリック後、InspectorウィンドウでPositionとScaleを入力して位置とサイズを調整。
create_floor_02.png

ワールドのテスト

これで最低限のワールドが出来ました。
ひとまずこの状態でワールドをテストしてみましょう。

衝突判定の設定

  • メニューの「VRChat SDK」をクリックして「Show Control Panel」をクリック。
  • Layersの「Setup Layers for VRChat」をクリック。
  • VRChatレイヤーがプロジェクトに追加される旨のダイアログが出るので「Do it!」をクリック。 upload_world_01.png
  • ダイアログが閉じた後Collision Matrixの「Set Collision Matrix」をクリック。
  • 同じようにダイアログが出るので「Do it!」をクリック。 upload_world_03.png

この二つを実行することによってVRChat用のレイヤーとレイヤーベースの衝突検出が設定されます。
「Setup Layers for VRChat」で赤枠部分が、「Set Collision Matrix」で青枠部分が変更されます。
Layer Collision Matrixを見るにはメニューの「Edit」、「Project Settings」をクリックします。
表示されるプロジェクトセッティングウィンドウで「Physics」をクリック後、右側の下部の「Layer Collision Matrix」で確認できます。
レイヤーベースの衝突検出の詳細についてはUnityの公式ドキュメントを確認すると良いでしょう。
upload_world_04.png

ローカルテスト

上記の手順を実行するとコントロールパネルのBuilderタブが下記画像のようになると思います。
このような状態になればワールドのテスト及びアップロードが可能になります。

Local Testingの「Build & Test」をクリック。
local_test_01.png
クリック後、VRChatが起動。
ワールドが問題なく表示されればOK。
local_test_02.png

Non-VRモードで起動するには

そのままの設定だと常時Steam VRが起動してしまいます。
ワールドのテストだけならデスクトップモードで確認したい方も多いと思いますが、「Force Non-VR」にチェックを入れるだけではデスクトップモードで起動しないようです。
変更方法については下記ページを参考にさせて頂きました。
「VRChat SDKでForce Non-VRが効かない」の解決法

コントロールパネルのSettingsタブをクリックしてVRChat Clientの「Edit」をクリック。
VRChatのインストールフォルダ内に含まれる「VRChat.exe」を指定。
※インストール先については各端末毎に異なるので省略。
 おおよそは「【Steamのライブラリフォルダ】/steamapps/common/VRChat/VRChat.exe」になると思います。
desktop_mode_setting_01.png
変更後Builderタブに戻り「Force Non-VR」にチェック。
desktop_mode_setting_02.png

上記の変更でローカルテスト時にSteam VRが起動しなくなります。
ワールド作成時は何度もローカルテストを実施すると思いますので、その際にデスクトップモードにしたい人は実施しておくと良いでしょう。

パーティクルの作成

ここから本題のお金を空から降らせるための各種準備・設定に入ります。

パーティクルの作成

パーティクルをシーンに追加します。

Hierarchyウィンドウで右クリックして「Effects」を選択後「Particle System」をクリック。
create_particle_01.png
パーティクルを追加後Sceneビューにパーティクルが表示されます。
create_particle_02.png

Hierarchyウィンドウで追加したパーティクルをクリックするとSceneビューでパーティクルが再生されます。
再生を止めたい場合や再スタート、ポーズを行いたい場合はSceneビュー右下に出てくるウィンドウから操作が可能です。
create_particle_03.png

パーティクルが上から降りてくるようにする

追加した状態だと上に向かってパーティクルが移動してしまっているので下に向かって降りてくるようにします。

  • Hierarchyウィンドウで追加したパーティクルをクリック。
  • InspectorウィンドウでRotationを「90」に設定。
  • Potisionを任意の値に設定。 create_particle_04.png

これでパーティクルが上から降りてくるようになりました。
create_particle_05.png

3Dモデルの準備

まず降らせるお金の3Dモデルを準備します。
今回はこちらのモデルを使用させていただきました。
1ドル紙幣 3Dモデル
one-dollar-bill

テクスチャとマテリアルの結合(解説なし)

上のモデルを使用する場合、1つのモデルに複数マテリアルが使用されています。
パーティクルには1つのマテリアルしか使用できないのでマテリアルを統合する必要があります。
Blenderなどの3Dモデリングソフトでマテリアルを統合しましょう。
また、テクスチャも複数の画像に分けられているのでマテリアル統合と同時にテクスチャも1枚の画像にしましょう。

本来は解説するべきなんですが記事がかなり長くなってきそうなので省略します。
余裕があれば後からマテリアル統合のやり方についても追記したいと思います。

3Dモデルをインポート

3Dモデルをインポートします。
Assetsフォルダ直下に入れても良いのですが、複数のファイルを入れた場合に煩雑になるのでモデルを格納するためのフォルダを作成します。

  • ProjectウィンドウのAssetsフォルダを選択後右クリックし、「Create」を選択後「Folder」をクリック。
  • フォルダ名を「Models」に変更。
  • 同様にフォルダをもう一つ作成し、フォルダ名を「Textures」に変更。
  • Texturesフォルダの中に先程作成した3Dモデルとテクスチャのうちテクスチャをドラッグ&ドロップ。
  • その後Modelsフォルダの中に3Dモデルをドラッグ&ドロップ。

下記画像のようにテクスチャ付きで3Dモデルが表示されればOK。
change_model_01.png

パーティクルのモデルを変更

いよいよパーティクルのモデルを変更します。

  • Projectウィンドウで追加した3Dモデルの右側の>をクリックしてマテリアルとメッシュを表示
    (このモデルだとblinn1がマテリアル、pCube1がメッシュ)
  • Hierarchyウィンドウで変更したいパーティクルをクリック
  • Inspectorウィンドウ下部の「Renderer」をクリックしてプロパティを表示
  • Render Modeを「Mesh」に変更
  • Meshに変更したらすぐ下にMeshという項目ができるので3Dモデルのメッシュの方をドラッグ&ドロップ
  • Materialに3Dモデルのマテリアルの方をドラッグ&ドロップ change_particle_model_01.png

これでパーティクルのモデルが変更できました…?
change_particle_model_02.png

$\huge{物凄く小さいですね}$

パーティクルのサイズを変更

さすがにサイズが小さすぎます。
この状態でワールドのテストをしても全く分からないのでまず先にパーティクルのサイズを大きくしましょう。

  • Hierarchyウィンドウで変更したいパーティクルをクリック
  • Particle System内のStart Sizeを変更
    ※今回は40に設定

change_particle_size_01.png

最初よりだいぶ大きくなりました。
これなら大丈夫そうですね。
change_particle_size_02.png

パーティクルのオレンジの外枠を消したい場合

パーティクルをクリックしているときにパーティクル外側のオレンジの外枠が邪魔に感じる方はSceneビュー右側のGizmosをクリック後、「Selection Outline」のチェックを外しましょう。
これでオレンジの外枠が消えます。
もう一度表示させたい場合はチェックを再度つけましょう。
not_draw_outline_01.png

再度ワールドのテスト

パーティクルも変更できましたのでワールドを再度テストします。
少し前に実施した方法でワールドをローカルテストしてみましょう。

VRChatが起動した後視点を上側に向けるとお金が空から降ってきています!
成功です!
ここまでできればパーティクルシステムをある程度理解したといっても良いでしょう。
world_test_01.png

ワールドのアップロード

無事お金を空から降らせることができました。
最後に作成したワールドをアップロードしましょう。

コントロールパネルのBuilderタブの下部にある「Build & Publicsh for Windows」をクリック。
暫く待機するとUnityのGameビューが起動してアップロード画面が表示されます。

「World Name」に任意のワールド名を入力後「The above infomation is accurate and I have...」と書かれているところにチェック。
「Upload」をクリック。
暫くして「Content Successfully Uploaded!」というウィンドウが出ればアップロード成功です。
WS000035.png

アップロードしたワールドの確認

アップロードしたワールドを確認してみましょう。
VRChatにログイン後、メニューを開いて「WORLDS」をクリックしたら下の方に「Mine」という項目が新しくできていると思います。
この項目が自作したワールドの一覧になります。
upload_vrchat_01.png

先程作成したワールドに入ってみましょう。

ワールドに入って落ちてくる様子を下から見てみました。
静止画なのでわかりづらいですが成功です。
上からドル札がパラパラと落ちてきています。
が、少し量が少ない感じなので若干落ちてきているかな?という感じですね。
upload_vrchat_02.png

ワールドの改良

ここからは改良です。
パーティクルの3Dモデルの変更以外はほぼデフォルトの状態だったのでもう少し変更してみましょう。

降りてくる紙幣の数が少ないですね

デフォルトの状態だとお金に包まれている感があまり出ないですね。
もう少し降ってくる量を増やしてみましょう。
Hierarchyウィンドウでパーティクルをクリック後、以下の数値を変更します。

  • Max Particles(最大パーティクル数): 3000に変更
  • Rate over Time(1秒あたりに生成されるパーティクル数): 100に変更

大量に舞い降りてくる感が出てきました。
少しは良い感じになりましたね。
improve_world_01.png

紙だから揺らさないと不自然ですね

全てのパーティクルが等速で降ってくるので不自然に見えます。
少し左右に揺れるようにしてみましょう。

Hierarchyウィンドウでパーティクルをクリック後、Inspectorウィンドウの「Velocity over Lifetime」にチェックを入れます。
チェックを入れた後濃いグレーの部分をクリックしてパラメータを出し、「Linear X」一番右の三角をクリックし、「Random Between Two Curves」を選択します。
improve_world_02.png

選択後、「Linear X」、「Linear Y」、「Linear Z」に任意のカーブを設定します。
improve_world_03.png

静止画ではわかりにくいですが、左右に揺れるようになりました。
「Random Between Two Curves」はパーティクルが生存している間、X、Y、Zの値が各カーブで設定した範囲内でランダムに変化するようになります。
詳細な説明を見たい方は公式マニュアルのUsing the Built-in Particle Systemを確認するのが良いでしょう。
improve_world_04.png

回転も与えてみましょう

先程の設定で左右に揺らすことはできましたが、回転も追加で与えてみましょう。
Inspectorウィンドウの「Rotation by Speed」にチェックを入れてパラメータを表示します。
Rotation by Speedはパーティクルの回転を変化させることができます。
今回はX軸とZ軸にそれぞれ回転を与えたいので「Separate Axes」にチェックを入れてXとZにそれぞれ180を入力しました。
improve_world_03_01.png

回転を与えた状態で再度見てみましょう。
揺れを追加したときよりも更に降ってきている感が出ている気がします!
improve_world_03_02.png

空ももう少し変えたいですね

デフォルトの空だとゲーム感満載なのでもう少しリアルな空に変更してみましょう。
Unityのメニューの「Window」をクリック後、「Asset Store」をクリックしてAsset Storeを開きます。
Search for assetsに「AllSky」を入力して下記URLのアセットを開きます。
AllSky Free - 10 Sky / Skybox Set

有料版のAllSkyを購入している人はこちらでも大丈夫です。
AllSky - 200+ Sky / Skybox Set

アセットのページを表示後、右側の青いボタンの「Download」をクリックしてアセットのダウンロードを行います。
ダウンロード完了後、青いボタンの文字が「Import」に変わるので「Import」をクリック。
インポート対象のファイル一覧が表示されるので「Import」をクリック。

※注意
有料版のAllSkyの場合、全てチェックした状態でインポートすると30分程かかります
有料版のアセットを使用する場合は必要なものだけインポートした方が時間がかからずに済みます

improve_world_05.png

インポートが完了後、Unityのメニューの「Window」をクリック後「Rendering」、「Lighting Settings」の順に選択してクリック。
EnvironmentのSkybox Materialの右側にある黒丸をクリックして好みのSkyboxを選択。
今回は「FantasyClouds2_High」を選択しました。
空がリアルになりました。
improve_world_06.png

Sun Sourceも設定する必要がありますが、実はこのままでは選択できません。
サンプルのシーンからライトを持ってくる必要があります。

まず「Ctrl + S」を押して現在のシーンを保存します。
その後、選択したマテリアルと同じフォルダ内に入っているシーンを開きます。
「FantasyClouds2_High」の場合は「AllSky」-「Fantasy」-「Fantasy High」内に格納されている「FantasyClouds2_High.unity」になります。
improve_world_07.png

該当のシーンをダブルクリック後、シーンに入っているDirectional lightをProjectウィンドウのAssets内にドラッグ&ドロップします。
今回はAssets/Models内に格納しました。
improve_world_08.png

ライトを持ってきたら元のシーンに戻ります。

デフォルトの場合ProjectウィンドウのAssets/Scenesに元のシーンがあるのでダブルクリック。
Unityのメニューの「Window」をクリック後「Rendering」、「Lighting Settings」の順に選択してクリックして再度Lighting Settingsを開く。
Assetsに格納したライトを「Sun Source」にドラッグ&ドロップ。
これで太陽光もAllSkyのアセットのものが適用されました。
improve_world_09.png

改良後

上の改良を行った後再度ワールドをアップロードし、下から見た様子を録画しました。
改良したことにより現実感が増してきたと思います。
だいぶお金に包まれている感が出てきたのではないでしょうか!
VRChat_world.gif

作ったワールドは?

完成したワールドを見せたいと思ってはいますが、実はまだトラストレベルがNew Userでパブリックワールドが作れません。
VRChatアカウントを作成して半年以上経過していますが未だにNew Userから上がりません。
非常に申し訳ありません…

最後に

Unityのパーティクルシステムについて少しでも理解していただけましたでしょうか?
この記事を見てVRChatを始めたりワールドを作ってみるきっかけになれば幸いです。

参考

VRChat Document: Creating Your First World
Unityユーザーマニュアル: レイヤーベースの衝突検出
Unityユーザーマニュアル: Using the Built-in Particle System
「VRChat SDKでForce Non-VRが効かない」の解決法
【Unity】パーティクルで紙ふぶきを散らす
VRChatでトラストレベル別にできること
VRChat 技術メモ帳 - VRChat tech notes: Layers
VRChat でのプログラミングについて調べたことの書き溜め: Layers

30
24
1

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
30
24