見出し画像

【VRChat】Avatars 3.0を利用したチャージ攻撃システムの実装


 初めましての方は初めまして。前回の記事を読んでいただいた方はお久しぶりです。
 今日も今日とて自作武器モデルを振りまわして遊んでるHelio_ICNMYです。

今回はVRChatの新機軸【Avatars 3.0】を利用して、チャージ時間によって攻撃エフェクトが変わるシステムを実装できたのでAvatars 3.0の布教も兼ねて、実装方法をnoteに書き下ろしてみました。

目次
・更新履歴
・本編 
    -完成物紹介
    -仕様
    -Anmator遷移の説明
 -各遷移条件の説明
・後書  -なぜこのnoteを書こうと思ったか-
・Special thanks


(注意)本稿は以下の知識を持っているという前提で説明いたします。
 ・AvatarV3HandsLayerを編集し、武器の取り出し・収納を行う。

Avatars 3.0の基本や3.0環境でのオブジェクト出し入れ方法については、以下のリンク先の方が詳しいのでこちらを参照してください。

〇更新履歴

2020/8/25:初版
2020/9/30:第二版(誤字修正)


◯本編

-完成物紹介
     まず最初に、今回実装したチャージ攻撃の動作を紹介します。

 上の動画のように、チャージ時間が短いと少量のエフェクトが発動し、チャージ時間が長いとより激しいエフェクトが発動するようになっています。

 -仕様

今回のアニメーションを作る際に考えた仕様(要は「こんなことをしたいな」と考えたネタ)がこちらになります。


・剣を手に持っているときだけ発動する(剣を手にしてないときは暴発しない)
・grip握りこみでチャージ開始。緩めると攻撃発動(拡張メニューではなくハンドサインで発動したい)
・指定時間握っていると別のアニメーションに遷移する(より激しいエフェクトを有するanimationを再生する)
・gripを緩めた時に発動しているチャージアニメーションに応じて、遷移する攻撃アニメーションが変化する

【結局のところ、何がしたいの?】
某大◯闘ゲームで、某ドラゴンな主人公が使う必殺技「◯ラ」「メ◯ミ」「メラ◯ーマ」みたいな撃ち分け攻撃がしたい!*

*実際に作ったエフェクトの元ネタは「一人で10体ぐらいやればいける」理論を振りかざした某剣士の通常必殺技ですが...


-Anmator遷移図の説明
それでは、今回組んだAnimator遷移図を紹介します。今回のチャージ攻撃は、以下に示すLayerとParameterを3つ使用しています(うち2つはGestureRightWeightとGestureRightなので、新規追加のparameterは1つ)

遷移図全体

animator full 編集済

動作の流れを文面で説明すると、

Default(武器を手にしていない)状態
↓遷移①
剣を手に装備する(State 1)
↓遷移②
チャージアニメーションを開始する(State 2-A)
↓遷移③ or 遷移④
チャージ2段階目に移行する(State 2-B) or 攻撃(弱)を発動する(State 3-A)→State 1に戻る
↓遷移③' or 遷移④'
チャージ3段階目に移行する(State 2-C) or 攻撃(中)を発動する(State 3-B)→State 1に戻る
↓遷移④''
攻撃(強)を発動する(State 3-C)

State 1に戻る

というように、チャージアニメーションのStateから攻撃アニメーション・次のチャージアニメーションの2つに分岐させてうちわけを行っています。
攻撃アニメーションを再生した後はチャージする前のStateに戻っているので、再度チャージ→攻撃を発動することが可能です。


-各遷移条件の説明

>遷移①:専用の新規parameter  Equal 1

 こちらは、Avatars 3.0の拡張メニューを使って武器を腰から右手に持ちかえるために作成した遷移です。この遷移を行うことで、次のためアニメーションに遷移できるようになります。
 逆に言うとこの遷移を行わない限り、チャージ・攻撃のアニメーションが発動しない(暴発しない)ようになっています。
 今回は武器でのチャージ攻撃を想定しているため専用のアニメーションを入れていますが、ステゴロのままなど持ちかえするオブジェクトがない場合にも、エフェクト暴発防止に活用できると思います。

 

>遷移②:GestureRightWeight Greater 0.95
       GestureRight Equal 1

 遷移②はState 1 からチャージ1段階目(State:2-A)に遷移する条件です。上記の設定は「右手のハンドサインがgripであり」かつ「右手トリガーの握りこみが0.95以上である」時に次に進む、という条件になっています。
 この設定により、剣が右手にある状態で右手のコントローラーを握りこむことでチャージアニメーションのStateに遷移します。
 *GestureRightWeightの閾値が小さいと、別のハンドサインからgripに切り替えた瞬間で遷移②の条件を満たして2-Aに遷移してしまうので注意してください。0.95ならばほぼ暴発しないはずです。
 
>遷移③:Has exit time : true
>遷移④:Has exit time : false
      GestureRightWeight Less 0.5
 遷移③はチャージ2段階目(State:2-B)に遷移する条件、遷移④は攻撃(弱)(State:3-A)に遷移する条件です。こちらは「右手トリガーの握りこみ」と「アニメーションの再生完了」という2つの条件で振り分けを行っています。
 >右手トリガーを握りこんだままチャージ1段階目を再生終了する。
   →遷移③の条件を満たしてチャージ2段階目(2-B)に遷移する。
 >チャージ1段階目の再生中に右手トリガーを緩める。
   →遷移④の条件を満たして攻撃(弱)(3-A)に遷移する。

遷移③と③'、遷移④と④'と④''はそれぞれ同じconditionが入っており、チャージ2段階目での分岐・チャージ3段階目から攻撃(強)への遷移も、すべて右手トリガーを握っているか緩めたかで分岐させています。


>遷移⑤:Has exit time : true
  遷移⑤は攻撃アニメーション(3-A, 3-B, 3-C)の再生後に1.剣装備へ戻るための遷移です。アニメーションの再生が終わったら条件なしで遷移する設定になっています。


以上が遷移条件の説明になります。
チャージ状態のstateを増やしたり、int型のparameterを加えたりすることでより多彩な段階付けを行うことも可能と思われます。
(その分Animationの数も増えるので設定難易度は上昇しますが…)

あとは、各Stateにお好みのAnimationをぶちこめば完成です。



◯後書 -なぜこのnoteを書こうと思ったか-
(作者の自分語りだよ)

  Avatars 3.0が本実装されて約1ヶ月。従来のハンドサイン・Emote導入とは全く異なる仕組みに戸惑っている人も多くいらっしゃるのではないでしょうか。かくいう私も、今月上旬の時点では「Animatorとか触ったこと無いし、3.0にしたところで何ができるのか分からんから保留しとこ」と判断してノータッチでした。
 しかし、リップシンク認識や拡張メニューを利用したEmoteSwitch、ドローン操作など、いろんな方が新しいシステムを考案していくにつれて「自分もAvatars 3.0を理解すれば、何か新しいこと・面白いことができるのではないか」と考えるようになりました。
 そこで、前述したリンクを参考にしてハンドサインを入れるところから始まり、2.0環境でハンドサインに入れていたアニメーションの拡張メニュー化や、新しく追加されたRadial Puppet(0~100%でアニメーションを遷移させるスイッチ)を利用して物を動かすシステムを組んでいきました。
(以下に8月中に組んだものを紹介します。)

 こうしたシステムを組む中でAnimatorと触れ合い、あの矢印と四角だらけの図が何を意味しているのかを(なんとなく)理解した結果、「じゃあこんなStateを用意してこんな遷移条件で繋げればいけるんでね?」と思い至って組んだのが今回のチャージ攻撃です。

月初めには「ワケワカメ」と敬遠していた人間が、月の終わりには自分でStateや遷移条件を考え、実装するようになっていました。

最初の「食わず嫌い」を乗り越えたからこそ、Avatars 3.0を使った新しい遊びを楽しめるようになったと思います。


【長々話してるけど、結局何が言いたいの?】

Avatars 3.0楽しいからみんなも導入しようぜ!


◯Special Thanks

・かかしのクロウリー様(@crowley_youtube)
Unity・Animatorについての私の師匠。
音声認識で発動するアニメーションとか作ってる。

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