Unityに関連する記事です

 攻撃の機能とアニメーションの同期を行います。
また、アニメーションイベントの機能を利用し、アニメーションの再生に合わせて武器のコライダーのオンオフを切り替えます。


<実装動画 
動画ファイルへのリンク


<実装動画◆
動画ファイルへのリンク



手順15 ーアニメーションイベントを利用した攻撃処理の実装ー
 
 新しい学習内容は、以下の通りです。

・アニメーションイベント



1.設計


 攻撃処理については色々な実装方法があります。

 基本的にはコライダーを利用し、敵のゲームオブジェクトにアタッチされているコライダーと攻撃用のコライダーを接触・侵入させることで
攻撃という処理として機能させることが出来ます。

 このとき、武器に直接コライダーをアタッチしているか、あるいはアタッチはせずにコライダーを持つゲームオブジェクトを生成させているか、など
アプローチの方法は色々と考えられます。

 今回の実装方法では武器にコライダーのアタッチし、かつコライダーをオフ、IsTrigger はオンの状態にしてありますので、
武器のコライダーは敵のコライダーに対して侵入して判定を行うアプローチです。

 コライダーの侵入用の判定には OnTriggerEnter メソッドを利用することができますが、このメソッドが動くにはコライダー同士の侵入が必要になります。

 敵側のコライダーは最初からアタッチされているので問題ありませんが、武器のコライダーはオフの状態です。

 そのため、侵入判定を利用して攻撃の機能を作るためには、侵入判定のために、武器のコライダーをオンに切り替える必要があります
同時に、再度武器のコライダーをオフに戻しておかないと、攻撃していない状態であってもコライダー同士は侵入判定を行う可能性が出ますので、
適切なタイミングで武器のコライダーをオンにし、攻撃が終わったタイミングで武器のコライダーをオフにするという制御が必要となります。

 この部分については、Unity が用意しているアニメーションイベントの機能を使うことにより実装が可能です。



 アニメーションイベントとはアニメーションのタイムライン(再生時間)に紐づいて、特定のメソッドを実行する処理の事です。
例えば、攻撃のアニメーションが2秒あるとしたとき、0.5秒の地点で武器のコライダーをオンにするメソッドを実行することができれば
武器を振りかぶったタイミングでコライダーをオンにする、という制御が可能です。

 同じように武器を振り下ろし、攻撃が終わったと判断できる秒数で武器のコライダーをオフにするメソッドを実行すれば、再度、オフに出来ます。

 今回はこちらのアニメーションイベントを利用した、攻撃処理について実装を行っていきます。
 

2.攻撃用の AttackPlayer スクリプトを作成する


 キャラの手に武器を持つことは出来ましたが、このままでは、この武器のゲームオブジェクトとキャラのゲームオブジェクトにはつながりはありません。
そのため、攻撃用のクラスを用意し、プレイヤーが持つ武器で攻撃できる機能を追加します。

 構えている武器はコライダーがオンの状態です。つまり、敵と当たってしまいます。
ですが、構えているだけの武器が常に敵に当たってしまってはゲームとしては問題です。
キャラが攻撃を行ったタイミングでコライダーをオンにするようにし、攻撃アニメーションの間だけ、敵に対して当たり判定を取るようにした方が自然です。

 それらを踏まえて新しいスクリプトを考え、プログラムを組み込んでみましょう。
今回はまだ侵入判定用のメソッドは実装していません(TODO のみ記載)が、書ける方は実装にチャレンジしてみてください。



 そしてこのスクリプトはどのゲームオブジェクトにアタッチするものなのか、それも考えた上で処理を書いていくように心がけてください。
教材の通りに書き写して終わりではなく、書いている処理を読み解き、どのような内容になっているのか
この処理をアタッチするに適切なゲームオブジェクトはどれなのか、そういったことを「考え」ながら学習していってください

 内容を理解していく、という意識を持って学習していくことがスキルアップにつながります。
惰性で書き写しているだけでは学習にはなりませんので注意してください。


AttackPlayer.cs

 <= クリックすると開きます


 スクリプトを作成したらセーブします。


AttackPlayer スクリプトをアタッチして設定を行う


 どのゲームオブジェクトにアタッチすればよいか、よく考えてスクリプトをアタッチしてください。

 アサインする情報がありますので、コライダーの制御を行いたいゲームオブジェクトをアサインしてください。
自動的にコライダーの情報が変数に登録されます。


インスペクター画像(参考画像)



 以上で設定は完了です。



3.アニメーションイベントを利用したコライダーの切り替え

<1.アニメーションイベントとは>


 Unity にはアニメーションの再生に連動して、事前に登録してあるメソッドを自動的に実行させることができるアニメーションイベントという機能があります。
この機能を利用することで、攻撃のアニメーションと連動して攻撃用のメソッドを自動的に呼び出すことが出来ます。


参考サイト
Unity 公式マニュアル
Events

赤兎ラボ 様
Unity AnimationEventhttps



<2.アニメーションの Events にアニメーションイベントを設定する>


 アニメーションイベントを設定したいアニメーションクリップを選択し、インスペクターの右上にある Edit… ボタンを押してください。
今回であれば Animator ビュー内にある Attack0 ステートを選択し、インスペクターに表示されている Motion の部分に登録されているアニメーションクリップを選択しています。


アニメーションクリップを選択



Edit… ボタンを押す



 Edit… ボタンを押すとインスペクターの内容が Import Settings に切り替わるので、その中にある Animation タブを選択します。


Animation タブを選択



 インスペクターの情報が Animation タブの内容に切り替わります。



 Animation タブ内のインスペクター下部に Events という項目がありますので、そちらを選択するとタイムライン項目(アニメーションの再生時間)が表示されます。
このとき、Events のすぐ下にある 白いマーカーと + ボタンを押すことで、指定した秒数の地点にアニメーションイベントを新規作成できます。
すでにある場合には、それを利用しても構いません。


イベント設定用の白いマーカー



 選択しているアニメーションイベントのマーカーは白から青になります。
青いマーカーをドラッグアンドドロップするとタイムライン上を移動させることが出来ます。
このマーカーのある地点においてアニメーションイベントを発生させることが出来ます。


マーカー選択中




 新規作成したアニメーションイベントのマーカーを選択することで、イベントを登録できます。
このうちの Function の部分に メソッドを登録することができます。
先ほど AttackPlayer スクリプト内に作成した SwitchWeaponCollider メソッドの名前を文字列で登録します。
文字列ですので、大文字小文字を間違えると認識しません。メソッド名を一字一句間違えずに記載してください。


Function にメソッドを登録




 メソッドの登録時には引数の型を一緒に設定できます。これには型の指定(Float、Int、String, Object 型のみ)があります。
今回の SwitchWeaponCollider メソッドは int 型の値を引数に設定していますので、Int の部分に、値を一緒に登録しておきます。
0 に設定するとコライダーをオンにします。1 に設定するとコライダーをオフにします。

 これは、メソッドの引数と処理の内容が連動するように記述しているためです。

    private void SwitchWeaponCollider(int switchIndex) {  // ← ここにアニメーションイベントの Int に設定した int 型の値が届く

        // コライダーオンオフ切り替え
        capsuleCol.enabled = switchIndex == 0 ? true : false; // ← 届いた値を元に、コライダーのオン・オフを切り替える

 よって、毎回この Int の設定を 0 や 1 にすればよい、というものではありません。
これらの引数の設定は、あくまでも Function に登録したメソッドの引数と連動させるものであると認識してください。



 アニメーションイベントに設定するメソッドのアクセス修飾子は private でも問題ありません。
ただし、Animator コンポーネントがアタッチされているゲームオブジェクトと同じゲームオブジェクトにアタッチされているスクリプトのメソッドのみ実行対象となります。

 今回はコライダーのオンとオフの切り替えを行いたいので、2つのアニメーションイベントを作成します。つまり、マーカーが2つ必要になります。
武器を振りかぶっている状態でコライダーをオンにし、武器を振り切った状態でコライダーをオフにするように、
それぞれのマーカーの位置をタイムラインを見ながら調整します。


参考(オン時。Function にはSwitchWeaponCollider、 Int には 0 を設定)



参考(オフ時。Function にはSwitchWeaponCollider、 Int には 1 を設定)



 以上で設定は完成です。


ゲームを実行して動作を確認する


 実際に攻撃のボタンを押して、アニメーションが連動するか確認します。

 また、アニメーションの最中にアニメーションイベントに登録したメソッドが実行されて、
武器に設定しているコライダーのオン・オフが切り替わることも確認しておきます。


<実装動画 
動画ファイルへのリンク


<実装動画◆
動画ファイルへのリンク



 これで、アニメーションイベントと AttackPlayer クラス内に記述したメソッドが同期し、
アニメーションの再生時に、アニメーションイベントの時間になったタイミングでメソッドが実行されることが確認できます。

 アニメーションイベントは Animator コンポーネントがアタッチされているゲームオブジェクトにも紐づいていますので、
実行したいメソッドが書いてあるクラスは必ず、Animator コンポーネントがアタッチされているゲームオブジェクトにしてください。



 以上でこの手順は終了です。

 => 次は 手順16 −動かない敵の実装− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます