銃を撃った後の銃のアニメーションをUnityで作成する

今回は銃を撃った後の銃自体のアニメーションを追加します。
銃を撃った時に銃の引き金が後ろに下がるようにします。

銃はAssetStoreでダウンロードしてきたMakapobを使います。
他の3Dオブジェクトでもかまいませんが、引き金部分が切り離されているオブジェクトでないと出来ません。

gun1

上のようにMakapobプレハブをシーン上に配置します。

スポンサーリンク

銃のアニメーションの作成

Animationウインドウを開いた状態でMakapobを選択します。するとAnimationウインドウの方にCreateというボタンが出現するので、押します。
するとファイル保存ダイアログが表示されるので、そこにGunShotという名前で保存します。

gun2

するとGunShotというAnimファイルとMakapobというアニメーターコントローラーがMakapobのプレハブがあるフォルダに作成されます。

gun3

次にAnimationウインドウでCreate New ClipでGunIdle、GunShotという新しいアニメーションを追加します。

gun4

Add PropertyでSlide→Transform→Positionの+を押します。

するとキーフレームが打たれるのでそれでGunIdleは終了です。
GunIdleの部分をGunShotに切り替えてください。

GunIdleの時と同じようにSlide→Transform→Positionの+を押します。
フレームの1秒あたりにあるキーフレームは削除しておきます。

録画の●ボタンを押し、0:15あたりのフレームに移動し、Slideの位置を後ろに移動させます。
0:00のフレームでCtrl+Cでコピーします。その後0:30にフレームを移動させCtrl+Vで貼り付けます。

gun5_2

上のような感じになります。

gun6

実際のアニメーションは上のようになります。GunShotのインスペクタでLoopTimeにチェックが入っている為、繰り返し再生されてしまいます。チェックを外してください。

これでアニメーションが完成したので、アニメーターコントローラでアニメーションの遷移を作成します。

Makapobを選択し、Animatorウインドウで遷移を作成します。

アニメーションパラメータにTriggerのShotを作成します。

GunIdleをデフォルトの状態にし、ShotがトリガーされたらGunShotに遷移するようにします。
GunShot→GunIdleはHasExitTimeにチェックを入れ、アニメーションが再生されたら勝手にGunIdleに戻るようにします。

gun7

遷移は上のように作ります。

gun8

GunIdle→GunShotのTransitionは上のように設定します。

gun9

GunShot→GunIdleのTransitionは上のように作ります。

これでアニメーション、アニメーターが出来上がったので、装備させている銃のオブジェクトのAnimatorにMakapobアニメーターコントローラーを設定してください。
Animatorがない場合は追加してください。

銃のアニメーションの作成に使ったシーン上に配置したプレハブはインスペクタでApplyを押し削除してかまいません。

銃のアニメーションをさせる処理をShotスクリプトに追加

最後にアニメーションを再生させるアニメーションパラメータのShotをトリガーするスクリプトを作成します。

今まで作って頂いている方はShotスクリプトのJudgeShotの部分を変更します。
それ以外の方は銃を撃つスクリプトの個所に追加になります。

private var gunAnimator : Animator;

をShotスクリプトに追加します。

Start関数内で

gunAnimator = transform.parent.gameObject.GetComponent(Animator);

を追加します。これはShotスクリプトが設定してあるMuzzleの親(Makapobオブジェクト)に設定しているAnimatorを取得しています。
あとはJudgeShot関数内に

gunAnimator.SetTrigger(“Shot”);

を追加するだけです。

それではUnityの実行ボタンを押して確認してみましょう。

gun10

・・・・・、銃の反動のアニメーションでまったく手元が確認できません・・・・。

いちおう大げさに引き金部分を引いたアニメーションにして確認したところちゃんと出来ていました。

ここまででもしかしたら銃がぶれてしまう!
という方がいるかもしれません。
わたしもそれにはまってしまって、原因不明でしたが・・・。

何の事はない、アニメーションのところでSlideのTransformだけでなく、Makapob本体のTransformも変更していたせいです。
GunIdleのアニメーションを作成した時にMakapob本体のTransformのプロパティも追加されてしまっている場合は
削除してください。