- Home /
How to start at a specific coroutine?
I'm not entirely sure I'm understanding the coroutine business completely. I'm trying to write a simulator where an animal starts at a house, and leaves the house in search of food. If he touches food, he then must return back home. Unfortunately, I cannot manage to get this animal to return back home. This is the code I have so far
var speed = 1.0;
var home : Transform;
function Start() {
home = transform;
routine(transform);
}
function routine(transform) {
while (true) {
var curPos = transform.position;
var sTime = Time.time;
var jLength = Vector3.Distance(curPos, home.position);
yield move(transform, curPos, home.position, sTime, jLength);
var meat = GameObject.Find("Meat");
var pointB = meat.transform.position;
sTime = Time.time;
jLength = Vector3.Distance(home.position, pointB);
print (home.position);
yield move(transform, home.position, pointB, sTime, jLength);
sTime = Time.time;
jLength = Vector3.Distance(pointB, home.position);
yield move(transform, pointB, home.position, sTime, jLength);
}
}
function OnTriggerEnter(col : Collider) {
if (col.gameObject.name == "Meat") {
print ("Touched meat!");
StopAllCoroutines();
routine(transform);
}
}
function move(thisTrans, startPos, endPos, startTime, journeyLength) {
while (thisTrans.position != endPos) {
var distCovered = (Time.time - startTime) * speed;
var fracJourney = distCovered / journeyLength;
thisTrans.position = Vector3.Lerp(startPos, endPos, fracJourney);
yield;
}
}
I'm probably not doing this correctly at all.
Generally speaking you wouldn't use coroutines for something like this in a game. If you gave the animal a state (seeking-food, returning-home, etc.) then code it to act on that state in the Update() in its script you'd have an easier time if it. $$anonymous$$ore over it could be expanded more easily to handle interruptions (attack player, rest, etc.).
Your answer
Follow this Question
Related Questions
How to make a 2D object move smoothly in a random direction for a set amount of time. 2 Answers
Can you end a coroutine from outside of that coroutine? 2 Answers
Coroutine's yield differences. 1 Answer
Coroutine sequence not running properly 1 Answer
Game NPC "Guide" Movement (Much like Navi from Zelda) 1 Answer