OnTriggerStay単体では「呼ばれていない」を検出できない
OnTriggerStay は「自分のコライダーに別のコライダーが重なっている間に発動し続ける」ものです。
では、「OnTriggerStay が呼ばれていないとき」を検出するにはどうすればいいでしょう?
まず思いつくのは OnTriggerExit ですが、
OnTriggerExit は「自分のコライダーから別のコライダーが出ていった時に発動する」ものなので、
例えばプレイヤーのコライダーに2体の敵コライダーが重なっていた場合、2体のうち1体が離れた時点で 、OnTriggerStay が呼ばれている最中にも関わらず OnTriggerExit が呼ばれてしまいます。
結論をいうと、OnTriggerStayは「呼ばれた時に発動するメソッド」なので、それ単体では呼ばれていないことを検出することはできません。そのため、
void OnTriggerStay2D(Collider2D collider)
{
if(collider == null)
{
なんちゃらかんちゃら
}
}
みたいに書いてもダメです。そもそも呼ばれないから。
解決方法
※私が作ってるのは2DゲームなのでOnTriggerStay2Dになってますが、2DじゃないOnTriggerStayでも一緒だと思います。
float f = 0;
bool isStay; //ステイが呼ばれてるかどうか
void Update()
{
IsTriggerStay();
}
void OnTriggerStay2D(Collider2D Collider)
{
stayCheckCounter += Time.deltaTime; //呼ばれたらカウンターを進める
}
void IsTriggerStay()
{
if (f != stayCheckCounter) //カウンターが進んでいるとき
{
isStay = true; //ステイが呼ばれてるよ
f = stayCheckCounter;
}
else if(f == stayCheckCounter) //カウンターが進んでいないとき
{
isStay = false; //呼ばれてないね
}
}
これが最適解かはわからないけど、動くからいいや…。