これはもともとユニティの「統一解答」のポストだったが、司会者はそれを承認する甘い時間を取っているので、ここでは上位のスタックオーバーフローで掲示している。応援 ...これはC#スクリプトのUnityエンジンの問題です...明らかに...ユニティシンプルな2Dコライダーセンサースクリプトイベントの注文
私は、特定の2Dに触れるすべての2Dコライダーを追跡する簡単なスクリプトを作成しようとしていますトリガーコライダー。それは、他のスクリプトを使ってアクセスできる現在のフレームを2Dコライダーに触れていたすべての2Dコライダーの一般的な公開2Dコライダーリストを維持することになっています。私はいくつかの実装を試してみましたが、イベントの順番のために統一性があることが分かりました。センサースクリプトのコライダーリストを使用している他のスクリプトは、それらのupdate()中にリストにアクセスするだけで、論理的にはその時にリストが適切に設定されているように見えますが、明らかにそうではないので間違っていなければなりません。ここに私の最も最近の、そして最高の試みがあります、誰かが私が間違っていると私に言うことができますか?
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SimpleColliderSensor : MonoBehaviour {
public bool repeatsallowed;
public List<Collider2D> sensedobjs;
bool clearlist;
public void init()
{
clearlist = false;
repeatsallowed = false;
sensedobjs = new List<Collider2D>();
}
void FixedUpdate()
{
}
void Update()
{
}
void LateUpdate()
{
clearlist = true;
}
void OnTriggerEnter2D(Collider2D c)
{
OnTriggerStay2D(c);
}
void OnTriggerStay2D(Collider2D c)
{
if (clearlist)
{
sensedobjs.Clear();
clearlist = false;
}
if (repeatsallowed)
{
sensedobjs.Add(c);
}
else
{
if (!sensedobjs.Contains(c))
{
sensedobjs.Add(c);
}
}
}
void OnCollisionStay2D(Collision2D c)
{
OnTriggerStay2D(c.collider);
}
void OnCollisionEnter2D(Collision2D c)
{
OnTriggerStay2D(c.collider);
}
}
それだけで設定することができ、「clearlistを」らしい(...私はそうとにかくだと思う...その部分は私が求めているものには無関係である、唯一の新しいコライダーが追加されていることを確認することもBOOLあります)それは同じように動作するだろうが、私は別のものを試していたので、今は遅刻している。とにかく、リストには衝突するはずのコライダーがないことがよくありますが、コライダーがいくつかあります。そして、物理と2Dのプロジェクト設定でセンサーとセンスの衝突が衝突するように設定されています。私はおそらくそれを言及すべきである。私は誰もが持つ可能性のある洞察に感謝します。申し訳ありませんが冗長です。ありがとう。