8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unity2D:衝突処理をTagで管理する

Posted at

#はじめに
UnityのTagを使うと処理の管理がわかりやすくなると思ったので記事を書くことにしました。
Unityの衝突処理はOnColliderを使う方法とOnTriggerを使う2通りの方法がありますが、
この記事ではTriggerを使った方法で解説します。
#OnTriggerについて
Unity スクリプトリファレンス
(https://docs.unity3d.com/jp/540/ScriptReference/Collider2D.OnTriggerEnter2D.html)
OnTriggerについてはここが詳しく説明してくださっています。
(http://seesaawiki.jp/app/d/%BE%D7%C6%CD%C8%BD%C4%EA%28Trigger%29)

BoxColliderコンポーネントのIs Triggerをオンにしたオブジェクトは、他のオブジェクトに衝突しても影響を受けないので(Triggerオブジェクト専用のイベントが起こる)、特定のものに衝突したときのみ働く処理を書くときに有効です。

#Tagを使って衝突後の処理を管理する
今回は"Wall"タグのついたオブジェクトにあたったときのみ消失し、他のオブジェクトは貫通する弾を作りたいと思います。

弾のオブジェクトに下のようにコンポーネントを設定します。
Is Triggerのチェックを入れるようにしてください。
弾の速度によってはCollision DetectionをDiscreteにしてもOKです。
2017-12-16.png

弾には以下のようなスクリプトをアタッチします。

Bullet.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.tag == "Wall")
        {
            Destroy(gameObject);
        }
    }

OnTriggerEnter2Dメソッドは、他のオブジェクトに接触した時に呼び出されます。
引数で渡されるcolには、スクリプトをアタッチしたオブジェクトに衝突したオブジェクトが入ります。

次に貫通させたくないものの設定です
"Wall"タグとBoxCollider2Dを付けます。Is TriggerのチェックはどちらでもOKです。

2017-12-16 (2).png

以上のように設定すれば、Wallタグが付いたオブジェクト以外は貫通する弾が出来ると思います。

同じ処理を行いたいものがたくさんあり、いちいちタグ付けするのが面倒なときなどはこのサイトのようなスクリプトを書けば、親オブジェクトのタグのみを変え、他は子オブジェクトにするようなことも出来ると思います。

#参考
http://freiheitp.hatenablog.com/entry/2014/10/28/014511
http://0310unity.hateblo.jp/entry/collision_detection_1

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?