見出し画像

VRCアバターに持たせたアイテムをアニメーションさせる設定

こちらはレンチが設計製作している3Dアイテム販売ショップ「◯一実験工場」で変形等のアニメーションを持つアイテムをご購入頂いた方への解説ですが、アイテムのアニメーション設定はUnityやVRCモデル設定について、ある程度の知識が必要です。
同様の設定に悩んでいる方も参考にしていただければと思い、公開しております。
(よかったらショップの方も見ていただければ嬉しい限りです。)

↓↓ショップはこちら↓↓
BOOTH
Vketストア

できる限り簡単に詳しく説明するため不可抗力で長文になっております。気力のあるタイミングでお読みください。

今回は変形ギミックのあるネイルガンというアイテムをアバターに持たせた状態でハンドジェスチャーで変形、射撃など複数の動作をさせます。

あくまで使用方の一例ですので、もっと頭のいい方法目的に応じた設定方があると思いますが、分かる範囲での説明になってしまうことをお許しください…。

またアバターはVRC上で動く設定がされている状態のものとして説明します。


・同梱してあるのはアイテム側のアニメなので、アバターのメニューやジェスチャー操作で操作できない。
・アバターに持たせたアイテムに複数の動きをさせることができない。

という理由で
アバター側のアニメーションで、「一つずつアニメーションを持たせたアイテムモデル」を代わる代わる出現させることでいろいろな動きをさせるという方法です。

【簡単な流れ】

・アイテムとアバターをインポート
・アイテムをモデルに持たせる
・アイテムにエフェクトを追加
・動作の数モデルを複製
・それぞれのモデルにそれぞれの動作を割り当てる
・モデル側で各アニメを持つアイテムを出現させるアニメーションを作る
・ハンドジェスチャーに応じてアイテムを動かす設定をする

モデルインポート


Unity画面上のProjectウィンドウにアイテムを持たせたい「アバター」と、アイテム「ネイルガン」のUnitypackageをドラッグ&ドロップ(以下D&Dと表記します)でインポートします。

アイテムを持たせる



ProjectウィンドウのモデルネイルガンのPrefabをHierarchyウィンドウにD&D。

ネイルガンのpackage内に入っているエフェクト(MuzzleFlashSteam)のPrefabを、Hierarchyウィンドウアイテム上にD&D。
これでアニメーションさせた時にエフェクトが出るようになります。

Hierarchyでアバターをクリックして中を開くとArmatureメッシュが入っています。
このアーマチュア中の手のbornの中に、Hierarchy上のネイルガンをD&Dで入れます。(これで手の動きにアイテムが追従するようになる)

Scene上でアイテムの位置を調整して、アバターが持っているような位置に置き、サイズも調整します。

アイテムをアニメーションさせる設定



手のborn下にあるアイテムを、させたいアニメーションの数だけ複製します(ctrl+cでコピー、ctrl+vで貼り付け)。

わかりやすい名前に変更(standby_modeというAnimationをさせるモデルはnailgun_standby_modeなど)

ProjectウィンドウからネイルガンのAnimationフォルダ中にあるAnimationController(※AnimationClipではない)を、複製したそれぞれのアイテムにD&D。

現状、Scene上では変化無いように見えますが、いろいろな動きをするアイテムたちがぴったり重なっている状態です。

※※※
例えばstandby_modeのAnimationControllerを先程のnailgun_standby_modeに入れると「出現と同時にstandbyの動作をしてくれるアイテム」になります。
別のアニメーションをさせたいときはアイテム複製、別のAnimationControllerを入れることで、別の動作を再生するアイテムを作る。
それらを代わる代わる出現させることで複数のアニメを再生しているように見せます。
全く動かない状態も必要であれば、複製したモデルにAnimationControllerを入れないままにしておけば作れます。
※※※

動作アイテムの表示、非表示Animationを作る



今重なって表示されているネイルガンを代わる代わる表示させる設定はアバター側の設定で行います。

まず全てのアイテムを、Inspector画面左上にあるチェックを外して非表示状態にします。
(デフォルトで出現させた状態が良ければ動かない状態のアイテムを作って、それだけ表示状態にしておきます。)

次に、動作アイテムを表示するAnimationをそれぞれ作ります。

Hierarchyでアバターを選択し、上部メニューからWindow>Animation>AnimationでAnimationウィンドウを開きます。
(ここではbornの動きメッシュの表示、非表示等を操るAnimationClipを作れます)
モデルにAnimationClipがない場合はCreateボタンが表示されています。

Createを押し、わかり易い名前をつけ(ここではnailgun_standby_modeを表示させるのでon_standby_modeとします)保存先を設定すると(場所はデフォルトで良い)アバターのAnimationClipが新規制作されます。
(アイテムのAnimationフォルダに入っているAnimationClipはアイテムの動きのデータ。今作ったのはアバターの動きのデータです。)

モデルに2つ目以降を作る場合(既にアニメーションがある場合)は右上の▼マークでプルダウンを開くと、モデルに入っているAnimationClipが一覧で表示されます。一覧の下のCreateNewClipを押すと新規作成できます。

ウィンドウ左のAdd Propertyを押すとアバターのbornメッシュ一覧が表示されるので、その中から先程アバターに追加したアイテムを探します。(例ではnailgun_standby_mode
見つけづらいですが三角ボタンを押してアーマチュア(bornのまとまり)の中を開いてマトリョシカのごとく子を辿って手のbornを開けば見つかるはずです。

見つけたらそのアイテムの中にIs Activeという項目があり、その左に+マークがあるので押します。

これで追加されるのがアイテムの表示、非表示を操るタイムラインです。ここにキーフレームを打つことでアイテムの状態を変化させることができます。

再生位置の縦ラインを動かして、右側のアイテム名の横にあるチェックをつけたり消したりすると、その位置に表示非表示のキーフレームが付きます(チェックがついてる方が表示消えてる方が非表示です。またキーフレーム上で右クリックDelete Keyからキー自体を消せます)。

デフォルトで一番最初最後出現のキーフレームがついているはずなのでその状態であればそのままで大丈夫です。
そうでなければ最初と最後のキーフレームに再生位置のラインを合わせてチェックをつけた状態に、また関係ないキーがあれば消しましょう。

これで一つの動作アイテムを出現させるAnimationClipが作れました。これを全ての動作アイテム分作ります。

ハンドジェスチャーで表示アイテムを切り替える



上で作ったAnimationClipを、VRC内のハンドジェスチャーに応じて一つずつ表示させる設定をAnimationControllerで作ります。

ここで書くのはハンドジェスチャーの設定を一から作る方法ですが、既にその設定がある場合は、この記事の内容を参考にAnimationController内のstate(後で説明)が表示させるAnimationClipを入れ替えれば動作すると思います。が、正常に動かない場合は既に設定された別のAnimationControllerが干渉している可能性もあります。

■まず簡単にVRCのハンドジェスチャーの仕組みを説明すると
VRC内で設定された「GestureRight」「GestureLeft」という変数が、「手を閉じていれば0」「指差しならば3」のように手の形によって0~7まで変化します。この変数の値を読み取って、再生させるAnimationClipを変えるという設定をします。

■まずProjectウィンドウで右クリック、creat>AnimationControllerで新規作成してください。

ProjectウィンドウにAnimationControllerができますので、これをHierarchyのアバターにD&Dすることで、このアバターでこの設定が使用されるようになります。

Projectウィンドウ上のAnimationControllerをダブルクリックするとAnimatorというウィンドウが開きます。

ここに前章で作ったAnimationClipをすべてD&Dで入れるとstateという四角い箱ができます。1つ目はオレンジ、2つ目以降はグレーになるはずです。

デフォルトの動作に設定したいもの(例えば非表示状態など)を右クリックSet as Layer Default Stateを押せばオレンジ色になりEntryという緑の箱から線がつながります。
この線をTransitionといって動作の移り替わりを意味しています。
Entryがスタートなのでオレンジが最初に再生される動作ということです。

次にAny Stateという水色のstateを右クリックMake Transitionを押すとマウスカーソルに向かって線が伸びるはずです。このまま他のstate上で左クリックすればそのstateと線が繋がります。

消す場合は線(Transition)の上で左クリックし、Inspectorの一番上のTransitions欄にある「Any State-><繋がってるstate名>」を左クリックで選択し、その下にあるマイナスマークを押すことで消去できます。

このやり方でAny Stateと(オレンジの初期状態も含め)全てのAnimationClipのstateと線でつなげます。

次にTransitionの設定です。
デフォルトでは徐々に変化していく設定なので一瞬で切り替わるように変えます。
・Has Exit Time にチェックを入れる
・Exit Timeを1に
・Transition Durationを0に

■続いてこのAnimationControllerで使用する変数(parameter)の設定です。

上記したようにハンドジェスチャーでは「GestureRight」「GestureLeft」を使いますが今回は右手で持って右手の動きのみで操作するので「GestureRight」だけを追加します。

Animator左上のparameterタブを押します。+マークを押しintを選択します(これは変数の種類です)。
名前を入力する部分が出るので「GestureRight」と入力します。少しでも誤字があると正常に動きません。

■次はparameterの変化に応じて動作を変える設定です。

AnimatorウィンドウのAny Stateに繋がっているTransitionをどれか選択し、Inspectorウィンドウ一番下のConditions欄で+マークを押して新しい設定を追加してください。

左の欄はデフォルトで先程設定したparameter(GestureRight)が入っていると思いますが、そうでなければ設定してください。
真ん中の欄はEqual(イコール)に設定してください。

右の欄に0と入っていると思いますが、この状態で「GestureRight変数が0とイコールならば繋がっているstateを実行する」という状態です。

「梅干大好きっ子クラブ」様の一覧表を使わせていただいて、ジェスチャーの形と名前、parameterの対応表を作りましたのでこれを参考に、どのジェスチャーでどの動きをさせるかお好みで設定していきます。

梅干大好きっ子クラブ様の商品ページ

(ちなみに他にもプレイヤーの操作によって変化するparameterはありますので、気になる方はこちらの記事を参考にしてみてください。https://ankoro199.hatenablog.com/entry/2021/04/24/114510)


以上でVRCアバターに持たせたアイテムをアニメーションさせる設定は終了です。長い時間お疲れ様でした。

ちゃんと動くかどうかはHierarchyのアバターを選択状態でUnity画面上部の再生ボタンを押してゲーム再生状態にした後、AnimationControllerのparameterの数字を変えることで一応確認できます。(本当に正常動作するかは実際にVRC内で確認するしかないですが…)

それでは皆様のバーチャルライフが幸多からんことを。

参考記事
【技術書】Boothで買ったAnimation武器を振り回す記事
武器を取り出す、爆発エフェクトを設定する。(VRChat:Avatar3.0)

この記事が気に入ったらサポートをしてみませんか?