これはもともと Unity の「Unity Answers」に関する投稿でしたが、モデレーターが承認に時間を費やしているため、はるかに優れたスタック オーバーフローの声援にここに投稿します...これは Unity エンジンの問題であることを覚えておいてくださいC# スクリプト...明らかに...
そこで、特定の 2D トリガー コライダーに接触するすべての 2D コライダーを追跡するための簡単なスクリプトを作成しようとしています。他のスクリプトが他のことを行うためにアクセスできる現在のフレームの 2D コライダーに触れていたすべての 2D コライダーの一般的なパブリック 2D コライダー リストを維持することになっています。私はいくつかの実装を試しましたが、イベントの順序が原因で unity が物事を実行することがわかりました。センサー スクリプトのコライダ リストを使用する他のスクリプトは、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」は更新時に設定するだけで同じように機能するようですが、別のことを試していたので、現在更新が遅れています。とにかく、リストには衝突するはずのコライダーが欠けていることがよくありますが、いくつかのコライダーがあります。はい、センサーとセンシーのコライダーは、物理 2D プロジェクト設定で衝突するように設定されています。私はおそらくそれを言及する必要があります。誰でも知っているかもしれない洞察をいただければ幸いです。申し訳ありませんが冗長です。ありがとう。