Instead of using time, I used a slightly more elaborated approach
-
I created a Cube called “TrapTrigger”, removed its Mesh Renderer component, kept the Box Collider one and checked the isTrigger property
-
Duplicated Obstacle prefab and positioned it right above “TrapTrigger” (see above)
-
I attached to “TrapTrigger” this script that fires when the user enters “TrapTrigger” (
OnEnterTrigger
), awaits one second and then, bam! Gravity is applied.
Now the player has to be ready to avoid it in order not to get hit:
public class TriggerTrap : MonoBehaviour
{
MeshRenderer obstacle;
Rigidbody obstacleRigidbody;
[SerializeField] float timeToWait = 1f;
void Start()
{
obstacle = GetComponentInChildren<MeshRenderer>();
obstacleRigidbody = GetComponentInChildren<Rigidbody>();
obstacle.enabled = false;
obstacleRigidbody.useGravity = false;
}
private void OnTriggerEnter(Collider other)
{
Debug.Log("entered trigger");
if (Time.time > timeToWait)
{
obstacle.enabled = true;
obstacleRigidbody.useGravity = true;
}
}
}