▼そのUnityの作業、依頼しませんか?
エラー・つまずき

【Unity】Is Triggerのチェックは両方につけるべきなの?いいえ片方でも結構です(Triggerモード)

  • UnityでTriggerモード(すり抜ける)タイプの当たり判定を作りたい
  • 衝突するオブジェクト両方に【Is Trigger】ってチェック(true)すべきなの?

その悩みを解決します。

結論として片方だけでも良いです。

両方の【Is Trigger】にチェックを外すのはダメです。Collision系のメソッド【OnCollisionEnter】とかしか使えなくなります。

2Dでも3Dでも同じです。

【Is Trigger】のチェックは片方だけでも良い

【Is Trigger】のチェックは片方だけでも良い

●Is Triggerにチェックをつける方法

【オブジェクト選択】→【Inspector】→【〇〇 Collider】→【Is Trigger】→【チェック】

最初に述べた通りにTrigger系のメソッドを実行させたい場合は、衝突するオブジェクトの片方の【Is Trigger】にチェックがついていればOKです。

正確な言い方だと、最低限一方のオブジェクトの【Is Trigger】にチェックがついていればOKです。

どちらもついていない状態だとTrigger系のメソッドを使うことができません。

Triggerモードを使う条件

  • 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方にRigidbody(またはRigidbody2D)コンポーネントがアタッチされている
  • 判定したいオブジェクトの最低限一方のColliderの【Is Trigger】がtrue(チェックあり)である

Trigger系のメソッドを使いたい場合はこの条件を満たしてないといけません( ・∇・)

ここから下は実験です。興味がある方はご覧ください。

実験

【Is Trigger】のチェックは片方だけでも良いのか実験

爆弾
アタッチされてるもの 【Circle Collider2D】【Rigidbody 2D】

プレイヤー(緑のやつ)
アタッチされてるもの 【Box Collider 2D】【PlayerControllerスクリプト(当然名前はなんでも良き)】

PlayerController.cs

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

public class PlayerController : MonoBehaviour {

    void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("miya");
    }
}

スクリプトにはオブジェクトと接触した瞬間に、「miya」とコンソールに表示されるようにしてます。

この状態で実験を行います。

【Is Trigger】のチェックが両方ついていないvar

【Is Trigger】のチェックが両方ついていないvar

はいふざけてます。なにも起こりません。

【Is Trigger】のチェックがスクリプトがアタッチされている方のみにチェックされているvar

【Is Trigger】のチェックがスクリプトがアタッチされている方のみにチェックされているvar

プレイヤーだけの【Is Trigger】にチェックがついている状態です。メソッドが実行されています。

【Is Trigger】のチェックがスクリプトがアタッチされていない方のみにチェックされているvar

【Is Trigger】のチェックがスクリプトがアタッチされていない方のみにチェックされているvar

爆弾のだけの【Is Trigger】にチェックがついている状態です。メソッドが実行されています。

【Is Trigger】のチェックが両方ついていないvar

【Is Trigger】のチェックが両方ついていないvar

爆弾とプレイヤーの【Is Trigger】にチェックがついている状態です。メソッドが実行されています。

Trigger系のメソッド

どうぞ。

2Dで使えるメソッド

OnTriggerEnter2Dトリガーに接触したときに呼び出される
OnTriggerStay2Dトリガーに接触している間呼び出される
OnTriggerExit2Dトリガーに接触して、離れた瞬間に呼び出される

これらです。

まあトリガーっていってますけど、オブジェクト同士が接触したときって発想で良いです。厳密には違いますが、わかりやすい方が良いもんね。

3Dで使えるメソッド

OnTriggerEnterトリガーに接触したときに呼び出される
OnTriggerStayトリガーに接触している間、呼び出される
OnTriggerExitトリガーに接触して、離れた瞬間に呼び出される

これらです。

まとめ

  • Trigger系のメソッドを使うときは衝突するオブジェクトの最低限一方の【Is Trigger】がチェックあり(true)であれば良い

こんな記事もあります。

T当たり判定のトリガーの使い方
【Unity】当たり判定【Trigger(トリガー)】モードの設定方法、メソッドの使い方「Trigger(トリガー)を使った当たり判定の使い方を知りたい」その悩みを解決します。この記事では「triggerモードの説明」、「Triggerモードを使う条件」「Trigger系のメソッドの使い方、説明」この3つを行います。...

さぎのみや(@saginomiya8)でした。SNSでシェアしてね( ・∇・) 一生無双モードで頑張る。

ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるサンプルゲームとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要

>>BOOTHでこのチュートリアルを見る

【RT・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

であなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください