こんにちは、ともくんのゲーム作り部屋にようこそ!
このページでは、
「2Dゲームでキャラクター武器を持たせたい!」
「アニメーションに合わせて武器を動かす方法が知りたい!」
というお悩みの方に向けた内容となっています。
Unityで2Dキャラクターに武器を持たせる場合、キャラクターの子オブジェクトに武器を配置することで、キャラクターと一緒に武器を動かすことができます。
ただし、武器をそのまま配置しても、武器が上に置いてあるだけでキャラクターが持っているようには見えないので、武器の手で持つ部分を消去し空白にしてあげることで、キャラクターが武器を持っているように見せることができます。
また、キャラクターをアニメーションで動かす場合は、スプライトの切り替えタイミングで武器が動くようにアニメーションを付けてあげることで、自然と武器を持っているような動きを作ることができます。
そこで、このページでは、Unityの2Dゲームでキャラクターに武器を持たせる方法と、アニメーションの動きに合わせて武器を動かす方法までをまとめていきます。
2Dゲームでキャラクターに武器を持たせる方法
まずは、2Dでキャラクターに武器を持たせる方法を紹介していきます。
ここでは、以下のような棒人間のキャラクターを作成して、武器となる剣を持たせてみます。

武器画像のキャラクターが持つ部分を消去する
キャラクターに武器を持たせるためには、武器を持つ部分がキャラクターの手などによって隠れていることで、武器を持っているように見せることができます。
例えば、以下のように武器オブジェクトを手の部分に配置しても、あまり武器を持っているようには見えません。

武器のレイヤーを後ろにしてあげることで持っているように見えますが、

手の位置次第で体の後ろに必ず武器が隠れてしまうことになるため、違和感が生じてしまいます。

そこで、武器画像を修正して、持たせたい部分だけを以下のように削除して、空白を作っておきます。

この画像をシーン内に配置して、空白の部分とキャラクターの手の位置を合わせて配置しておくことで、その武器を持っているように見せることができます。

反対の手に持たせてみても、以下のように体の前に武器を表示できるので、違和感が無くなりました。

なお、この仕組みを使えば、剣以外にも様々な武器を簡単に持たせることができます。
子オブジェクトに武器を配置する
武器のオブジェクトを配置する際は、ヒエラルキーウィンドウで以下のようにキャラクターの子オブジェクトになるように配置します。

なぜなら、子オブジェクトに配置しておくことで、キャラクターの動きに合わせて武器も一緒に動くようになるからです。
Unityでは、オブジェクトを親子階層にしておくことで、子オブジェクトは親オブジェクトを基準として配置されるようになります。
そのため、親となるオブジェクトを移動させたり回転させると、子のオブジェクトも同じように移動したり回転するようになります。
この仕組みを使って、キャラクターの子オブジェクトに武器を配置してあげることで、以下のようにキャラクターが移動した際に一緒に武器が移動するため、その武器を持っているように見えると思います。

アニメーションの動きに合わせて武器を動かす方法
次に、キャラクターにアニメーションを付けているような場合に、その動きに合わせて武器を動かす方法を紹介していきます。
ここでは、先ほどのキャラクターに対して、以下のような歩くアニメーションを作成してみました。

ちなみに、このアニメーションはスプライト画像を複数枚使って、スプライトを切り替えて動くように設定しています。

スプライトの切り替えに合わせて武器の位置を調整する
キャラクターがアニメーションで動くと、武器を持っている手の位置が変わってしまうことになるため、それに合わせて武器の位置も移動させる必要があります。
そこで、キャラクターのスプライトの切り替えに合わせて、武器の位置を変えるように調整していきます。
Animationウィンドウを開いて、スプライトの切り替えのタイミングを選択、そして左側の録画ボタンをクリックします。

この状態でシーンビューに戻り、武器の座標位置や向きを調整してあげます。

すると、Animationウィンドウ上に武器オブジェクトのキーフレームが記録されるようになります。

少し大変ですが、この作業を全てのスプライトの切り替えタイミングで行ってあげます。

ちなみに、ここでは武器のオブジェクトの位置を直接調整していますが、他の武器も使うような場合は、空オブジェクトを使って位置を調整して、その階層内にそれぞれの武器のオブジェクトを入れてあげることで、他の武器にも対応することができます。
これでキャラクターを動かしてみると、

アニメーションに合わせて武器も移動していますが、少し動きが合っていないように見えます。
このキャラクターと武器の動きが合っていない理由として、キャラクターのスプライト画像の切り替えは、パラパラ漫画のようにパッとそのタイミングで切り替わるのに対して、武器の座標位置などは、元の位置から目標とする位置までの間の値を補間して、少しずつ移動する処理が行われているからです。
アニメーションカーブで「Constant」を指定する
キャラクターと武器の動きを合わせるために、先ほど設定した武器のキーフレームに対して、アニメーションカーブで「Constant」という設定を行っていきます。
そもそもアニメーションカーブというのは、アニメーションの各キーフレームを繋いでいる曲線のことで、先ほどの補間される値を表しているグラフとなります。
そして、このアニメーションカーブの設定でConstantにしてあげることで、グラフが曲線では無く階段状になります。
これは簡単に言えば、武器の位置や向きの移動をスプライト画像の切り替えと同じく、そのキーフレームを設定したタイミングでパッと切り替えるようにしてくれる設定になります。
アニメーションカーブを設定する場合は、Animationウィンドウの下部にある「Curves」を選択してあげます。

次に、アニメーションカーブ上で武器の位置や向きのキーフレームを全て選択してあげます。

そして、キーフレーム上で右クリックをして、「Both Tangent」の中にある「Constant」を選択します。

すると、アニメーションカーブが曲線から階段状に変わるようになります。

これでキャラクターを動かしてみると、

アニメーションの動きに合わせて、武器も一緒に動くようになりました。
まとめ
このページでは、Unityの2Dゲームにおいて、キャラクターに武器を持たせる方法と、アニメーションの動きに合わせて武器を動かす方法の2つをまとめていきましたが、いかがでしたでしょうか?
2Dで武器を持たせる場合は、武器の中の手で持つ部分を消して空白にして、キャラクターの子オブジェクトとして配置してあげます。
また、アニメーションでキャラクターを動かす際は、武器の位置を調整するキーフレームの設定をConstantにしてあげることで、一緒に動くようになります。
この一通りの仕組みを使うことで、どんな武器でもキャラクターに持たせることができるようになります。
最後までお読みいただきまして、ありがとうございました!




コメント