【Unity, Collision, Trigger】衝突したオブジェクトを破壊する「OnCollisionEnter」「OnTriggerEnter」

投稿者: | 2018年11月25日

フィア
今回は「Colliderを使った衝突判定」を使ってみるよ 
カレン
衝突したオブジェクトをDestroy してあげれば、

着弾処理や衝突処理なんかを行えるわよ

フィア
そのほかにも、ゴール地点やワープ地点なんかの処理もできるよ
カレン
すごく汎用性の高い内容だから、ゆっくりしていってね!

 

スポンサーリンク

 

 

目次

 

 

Collisionを使った衝突判定

CollisionはColliderコンポーネントをアタッチしているオブジェクトと接触した時に処理を行います。

void OnCollisionEnter(Collision collision){}のように記入してください。

 

注意点ですが、OnTriggerEnterの引数は「Collider型」でしたが、

OnCollisionEnterでは「Collision型」を引数に使用してください。

 

内部でFixedUpdate()の処理を行っているので、

Update()などの関数に入れなくても、連続して処理を行ってくれます。

 

使用するには、衝突する方かされる方のどちらかに「Rigidbody」をアタッチする必要があります

 

今回は以下のように、Cubeに「Rigidbody」と「Script」をアタッチして、

Sphere へぶつけてみます。

 

 

Collision系の関数

Collision系の関数には以下の3種類があります。

  • OnCollisionEnter:接触した瞬間に実行

  • OnCollisionStay:接触中に実行

  • OnCollisionExit:接触から離れたときに実行

 

以下のコードを記入して、Cubeにアタッチしてください。

 

また、衝突する方とされる方、少なくともどちらかにRigidbodyをアタッチしてください。

 

 

 

衝突した方のオブジェクトを破壊する

今回は接触した瞬間にオブジェクトを破壊するスクリプトを作成します。

 

OnCollisionEnter(Collision collision)内のメソッドに、

Debug.Log(“衝突したオブジェクト:” + gameObject.name);

Debug.Log(“衝突されたオブジェクト:” + collision.gameObject.name);

と記入しました。

 

「gameObject.name」で、スクリプトをアタッチしたオブジェクトの名前を取得します。

 

引数のcollisionは、衝突された方のcollisionを指しているので、

「collision.gameObject.name」で、衝突された方のオブジェクトの名前を取得します。

 

これを利用して、Destroy(gameObject);で衝突したオブジェクトをヒエラルキーから排除できます。

 

 

衝突された方のオブジェクトを破壊する

逆に、Destroy(collision.gameObject);で衝突された方のオブジェクトをヒエラルキーから排除できます

 

これらを応用すれば、gameObjectの後ろに「.GetComponent」や「.translate」などをつければ、

様々な関数を利用できます。

 

 

Triggerを使った衝突判定

TriggerはColliderコンポーネントをアタッチしているオブジェクトと接触した時に処理を行います。

void OnTriggerEnter(Collider collision){}のように記入してください。

 

Collision系と違う点は、衝突したオブジェクトがコライダーを貫通する点です。

なので、ワープポイントやゴール地点などに使用します。

 

注意点ですが、OnCollisionEnterの引数は「Collision型」でしたが、

OnTriggerEnterでは「Collider型」を引数に使用してください。

 

次に、ゴール地点にしたい方のColliderコンポーネントの「Is Trigger」にチェックを入れてください

 

今回は Sphere の「Is Trigger」にチェックを入れて、Cube を貫通させます。

 

 

Trigger系の関数

Trigger系の関数には以下の3種類があります。

  • OnTriggerEnter:接触した瞬間に実行

  • OnTriggerStay:接触中に実行

  • OnTriggerExit:接触から離れたときに実行

 

以下のコードを記入して、Cubeにアタッチしてください。

 

また、衝突する方とされる方、少なくともどちらかにRigidbodyをアタッチしてください。

 

これを実行すると、Cube が Sphere を貫通しながら衝突処理を行います。

 

 

終わりに

フィア
コライダーを使うと、かなりゲームっぽくなるよね!
カレン
CollisionとかColliderとか、ややこしい部分もあるけど、

基本コピペして書き換えればいいからね

フィア
是非使ってみてね!

 

 

忙しい人のためのUnity入門講座へ

 

すくまりゲームズの人気記事