VRCアバター向けunity改変:ギミックの基礎を知ろう
•この記事の対象者
(アバターや素材をとりあえず入れたりする基本操作はわかる前提で)初めてunityで改変をする、衣装のオンオフなど基本的なことを知りたい、小物の出し入れをしてみたい人。
すでに入れたいものの配置や追従は終わっている前提なので、服や小物の追従がわからない場合はこちら(←記事追加予定、お待ちを)をご覧ください。
•全体のイメージ
イメージとしては、
(①アニメーション)衣装のオンオフなどを録画し
(②レイヤー)それを再生するための回路と
(③パラメータ)条件を作り
(④エクスプレッションメニュー)それをコントロールするためのボタンをつくりアニメーションを再生します。
※エクスプレッションメニュー以外で操作したい(特定の位置に触れたりジェスチャーで起動したい)方は、こちらの遷移条件編の記事をご覧ください。
今回は帽子をつけて、外せる仕組みを作ります。
•①アニメーション
まずはアバター及び必要な素材(服など)が入ったunityの画面を開き、projectの①Assetsをクリックし、空ている②スペースで右クリック→Create→Aanimationの順番にクリックします。
そうするとアニメーションのファイルができあがるのでそちらに分かりやすい名前を付けましょう。(〇〇on,〇〇offなどつけると比較的わかりやすいかと思われます)
今回は二つ必要なので帽子on,帽子offの二つを作ります。
そうしたら次にその二つのアニメーションファイルをD&Dで左のアバターの名前のところに持っていきます。(アバターの親、一番上の部分に。)
そしてアニメーションのファイルの①いずれかをクリックし、アニメーションタブを開きます。その後、②アバターの名前を一度クリックして選択してから③録画したいファイルを選びます。
ではいよいよ録画に移ります。録画といっても、今回は物に動きを付けるわけではないのであくまでもオンとオフの状態を切り替える、という状態を録画するだけなので一瞬で切り替えれます。
まずは①録画ボタンをおして、録画を始めます。(この時、ボタンが押せない場合はアバターの名前を再度クリックしてみてください。)
そうしたら、まずはどちらからでもいいですが、とりあえずオフのアニメーションから作ります。②録画したいものをクリックして、右の③Inspector上のチェックボックスのチェックをクリックして外してください。そしてもう一度①録画ボタンを押して録画完了です。
こうすることで、オフにしたよ、という状態を録画できました。もし、すでにチェックが外れている場合は一度チェックを入れてから、再度オフにしてください。録画中でも構いません。(今回のやり方だと、最後におこなった動作のみ反映されるため。)
ではオンアニメーションの処理も、ほぼ同じです。チェックがオフの状態にして、オンにして録画してください。そうすると、下のスクショのような録画状態になるはずです。(間違えた場合は、録画上でチェックボックスのオンオフができるので、それで切り替えれます。もっと言えば、録画上のアイテムの名前を右クリック→Remove Propertyでアイテムの録画自体を消せます。)
これでアニメーションは完成です。
•②レイヤー
次に、レイヤーを作ります。アバターの名前を選び、右のInspector上のFXの部分をダブルクリックして、レイヤーの編集画面を呼び出してください。(大体のアバターに入っていると思いますが、入っていない場合はAssetsの何もないところで右クリック→Create→Animator Controllerをクリックして作成して、D&Dで空いた枠に入れてください。)
画面が切り替わったら、①+のマークを押してレイヤーを新たに追加し、New Layerの部分をダブルクリックで分かりやすい名前に変えた後、②Weightと書かれた部分のスライダーを右に動かして1になるまで引っ張ってください。(これが1でないと、今から作る中身が反映されません。逆に言うと、レイヤー消さなくても0にすればオフにできます。)
そうしたら、下のAssetsからさっき録画したオンとオフのアニメーションをレイヤーのあみあみの部分にデフォルトにしたい状態から順番にD&Dしてください。そうすると、オレンジ色の線が先に置いたほうにつながります、これがデフォの状態です。自分が都合がいいほうで設定してください。(もし、間違えた場合は緑のEntryと書かれた場所をクリックし、set state machine default stateを押して、矢印をデフォにしたいほうにクリックしてつけてください。)
今回はオフ(脱いだ状態)をデフォルトにします。
次に、それぞれのアニメーションを選んで①Write Defaultsのチェックボックスを外してください。(これはいつでも外してください。)
その後、それぞれのアニメーションを右クリック→②Make transitionでオンからオフに、オフからオンにクリックで③矢印を伸ばしてください。
そうしたら、①矢印をクリックして、②Has exit timeのチェックを外し、③transition durationの0.25の数字を0にしてください。二本とも行ってください。(has exit timeはアニメーションが起動するまでにかかる時間です。durationは私もよくわかっていませんので勉強します。)
•③パラメータ
ではこれらのアニメーションを再生する条件であるパラメータを設定していきます。先ほどのFXの上のタブの①Parametersをクリックして、②+マークを押して、③boolを選んでください。(オンオフのパターン作りはboolで基本OK)
できた④New boolと書かれたところにパラメータを書き込みます。わかりやすい名前をアルファベットで入れてください。(今回はhatと書き込みます。)
次に①Layersのタブを押してもどり、②オレンジから灰色のほうに伸びている矢印(今回はoffからon)を押して、③Conditionsと書かれたところの+を押し、先ほど作った④パラメータ(今回はhat)を選んでください。右側にtrueと書かれています、これがパラメータがオンの時(エクスプレッションメニューでオンになってるとき)に、この矢印が有効になりますよということになります。
反対側の矢印は同じ作業をした後にtrueをfalseに変更してください。(今度はオフになったら矢印が有効になります。)
ただこのままですと、自分にしかこの変更が反映さません。(自分や鏡では正常にみえていても他人からはなにも変化がないように見えます。)
なのでアバターをクリックして選択した後、右のInspectorのparametersの欄をダブルクリックして、パラメータの一覧を呼び出します。
ない場合は、Assets上の空欄で右クリック→Create→VRChat→Avatars→Expression Parametersをおして作成して、画像の欄にD&Dしてください。
そして、①の矢印のところのプラスを押してタブを一つ増やし、②typeを先ほどと同じboolにした後、③Nameの空欄にさっきと同じパラメータ(今回はhat)を入力してください。一文字でも違うと(大文字小文字も区別されます)、うまく動かないので不安ならコピペしましょう。
そしてsyncedとsavedのチェック欄ですが、syncedはワールドで同期される=ほかの人にみえるかどうかなのでチェックを入れて、savedはワールドを入りなおしたり、アバターを切り替えたときにパラメータの変更を保持するかどうかなのでお好みで。(savedにチェックを入れるならパラメータをオンにしたらオフにしない限りはワールド移動してもアバター変えてもオンのままということ。オフでもそう)
•④エクスプレッションメニュー
いよいよ大詰めです。
またアバターの名前をクリックして、右のInspectorからMenuの欄をダブルクリックします。ない場合はパラメータの時とほぼ同じでAssets上の空欄で右クリック→Create→VRChat→Avatars→Expressions menuをおして作成して、画像の欄にD&Dしてください。
次に①Controlsの+のボタンを押してタブを増やし、②typeをtoggleに変更します。そのあと、③parameterを先ほど作ったものに指定します。(今回はhat。しつこいですが。)以下詳しく知りたい方向けの余談
(buttonは押したときだけオンになるのですぐオフになりますがtoggleは一回オンにしたらオフにしなければそのままです。なので基本はtoggleを使うと思います。)メニューの中でさらに分けてメニューを作りたい場合は、sub menuを押して、上記で説明したメニューの作り方を参考にしてメニューを作り、下のsub menuの欄に新しく作ったメニューをD&Dしてその中身を今の説明通りに作ればオッケーです。
ではジェスチャーマネージャーでチェックしてみます。(便利なツールなので入れてください。Gesture managerでググったら出ます)
まずはデフォ(今回はオフ)
次にオンにすると、帽子が現れます。
これで終わりです。うまくいった方はおめでとうございます。うまくいかなかった方向けに原因になりそうなことの解決方法を書いておきます、大体これらだと思います。
うまくいかないときは
アニメーションの録画内容に間違いはないか(空だったり、録画が逆、あるいは二つおなじになってないか)
FXレイヤー内のアニメーションのWrite Defaultsのチェックは外れているか
FXレイヤー内のレイヤーのWeightは1になっているか
FXレイヤー内のアニメーションの矢印の条件はあっているか(tureとfalse、has exsit timeのチェック外しなど)
FXとアバターのほうのパラメータがそれぞれスペルミスがないか
アバターのパラメータのsyncedにチェックは入っているか
controlsはtoggleでなおかつパラメータは使いたいものに指定されているか
以下、余談
とりあえず書き出しては見ましたが見にくいところとか、ここがわからない、という点があれば追記していきますので気軽にコメントをお願いします。別にほかの人も同じような解説はたくさんしてると思うので、そこまで困っている人もいないでしょうが…
ほかの記事では、もっとつっこんだ内容を解説していくのでそちらはある程度改変に慣れている人でも学びがあるかとは思います。
これからにご期待ください。