狩ブロ

やってるゲームを自由に綴る

20220628204907 20220629220721 20221119183453
20230223203143 20230426180105

Unity 備忘録【幸せの青い鳥】⑤当たり判定と衝突時エフェクトアニメーションを実行する。

20230529211818 20230922154232

 20210222235948

集めます。

 前回でハートがたくさん流れてくるようになりました。

今回はそのハートとtoriさんが衝突したときの処理を追加していきたいと思います。

手順としては、、、

①toriさんとハートオブジェクトに当たり判定を付ける。

②衝突アニメーションを作る。

③衝突エフェクトは出現して役目を終えたら削除します

④toriさんとハートオブジェクトとぶつかった時に、ハートを消滅させて、衝突エフェクトを発生させる。

今回はこれを達成していきたいと思います。

■当たり判定を付ける。

20210311185514

toriさん とハートのプレファブに当たり判定を設定します。

付けたいオブジェクトを選択し、インスペクター内から、コンポーネントを追加→2D物理→2Dサークルコライダーを選択。このコライダーこそが当たり判定の役割を果たします。マウスでサイズ調整ができたり、感覚的に当たり判定を設定できるので便利です。コライダーにもいろんな形があり、組み合わせも可能なようですが、今回は丸形のサークルコライダーを設定しました。

toriオブジェクトにも同様にコライダーを設定します。

の追加されたコンポーネントの中に、Istrigger トリガーにする

という項目があるのでハートオブジェクトのトリガーにチェックを入れておきます。

■衝突アニメーションを作成して、プレファブ化する。

20210311190510 20210311190506 20210311190501 20210311190457 20210311190446

即席です・・w

どう書けばいいかもわからないのでそれっぽくなりそうな感じで、描いてみたものです。1つ目の画像をシーンビューにおいて、いつも通りアニメーションを作成します。

アニメーションができたら、次に時間を指定して削除できるようにスクリプトをアタッチします。

0.5fの数値を変更すると、消えるまでの時間を挑戦できます。

アニメーションの間隔で調整します。

私のアニメーション間隔配置だと0.5fぐらいでいいかなぁという感じでした。

■Destroy.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Destroy : MonoBehaviour
  5. {
  6.     // Start is called before the first frame updat
  7.     // Update is called once per frame
  8.     void Update()
  9.     {
  10.         Destroy(gameObject, 0.5f);
  11.     }
  12.    
  13. }

アタッチ出来たら、プレファブ化しおき、画面から一度消しておきます。

toriさんとハートオブジェクトとぶつかった時に、ハートを消滅させて、衝突エフェクトアニメーションを呼び出す。

これを命令する、スクリプトを作成します。

 

■Breaking.cs

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Breaking : MonoBehaviour
  5. {
  6.     public GameObject herPrefab;
  7.     // Start is called before the first frame update
  8.     void OnTriggerEnter2D(Collider2D coll)
  9.     {
  10.         Instantiate(herPrefab, transform.position, Quaternion.identity);
  11.      
  12.         Destroy(gameObject);
  13.     }
  14. }

OnTtiggerEnter2Dを利用することで、トリガーの衝突判定があった場合にこのなかの処理が呼び出されるようです。

命令内容は、Instantiateでアニメーション付きプレファブを生成する。

Destroyでオブジェクトを破壊します。

主人公の鳥さんがデストロイされたら終わってしまうので、ハートのプレファブに上記のスクリプトをアタッチします。

 

20210311194338

このままではハートオブジェクトはぶつかったときにどのプレファブを生成すればいいか分かっていませんので、ドラッグ&ドロップでアニメーション、時間指定デストロイスクリプトがついた、衝突エフェクトのプレファブをBreakingスクリプト内に入れます。

■再生してみる。

衝突したときに、ハートがエフェクトアニメを呼び出して消滅し、エフェクトも発生後消滅すれば成功です。