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

今回はUnityのAnimationウインドウで銃を撃った後の引き金が後ろに下がるアニメーションを作成していきます。

銃はAssetStoreでダウンロードしてきたMakapobを使います。

他の3Dオブジェクトでもかまいませんが、引き金部分が切り離されているモデルでないと出来ません。

gun1

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

スポンサーリンク

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

Animationウインドウを開いた状態でMakapobを選択します。するとAnimationウインドウの方にCreateというボタンが出現するので押します。

するとファイル保存ダイアログが表示されるので、そこにGunShotという名前で保存します。

gun2

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

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

銃のスライド部分のアニメーションクリップの作成

これでGunIdleとGunShotというアニメーションクリップが出来ました。

gun4

GunIdleを選択した状態で、Add PropertyでSlide→Transform→Positionの+を押します。

するとキーフレームが打たれるのでそれでGunIdleは終了です。

GunIdleの部分をGunShotに切り替えてください。

GunIdleの時と同じようにSlide→Transform→Positionの+を押します。

フレームの1:00にあるキーフレームは選択しDelキーを押して削除しておきます。

録画の赤い●ボタンを押し、0:05あたりのフレームに移動し、Slideの位置を後ろに移動させます。

0:00のフレームでCtrl+Cでコピーします。その後0:10にフレームを移動させCtrl+Vで貼り付けます。

銃のスライダーを下げるアニメーションのフレーム

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

gun6

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

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

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

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

GunIdleをデフォルトの状態にし、ShotがトリガーされたらGunShotに遷移するようにします。

GunShot→GunIdleはHasExitTimeにチェックを入れ、アニメーションが再生されたら勝手にGunIdleに戻るようにします。

銃のアニメーターコントローラー

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

gun8

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

gun9

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

GunShot→GunIdleのSettingsのInterrupt SourceをNext Stateにします。これは銃を連続で撃った時にアニメーション途中でも次の状態へと素早く遷移させる為です。

AnyState→GunShotへはHas Exit Timeのチェックを外し、条件にShotがトリガーされた時を入れます。

銃のAnyStateからGunShotへの遷移条件

AnyStateからGunShotへ遷移させるのはGunIdleやGunShot状態のどちらにいる時でも連続で銃のアニメーションをさせる為です。

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

Animatorがない場合は追加してください。

銃のアニメーションの作成に使ったシーン上に配置したプレハブは削除してかまいません。

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

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

今まで作って頂いている方は銃を撃った時の処理をしているShotスクリプトのJudgeShotメソッドの中に追記します。

それ以外の方は銃を撃つスクリプトの個所に追加になります。

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

銃の情報を取得しているメソッドInitializeGunメソッドに銃のAnimatorを取得する処理を追加します。

を追加します。

InitializeGunメソッドは武器を切り替えて銃だった時に呼び出され、その銃のゲームオブジェクトの情報を受け取るのでそこでweaponからAnimatorを取得しています。

あとは銃を撃った時の処理であるJudgeShotメソッド内に銃のAnimatorのアニメーションパラメータのShotをトリガーする処理を追加します。

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

銃のアニメーションのサンプル

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

何の事はない、アニメーションのところでSlideのTransformだけでなく、Makapob本体のTransformも変更していたせいです。

GunIdleのアニメーションを作成した時にMakapob本体のTransformのプロパティも追加されてしまっている場合は削除してください。

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます