OnCollisionStay and Time.deltaTime?
I want to do this: The player enter on a BoxCollider (Trigger) and while stay there for 2 seconds will won the level. I should use OnCollisionStay or OnTriggerEenter, and Time.detaTime? I really don't know what is the appropiate way.
Answer by NoseKills · Aug 22, 2015 at 01:56 AM
All of the OnCollisionXXX() methods get triggered by the physics engine with the same interval as FixedUpdate()
gets called. So which ever way you do it you should use FixedUpdate()
and Time.fixedTime
to increment your time variable.
If the contact gets broken up before the time limit, you have to detect that in the OnCollisionExit()
anyways, so it might be easier to use the Enter() and Exit() methods.
I haven't tested at what time exactly each of the Trigger methods get called (do Enter() and the first Stay() happen in the same FixedUpdate() or one after the other ? Same with the last Stay() an Exit() ? ) But with the default Time.fixedTime of 0.02 seconds.. there's a maximum of 0.04 second difference between the methods you propose. Probably doesn't matter much in that sense.
Answer by luislodosm · May 18, 2018 at 08:32 PM
public float necessaryTime = 2f;
float elapsed;
void OnTriggerStay(Collider other)
{
if (other.tag == "Player")
{
elapsed += Time.fixedDeltaTime;
if (elapsed > necessaryTime)
{
WinLevel();
}
}
}
void OnTriggerExit(Collider2D other)
{
if (other.tag == "Player")
{
elapsed = 0;
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612000942im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
How to get "on trigger enter"( or exit) to only react to a specific tag 1 Answer
OnTriggerEnter2D not working 1 Answer
Javascript error on runtime semi colon required 1 Answer
How to let someone win in a racing game 0 Answers
Trigger detects player collision and play specific audio from array 1 Answer