以前 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
を利用すれば分かるので
挙動がおかしいと思ったら今後はこれを利用して判定を行えばバグに気づきやすくなると思います