前書き
Unityで実装をしていると例えば「ダメージが発生する床はアニメーションに連動してColliderの有効・無効を切り替えたい」と言ったことがやりたくなる時があります。今回はアニメーションに同期したColliderの有効・無効を切り替える方法について紹介していこうと思います。
やりたいこと
以下の動画のように
- 手を伸ばしていないときはColliderを無効にしてダメージを発生させない
- 手を伸ばしているときはColliderを有効にしてダメージを発生させる
ことをやりたいと思います。
アニメーションに同期してColliderを変更する方法
アニメーションの準備
まずはアニメーションを準備しましょう。今回のアニメーションは以下の3つ
- ZombieGrasp_Start(Collider:OFF→ON)
- ZombieGrasp_Loop(Collider:ずっとON)
- ZombieGrasp_EndLoop(Collider:ON→OFF)
アニメーションによってColliderの設定を変更します。
「ZombieGrasp_Start」ではColliderが無効の状態から有効に変更します。
「ZombieGrasp_Loop」では常にダメージを発生させたいため、Colliderはずっと有効状態にします。
「ZombieGrasp_EndLoop」ではColliderが有効の状態から無効に変更します。
今回は簡単になるように「開始」~「実行中」~「終了」という3つの状態のみになっています。やろうと思えばもっと複雑な方法もできるので慣れてきたらぜひ複雑な状態も試してください。
コンポーネントの準備
アニメーションと同期してColliderを変更したいので、AnimatorControllerと同じ階層にBoxCollider2Dコンポーネントを配置しましょう。こうすることでアニメーションと同期してColliderを変更することができます。
アニメーションと同期してColliderを変更する
ZombieGrasp_StartのAnimationを開いた状態で
- Add Propertyをクリック
- Box Collider2Dの下矢印をクリック
- (今回はすでに選択していますが)Box Collider2DのEnabledの”+”をクリック
- 1~3を実行すると下記画像のように、
Sprite以外にBox Collider2D.Enabledがアニメーションで設定できるようになります。 - あとはアニメーションを設定するときと同じように
時間によってBox Collider2DのEnabledの値を変更します。
この状態で動かしてみると以下のようになります。
Box Collider2Dがアニメーションと同期して有効・無効になっていることが分かります。
同じように「ZombieGrasp_EndLoop」もアニメーション開始時はBox Collider2Dを有効にして、アニメーションが終了するぐらいでBox Collider2Dを無効にしてみましょう。
最終的にこうなります。
「ZombieGrasp_Start」と「ZombieGrasp_EndLoop」でBox Collider2Dの有効・無効を設定すると以下のように手が伸びているときはColliderが有効になり、手を伸ばしてない間はColliderが無効になります。アニメーションと同期してColliderの有効・無効が設定されていることが確認できますね。
まとめ
アニメーションとColliderを同期させる方法について紹介をしました。
今回は見た目で分かりやすいようにアニメーションとColliderを同期させる方法になりますが、Collider以外にもSpriteのColorを同期させて色を変更したり、Transferで位置をちょっとだけ変えたりといろいろと工夫が聞きます。まずは簡単な方法で実装してみて慣れてきたら複雑な処理に挑戦してみてください。
コメント