- Home /
Delay gameplay and show text:
Hey there! Im currently working on a game where I basicly have a main character running away from a policeman.Im having trouble with it because as soon as the game starts the policeman starts following him and it doesnt give the player time to prepare himself, so I would like to delay that for a few seconds, and maybe show a text on the screen with a countdown( 3,2,1, go!) and the game not being able to start until that has been shown. this is the script I used for the policeman:
var enemy: Transform; var player: GameObject; var dir: Vector3; var speed: float; var observed: boolean;
function Update () { if (observed) { dir = player.transform.position - transform.position; dir = dir.normalized;
transform.Translate(dir * speed, Space.World); } else { transform.eulerAngles.y = Mathf.PingPong(/Time.time/20,90) -45;
}
} function OnTriggerEnter(other: Collider){ if(player) observed = true; }
Answer by Seregon · Apr 23, 2011 at 09:46 AM
To wait a certain amount of time for an event you will want to use a coroutine (see StartCoroutine reference). These allow you to delay execution of code or run it over multiple frames.
var started : boolean = false;
function Start() { StartCoroutine(WaitToStart()); }
function WaitToStart() { yield WaitForSeconds(3.0f); started = true; }
function Update() { if(observed && started) { // follow player } }
If you wanted to display this countdown timer to the player, you could modify the coroutine WaitForSeconds to update a status message as it counts down:
var startStatus : string;
function WaitToStart()
{
startStatus = "3";
yield WaitForSeconds(1.0f);
startStatus = "2";
yield WaitForSeconds(1.0f);
startStatus = "1";
yield WaitForSeconds(1.0f);
startStatus = "GO!";
started = true;
}
Answer by Tommy · Apr 23, 2011 at 09:35 AM
yield WaitForSeconds(3)
//run forest, run!
Wait for 3 seconds, than make the police run.
You can't call yield inside a Update() function, since then it would wait 3 seconds every frame. Well you CAN, if you put yield inside a function, then call the function in Update();.
var enemy: Transform; var player: GameObject; var dir: Vector3; var speed: float; var observed: boolean; var showMoreGUI = true;
if (showMoreGUI == true) { function OnGUI() { //message } }
yield WaitForSeconds(3)
function Update () { shoeMoreGUI = false; if (observed) { dir = player.transform.position - transform.position; dir = dir.normalized;
transform.Translate(dir * speed, Space.World); } else { transform.eulerAngles.y = Mathf.PingPong(/Time.time/20,90) -45;
}
} function OnTriggerEnter(other: Collider){ if(player) observed = true; }
...Maybe.
Your answer
Follow this Question
Related Questions
show text to start playing 1 Answer
Unity hangs on start when finding gameobject 0 Answers
How to enable object after delay ? 2 Answers
I'm having trouble with a coroutine delay 2 Answers
Display GUI Text after delay ? 1 Answer