今回はUnityに関するかなりニッチな話題で
武器の「抜刀・納刀」を実装する方法
を分かりやすくご紹介するという内容になっております。
Unityでアクション系のゲームを作っていると、キャラクターが武器を出したりしまったりする動作を実装したくなることがあると思います。これは簡単そうに見えて意外と難しいので「どうやったらいいんだろう?」と思う方も多いのではないでしょうか。
かくいう私自身も、個人開発しているゲームで味方の大剣使いの女の子が「デカい剣を持ったまま歩き回る」のが気に食わなくて必要に応じて抜刀・納刀できたらいいなと思っていました。
ここでは無料アセットを使って武器の抜刀・納刀を実装する方法について書きますね。
今回実装する抜刀・納刀処理の見本
まず、今回実装する武器の抜刀・納刀処理の見本は次のとおりです(※下記では抜刀時の様子をGIFで掲載)。

無料アセット「Sheath Script」
武器の抜刀・納刀処理を実装するにあたって無料アセット「Sheath Script」を使うことにしました。
このアセットを使うと、剣や刀など一般的な武器の抜刀・納刀を簡単かつ柔軟に実装できます。片手武器はもちろん両手武器の場合も実装できますし、武器の収納場所も複数パターン実装できたりするのでとても便利です。
Sheath Scriptを使った抜刀・納刀の実装方法
ではSheath Scriptの使い方をご紹介します。パッケージマネージャから導入したら下記の手順で抜刀・納刀を実装してください。
- 武器と抜刀・納刀位置を設定する
- 「Sheath Component Script」をAnimatorと同じゲームオブジェクトにアタッチする
- Animatorに抜刀・納刀用のステートとトリガーを追加する
- ステートに「Sheath Animator Script」を追加する
- 必要に応じてトリガーをONにする
それぞれ詳しく見ていきましょう。
手順1:武器と抜刀・納刀位置を設定する
まずSheath Scriptを使うためには、武器のローカル座標と回転をゼロにしておく必要があります。つまり抜刀位置と納刀位置にそれぞれ武器の位置と回転の目印となる親オブジェクトを作り、武器はその子オブジェクトとして配置します。
例えば抜刀時は武器を手の位置に持っていきたいので、予めキャラクターの手のボーンの子として武器の親オブジェクトを作る…といった感じです。そして細かい位置や回転の調整は、武器のトランスフォームをいじるのではなく武器の親オブジェクトのトランスフォームを変更することで行うといった具合になります。
手順2:「Sheath Component Script」をAnimatorと同じゲームオブジェクトにアタッチする
次に、キャラクターのAnimatorコンポーネントがあるゲームオブジェクトに「Sheath Component Script」をアタッチして設定を行います。

- Sheath Name:
識別用の名前。適当に入力してOK - Weapon:
武器のゲームオブジェクトを登録 - Weapon Parent In Hand:
手順1で作った抜刀時の武器の親オブジェクトを登録 - Weapon Parent In Sheath:
手順1で作った納刀時の武器の親オブジェクトを登録
なお×ボタンの横にある「Sheath ID」は後で使うので覚えておいてください。
手順3:Animatorに抜刀・納刀用のステートとトリガーを追加する
そうしたらキャラクターのアニメーターに抜刀・納刀用のステートをそれぞれ追加します。ステートの構成をどのようにするかはゲームによって違うと思うので各自調整してください。下記は私のゲームの場合のステート構成です。

ステートを追加したら、Sheath Scriptに付属している抜刀・納刀アニメーションの中から好きなものを選んでステートに登録しましょう。
また、抜刀・納刀ステートに移行するためにトリガーも用意しておきます。下記のようにトリガーパラメータを追加してトランジションの条件に設定しておいてください。

手順4:ステートに「Sheath Animator Script」を追加する
次に、ステートをクリックするとインスペクターに「動作を追加」というボタンが出ると思うので、それを押して「Sheath Animator Script」を追加して設定を行いましょう。

- Time Point:
抜刀や納刀のタイミングを合わせるためのパラメータ。抜刀や納刀のタイミングがずれる場合はここを調整してください - Sheath Action:
抜刀なら「Unsheath」、納刀なら「Sheath」を選択します - Sheath Id:
手順2のSheath Component Scriptに表示されているIDを記入します
これで下準備はOKです。
手順5:必要に応じてトリガーをONにする
あとは必要に応じてAnimator.SetTriger関数を呼び出して引数にトリガー名を設定してください。抜刀や納刀のアニメーションが再生されて武器の位置も変わります。
おわりに
以上、Unityで抜刀・納刀を実装する方法をご紹介しました。
細かい部分ではありますがこれを実装できるとキャラクターがより生き生きと見えるようになるので、個人的には地味ながら重要なこだわりポイントだと思っています。この機会にぜひ皆さんも試してみてください。
この記事がUnityでのゲーム開発のお役に立てば幸いです。


