ビログ

自作ゲームやツールの紹介、VRデバイスやVRゲームのレビュー、VRChatプレイヤー向けのUnity講座などを書いています。

VRChatでマヨネーズを絞り出す(ワールド座標パーティクル解説)

f:id:bironist:20181004155916p:plainVRChatでワールド座標パーティクルを使う方法の解説!

はじめに

この記事はVRCSDK2を対象に書かれています。現在はVRCSDK3が標準になっておりSDK2はメンテナンスでしか使用しないことが推奨されています。
VRChatでちくわやエビフライやキャベツにつけると美味しい調味料、マヨネーズを使いたくないですか?絞り出していろんな食べ物に味付けしたり、のどが渇いた人に飲んでもらいたい!
VRChatではUnityのParticleSystemが利用可能なので、それでマヨネーズを再現したいと思います。

マヨネーズのモデルとパーティクルを作る

マヨネーズのボトルをモデリングし、パーティクルを作成します。モデリング自体や、パーティクル自体の設定はこの記事では割愛します。パーティクル自体の解説はUnity - マニュアル: パーティクルシステム(Shuriken)などをご覧ください。

なお、マヨネーズモデルと設定済みマヨネーズパーティクルのPrefabをBOOTHで販売しています!(宣伝)
このあとの解説はこのモデルと付属パーティクルを使う前提で進めますが、ワールド座標パーティクルの出し方はマヨネーズでなくても同じです。

f:id:bironist:20181004160955p:plain
3Dモデル「マヨネーズ」 - bironist - BOOTH(同人誌通販・ダウンロード)

アバターにマヨネーズをもたせる

上記のマヨネーズを購入された方はMayonnaise.unitypackageをImportしてください。
マヨネーズモデル、マヨネーズパーティクル、テクスチャ、マテリアル、効果音、アニメーションなどが一括で導入されます。
その後アバターにマヨネーズをもたせます。この手順は以前解説したちくわと同じなので、ちくわの記事をご覧ください。
ちくわの一口かじる、二口かじるのシェイプキーを設定するところを、マヨネーズのフタを開ける(openキー)、ボトルを絞る(squeezeキー)に読み替えて設定するだけです。手の形は普通にマヨネーズを持った状態がMayoHand.aminに、マヨネーズを絞った手の状態がMayoBeam.animに入っています。
「マヨネーズを取り出す」「マヨネーズのフタを開ける」「マヨネーズを絞り出す」の3つのアニメーションを作ってください。
過去にオブジェクトの出し入れ設定をしたことが無い方は、まずここまでの作業をしてVRChat上で正常に動作するか(手にマヨネーズを持てるか、フタが開くか、絞れるか)確認することをおすすめします。このあとの解説では、アニメーションオーバーライドの具体的な設定方法などは省きます(上の記事で解説済みなので)。
マヨネーズを無事持ち込めたら、次の項目に進みましょう。

パーティクルを設定する

ここからがこの記事の本番、パーティクルの設定をしていきます。

アバター直下にGameObjectを追加する

f:id:bironist:20181004163120p:plain
いつものようにみここモデルで解説していきます。Hierarchyからアバターを右クリックし、Create Emptyをクリックします。

f:id:bironist:20181004163236p:plain
GameObjectが作成されるので、わかりやすい名前に変更しておきます。ここではMayoBeamとしておきます。(やらなくてもいいですが、ついでにMikoko配下の一番上に移動しておきました、見やすいように)
その後、その中にパーティクルを作っていきます。上記のマヨネーズモデルを購入された方は、Importした中にMayoParticleというPrefabがあるので、それをMayoBeamの中にD&Dすればそれだけで終了です。自作する場合はMayoBeamの配下にもう一つGameObjectを作り、名前をわかりやすく変更し、そこにParticleSystemを追加してください。

f:id:bironist:20181004163633p:plain完了するとこういう階層構造になります。

パーティクルの位置を設定する

HierarchyのMayoParticleをクリックしてください。f:id:bironist:20181004163803p:plain
Sceneビュー上マヨネーズが放出されているのが見えますが、みここの足元から吹き出しています。この位置をマヨネーズの位置にもっていきます。
ちょっとまってあせらないで!このままMayoParticle自体を移動してはいけません。その上の階層であるMayoBeamを選択して、MayoBeamの位置を動かしてください。

f:id:bironist:20181004164147p:plain
はい、マヨネーズの位置から吹き出すようになりました。(キャップがしまったまま出ていますがこれは編集中の都合なのでVRChat上では上記のopenシェイプキーを設定してあげれば、ちゃんと開きます)

RigidbodyとFixed Jointの設定をする

f:id:bironist:20181004164738p:plain

HierarchyからHand.R(アバターの右手)を選択して、InspectorのAdd Componentボタンを押してPhysicsの中のRigidbodyを選択して、Angular Dragを0にし、UseGravityのチェックを外します。
上の画像の状態になればおkです。

f:id:bironist:20181004165038p:plain

続いてMayoBeamを選択し、InspectorのAdd Componentボタンを押してPhysicsの中のFixedJointを選択します。自動的にRigidbodyも追加されます。さきほどHand.Rを設定したのと同じようにAngular Dragを0にし、UseGravityのチェックを外します。そしてFixed JointのConnected BodyにHierarchyからHand.RをD&Dして登録します。
上の画像の状態になればおkです。

アニメーションオーバーライドの設定をする

二通りのやり方を解説します。どちらでもマヨネーズを絞り出せますが、メリットデメリットがありますので(1)か(2)か自分に合わせてどちらかで設定してください。両方やる必要はありません
2万ポリゴン数制限に余裕がある場合(600ポリゴン程度)は、(2)のほうをおすすめします。

(1)パーティクル自体のONOFFを制御する方法

こちらの方法だとパーティクル自体が最初は最初はOFFなのでポリゴン数制限に影響を与えません。しかしアニメーションオーバーライドをOFFにすると、パーティクルがパッととたんに消滅して美しくありません。(つまりマヨネーズを絞ったあと、マヨネーズをしまうとその瞬間かけたマヨネーズまで同時に消滅してしまいます)

f:id:bironist:20181004165443p:plain
MayoParticleを選択し、Inspectorのチェックをはずして無効化しておきましょう。ここがチェックついたままだと、常にマヨネーズを吹き出し続けるアバターになってしまいます。必要に応じてアニメーションオーバーライドでONにするように設定します。
マヨネーズを絞り出すアニメーションを開いてください。

f:id:bironist:20181004170534p:plain
オブジェクトをONOFFするのと同じように、パーティクル自体をONOFFするように設定します。MayoBeamをONにするのではなく、MayoParticleのほうなので間違えないようにしてください。あとはいつもどおりCustomOverRideに作ったアニメーションを設定するだけです。

(2)EmissionのRate over Timeを変更する方法

こちらの方法だとアニメーションオーバーライドをOFFにしても、パーティクルが自然消滅(10秒に設定されています)するまで勝手に消えません。ただしMax Particlesで設定した数値が、そのままVRChatの2万ポリゴン制限に引っかかってしまいますのでアバター自体でポリゴン数がカツカツの場合はこちらの設定は使えません。ポリゴン数に300以上余裕があるなら、こちらの設定をおすすめします。

(1)の設定と違い、MayoParticle自体のチェックは付けたままにします。

f:id:bironist:20181004173646p:plain
そしてMax Particlesの設定をポリゴン数に余裕がある分設定し、Rate over Timeは0にします。

f:id:bironist:20181004174033p:plain
そしてアニメーションオーバーライドでRate Over Timeを100に設定します。
つまり(1)の設定方法はパーティクル自体の表示をONOFFするのに対して、この方式はパーティクルは表示しっぱなしです。ただしRate over Timeが0だからパーティクルは出ない、見えないのです。そこでアニメーションオーバーライドでRate over Timeを変更することでパーティクルを出す、ということです。こうすることでマヨネーズパーティクルはマヨネーズボトルをしまったあともStartLifetimeで設定した時間分、ワールドに残ることになります。あとはいつもどおりCustomOverRideに作ったアニメーションを設定するだけです。
しかもRateは数値指定なのでこのアニメーションをFistに設定すればトリガー(OculusTouchなら中指のトリガー、Viveなら人差し指)のアナログ入力に応じて放出量が変わります。つまりグッと握れば秒間100のマヨパーティクル、半分握れば50のマヨパーティクルで出せます。

効果音を再生する(再生したい人のみ)

マヨネーズを購入した方はマヨネーズを絞り出す効果音も付属しています。マヨネーズがある場所にGameObjectを作り、MayoSoundをInspectorにD&DしてAudioSourceを作り、マヨネーズを出すアニメーションオーバーライドでサウンドも同時に有効にするだけです。Volumeは0.3くらいに下げたほうがいいと思います。

完成

完成です。おつかれさまでした。
うまく設定できるとこんな感じに遊べます。(販売開始ツイートの動画)