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;
}
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;
}
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;
}