うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】OnTriggerStay の呼び出し頻度

以前 OnTriggerStay で一定時間 特定の範囲にいる際に処理をしたくて
以下のコードを書いていたのですが、想定した挙動にならなかった

public class SampleMonoBehaviour : MonoBehaviour
{
    [SerializeField]
    private float _targetTime;

    private float _time;

    private void Start()
    {
        _time = 0;
    }

    private void OnTriggerStay(Collider other)
    {
        _time += Time.deltaTime;
        if (_time >= _targetTime)
        {
            // 時間になったらする処理
            _time -= _targetTime;
        }
    }
}

それもそのはずで物理演算の処理内では固定フレームなので Time.deltaTime ではなく Time.fixedDeltaTime を呼ぶ必要がありました

固定フレームかどうか知るには Time.inFixedTimeStep を利用すれば分かるので
挙動がおかしいと思ったら今後はこれを利用して判定を行えばバグに気づきやすくなると思います