0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Unity]Rigidbodyが複数のTrigger範囲内に同時に入った場合のOnTriggerEnter2D()の動作

Posted at

確認したいこと

Rigidbody+Colliderを持つオブジェクト(A)が、トリガー化したColliderを持つ複数のオブジェクト(B,C)の範囲内に"同時に"入ったとき、AのOnTriggerEnter2D(Collider2D)に渡されるB,Cの順番を確認したい。

例えば、大きめの弾丸が複数の敵に同時ヒットしたケースや、長い剣が盾と肉体に同時に突き刺さったケースで、この仕様が気になってくるのかなと。

結局わかったこと

試行のたびに、AのOnTriggerEnter(Collider2D)に渡されるB,Cの順番が変わる。ただし完全にランダムな順番ではなく、何らかの法則はある様子。

確認のために用意したプロジェクト

Unityのバージョン:2022.3.15f1

「白い円」と「赤い円」と「青い円」を用意。

  • 白い円
    前述のオブジェクトAに相当。Rigidbody+Collider。
  • 赤い円
    前述のオブジェクトBに相当。トリガー化したCollider。タグはRed、レイヤーはDefault。
  • 青い円
    前述のオブジェクトCに相当。トリガー化したCollider。タグはBlue、レイヤーはDefault。

image.png

スペースキーを押下すると赤い円と青い円のColliderの有効/無効が切り替わり、有効化のタイミングで白い円のOnTriggerEnter2D()が呼ばれる...というスクリプトを作成した。

赤い円のスクリプトは下記の通り。青い円も同様。

BlueScript.cs
	private CircleCollider2D circleCollider;

	void Awake()
	{
		circleCollider = GetComponent<CircleCollider2D>();
		circleCollider.enabled = false;
	}

	void Update()
	{
		if (Input.GetKeyDown(KeyCode.Space))
		{
			circleCollider.enabled = circleCollider.enabled ? false : true;
			Debug.Log("Blue Trigger : "+ circleCollider.enabled);
		}
	}

白い円のスクリプトは下記の通り。

WhiteScript.cs
public class WhiteCircle : MonoBehaviour
{
	private void OnTriggerEnter2D(Collider2D collision)
	{
		if (collision.gameObject.CompareTag("Blue"))
		{
			Debug.Log("BLUE!");
		}
		if (collision.gameObject.CompareTag("Red"))
		{
			Debug.Log("RED...");
		}
	}
}

結果

上記のプロジェクトを実行し、スペースキーを何度か押した。そして、白い円のOnTriggerEnter2D()に渡されるオブジェクトが赤、青どちらが先なのかを記録した。

1回目:青い円が先
2回目:赤い円が先
3回目:青い円が先
4回目:赤い円が先
5回目:青い円が先
6回目:赤い円が先
...

image.png

32回試したが、青い円が先のケースと赤い円が先のケースが交互に発生した。
→つまり、試行のたびに、AのOnTriggerEnter(Collider2D)に渡されるB,Cの順番が変わる。ただし何らかの法則はある様子。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?