@LouisIngenthron So the reference to "once per frame" here means once per "physics frame"?
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionStay.html
@peterdrake @LouisIngenthron It means once per FixedUpdate, i.e. every Time.fixedDeltaTime. See this handy diagram:
@peterdrake FixedUpdate can still skip executions (="frames", I guess?) if the machine is too slow, but it keeps the simulation accuracy more or less constant when the hardware can handle it. Doing physics on Update could theoretically cause expensive calculations to be done up to 20 fps with tiny deltas and even worse, huge jumps if the framerate drops.
@markuslatvala On a related note, I heard about an old console racing game that was ported to Windows. The physics was locked to the framerate, which was fine when all the consoles were identical -- but people with fast PCs found the game unplayable.
@peterdrake No, to the best of my knowledge, collisions are detected during the FixedUpdate cycle.