反応しないOnTriggerStay

小ネタ
というかUnityの仕様です。
OnTriggerStay(2D)のほか、OnCollisionStay(2D)も該当するようです。私が該当したのはTriggerのほうでした。

OnTriggerStay(2D)は使っていますか?
ざっと見た感じ、OnTrigger属性を有効にしたCollisionに接し続けている間、毎フレーム反応してくれそうです。

でも実際には1秒もせずに反応が止まります。

理由は単純で、0.5秒で止まるようになっているから。(止まるのはRigidBodyだけのように読めるが?)

この設定が存在するのは、過負荷対策だと思います。
とはいえ、説明には何も書いてないようです。
https://docs.unity3d.com/ja/2020.3/ScriptReference/Collider.OnTriggerStay.html

対策は複数あります。
が、あまり選択肢はないように思えます。

  • 設定のTime to Sleepを長くする
    この方法は無駄な負荷が増えるので悪そうです。
  • RigidBodyをNeverSleepにする
    影響するのがPlayerだけとかなら簡単な対策になります。
    ただ特殊エリアが敵にも影響する場合など、多数の対象に設定するなら同じく無意味な負荷が発生します。
  • OnTriggerEnterとOnTriggerExitで何とかする
    期待通り動かなければ使わなきゃ良いじゃない精神。
    単純にスクリプト側で接触中の相手を保持します。
    Time To Sleepの条件を満たしても、FixedUpdateは動いているので、後はそちらで計算するだけです。
    相対的にコレで良いんじゃないかな?

今回はUnityの仕様から来る小ネタでした。
記事にして改めて思いますが、本当にこれ意図した挙動なんでしょうか?