I agree with you. It is very unlikely that the game window lags for 30 seconds after you set the delay to 30 seconds, and lags 1 second if you set the delay to 1 second.
Sorry but i don’t get why it shouldn’t work in start
Because, normally, “C#” does not wait. The rule is: Method code blocks gets executed line by line. The only exception is an IEnumerator method, which is a special method. According to the API, it is possible to define the Start method as a coroutine, which would allow us to implement a delay. You didn’t do that, yet the Start method seems to be executed with a delay. Maybe it already is a coroutine.
I would add this to Start:
Debug.Log(Time.frameCount + " --- Before StartCoroutine.");
StartCoroutine(Wait());
Debug.Log(Time.frameCount + " --- After StartCoroutine.");
If the frame count value is the same, the Start method did not wait unless the game got somehow paused, which made the frame 30 seconds long.
If the frame count is not the same, you were right, and the Start method did wait.