前提・実現したいこと
Unityで装備に応じて移動や攻撃、その他のモーションを入れ替えられるようにしたいです。
また仕様として左手の装備もあり、左手の装備のアニメも別途入れ替える必要があります。
考えている仕様について
・アニメーターコントローラーの入れ替えによるモーション変更。
最初は同一名の別モーションを入れたアニメーターコントローラーを入れ替えることによって、装備ごとのモーションをプレイヤーに適用しようかと思いました。
しかしこれはアニメーターコントローラーをランタイムで入れ替える方法が見つからなかったため断念しました。
・装備に応じてアニメーターコンポーネントをつけたゲームオブジェクトのプレハブを呼び出し、そのプレハブからアニメーターコンポーネントを獲得する方法。
さきほど記したアニメーターコントローラーの入れ替えに近い方法です。
装備ごとにモーションを格納したアニメーターを持たせたゲームオブジェクトをプレハブ化して保存します。
そして装備変更に応じてプレイヤーオブジェクトのルート下に呼び出し、そこからアニメーターコンポーネントを参照するといった形になります。
あるいはアニメーターのリストを保持しておいてそこから切り替えるというのも考えています。
現状最有力候補です。
・すべてのアニメーションをアニメーターに含んでおいて、装備ごとに固有の文字列を用いてアニメーション名と組み合わせることでplayする。
mecanimを使用しない方法です。
.play()メソッドによるアニメーション呼び出しの際、装備ごとに定めた文字列とアニメーション名の共通部分を組み合わせることで特定の装備のモーションを呼び出します。
しかしアニメーターにアニメーションをあまり多く入れるとエディターのメモリ使用率が跳ね上がり、嫌な予感がしたため取りやめました。
・同じアニメーターでアニメーションクリップを差し替える方法。
現状二番目の候補です。
一番目ではない理由は、武器によってはアニメーターの内部に固有のステートを作ったりする見通しがあるからです(たとえばある武器を持っていると二段ジャンプができたり)。
その場合ステートを削除したり追加したりする必要に迫られるため、その管理を個人的にあまりやりたくないと感じたというのは大きな理由です。
それから2個目の方法のほうが負荷が軽そうだというのも理由になります。
そして左手装備のアニメーションについてですが、私は3番目の方法の時以外のケースでなら一つ考えがあります。
それはいずれかの方法でアニメーターの内容を切り替えたあと、アニメーション(OneHandGuard、いわゆる片手ガード、左手の盾などでガードになる)の名前でステートを取得しその中身のみを装備に応じたアニメーションで差し替えるようなやり方です。
最後に
みなさんならどの方法で実装なさるのか、あるいは全く別の方法でより良い形で実装できるのか。
アドバイスをお聞かせ願えると幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Unity 2020.3.26f1
アニメーターのmecanimによるアニメーション遷移を使用しています。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/06 07:44 編集