気軽に遊べるミニゲームを制作しています

iPhone, iPad専用

Unity 当たり判定の使い方

Unity2D

Unityで当たり判定をつけていきます。

準備

ゲーム画面に にわとりと卵を設置し、落下した卵がにわとりに当たった時にアクションが起きるようにします。

当たり判定を起こすには、以下の条件を満たす必要があります。

  • ぶつかる対象AとBの両方にcollider2Dがついている。
  • A,BどちらかにRigidBodyがついている。

まず、にわとり側にCircle Collider 2Dをつけます。

Edit Collider右側のボタンを押して、Colliderのサイズを変更します。

緑の▪️をドラッグ&ドロップして、当たり判定の範囲を変更します。

卵側にはCircle Collider 2DとRigidbody 2Dを追加します。
先ほどと同様に Circle Collider 2Dの範囲は適切な大きさに変更します。

この段階で動作を確認してみます。

次に、接触した時にアクションを起こすようにします。

型 void OnCollisionEnter2D(Collision2D other)

まず、卵にタグをつけていきます。

Tagsの+を押して、New Tag Name = Egg を入力してSave

作成したタグをつけます。

次に、にわとり側につけるスクリプトを作成します。

にわとりに卵がぶつかった数をテキストに表示するスクリプトにします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HIt : MonoBehaviour
{
    public Text targetTxt;
    private int hitCount = 0;

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag == "Egg")
        {
            hitCount++;
            targetTxt.text = hitCount.ToString();
            Destroy(other.gameObject);  //ぶつかってきたオブジェクトを削除
        }
    }
}

動作確認します。

Eggタグがついていないオブジェクトでは動作しないことを確認します。

型 void OnTriggerEnter2D(Collider2D other)

インスペクターを確認すると、Colliderの中にIs Triggerという項目があります。

これにチェックをいれると物体を通過するようになります。
チェックポイントのように、判定はさせたいけど通過できるようにしたい場合にチェックを入れます。

卵の時と同様、Bombタグをつけていきます。
Tags の+から Bombタグを作成。

Bombタグを選択します。

TriggerがついたBombタグが当たった時の処理を追加します。
記述には注意が必要で、is Triggerにチェックがついているときは、
OnTriggerEnter2D と記載します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class HIt : MonoBehaviour
{
    public Text targetTxt;
    private int hitCount = 0;

    //爆弾用に追加
    public Text bombTxt;
    private int bombHitCount = 0;

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.gameObject.tag == "Egg")
        {
            hitCount++;
            targetTxt.text = hitCount.ToString();
            Destroy(other.gameObject);
        }
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if(other.gameObject.tag == "Bomb")
        {
            bombHitCount++;
            bombTxt.text = bombHitCount.ToString();
        }
    }
}

Is Triggerのついた爆弾は通過して処理されます。

コメント

タイトルとURLをコピーしました