以下の内容はhttps://www.karvan1230.com/entry/2019/09/03/213807より取得しました。


【Unity】Animation実行中にイベントを実行する

大雨

今年はやっぱり冷夏だったのか、夏休み期間が終わるのと同時ぐらいに「猛暑日」というワードも全く聞かれなくなって、どちらかと言えば「大雨」というワードがトレンドで賑う季節になっています。
私の住んでいる福岡では2日連続で大雨・洪水警戒レベル5を達成するという偉業を成し遂げて、しかも丁度帰宅の時間でピークを迎えるとか、もう帰れないかと思った、という貴重な経験を2日連続で味わう事ができました。ありがとうございます。もう二度と御免です。

 

さて・・・

前回、前々回の記事で紹介した通り、やっとSTGらしく弾を撃てるようなりました。

f:id:Karvan:20190903212917g:plain

 

未だ敵側の弾丸制御は未実装なんですが、やっぱり自機側だけでも弾を撃てると画面に派手さが加わりますね。

 

これで自機側の機能(武器)としては直線的に飛ぶ弾丸と、ロックオンターゲットに向かっての科学忍法『火の鳥』の二つになります。

 

ここで『火の鳥』って何?という方に説明すると、『火の鳥』言うのは下の動画のように、自機が敵に向かってKamikaze Attackする戦法の事を言います。
Kamikaze Attackの精神は最強なので、ゲーム内では最強の攻撃方法となる予定です。

 

f:id:Karvan:20190723234207g:plain

 

二つの攻撃方法を切り替えたい

攻撃方法が二つあるのですが、各それぞれで制御するモジュールは異なります。
弾丸の方は前述のようにJobSystem(Script)にて制御しますが、『火の鳥』の方はAnimation動作で自機の動きを制御しています。

 

この為、攻撃方法を切り替える際には互いに同期をとる必要があるのですが、Animationを使用してオブジェクトを動かす際には、開始時にトリガーを指定するだけで、その完了を待って次の動作を行いたい場合にはちょっとした工夫が必要なります。
(・・・っていうのが今回の記事の主旨)

 

Script側の設定

最初にアニメーション終了時に呼び出すコールバック関数を作成します。

ここで原則としてAnimation側からコールバックを受け取れるのは、Animatorと同じオブジェクトに付与されているScriptだけになります。Animatorが別オブジェクトのスクリプトに対してコールバック関数を呼び出すことはできません。

 

今回の場合は『火の鳥』のアニメ動作完了後にJobSystemへ弾丸発射の依頼をするだけなので、下記のように一行だけです。 

f:id:Karvan:20190903212404p:plain

 

 Animation側の設定

次にAnimation側でイベント発行(今回は完了時)のタイミングと、その時に呼び出すコールバック関数を指定します。

 

Animationウィンドウを開き、アニメーション終了時のKeyFrame上あたりで右クリックします。

 

f:id:Karvan:20190903213035p:plain

そうするとAdd AnimationEventという吹き出しが出てくるのでそれを選択します。

 

f:id:Karvan:20190903213134p:plain

選択後にInspectorウィンドウにAnimatorと同じオブジェクトに付与されているScriptのpublic関数が表示されるので、コールバック関数になるものを指定します。

 

f:id:Karvan:20190903213200p:plain

指定後はこんな感じになります。

 

実際の動き

これらの設定後に実際のゲーム上で動作確認した結果がコレです。

f:id:Karvan:20190903213249g:plain

 

次は敵側の弾丸制御かぁ・・・

 




以上の内容はhttps://www.karvan1230.com/entry/2019/09/03/213807より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14