Talk:CoUpdate
From Unify Community Wiki
There's alot of problems with the example code, and the idea of starting 2 coroutines is kind of overkill heres your example but utilizing built in features of unity.
<javascript>// CoUpdate usage example. // Assumes an Animation is used.
- pragma strict
@script RequireComponent(Animation)
// Changing start to return IEnumerator allows you to do yield statements. function Start() : IEnumerator {
// do start work here.
// this is the update loop. called untill the object is destroyed.
do {
yield return StartCoroutine( CoUpdate() );
yield return WaitForEndOfFrame();// let the frame advance.
} while(true);
}
/* Not needed function CoStart() : IEnumerator {
while (true)
yield CoUpdate();
}*/
function CoUpdate() : IEnumerator {
// Notice how easily we can taunt
// and render movement disabled
// for the duration since Taunt is
// a Coroutine.
if (Input.GetKey(KeyCode.G))
yield StartCoroutine( Taunt() );// this should use StartCoroutine unless Taunt returned a YieldStatement which it really should/could for what its doing now.
Move();
}
function Taunt() : IEnumerator {
animation.Play(animation.clip.name); yield WaitForSeconds(animation.clip.length);
}
function Move() {
if (Input.GetKey(KeyCode.LeftArrow))
Move(Vector3.left);
if (Input.GetKey(KeyCode.RightArrow))
Move(Vector3.right);
if (Input.GetKey(KeyCode.UpArrow))
Move(Vector3.forward);
if (Input.GetKey(KeyCode.DownArrow))
Move(Vector3.back);
}
function Move(direction : Vector3) {
transform.Translate(direction * Time.deltaTime, Space.Self);
}</javascript>
Really though, the whole idea of CoUpdate can be accomplished by using Start(): IEnumerator and in the never ending loop just yield WaitForEndOfFrame.