- Home /
Return Enemy To Start Position
I have a basic script for an enemy to chase a player when the player gets near him. When the player "escapes" the enemy I would like the enemy to return to it's starting position.
I am having a little trouble storing the initial enemy starting position and getting the enemy to return there. The enemy successfully follows the player and stops following when the player gets too far away. But when the enemy is supposed to return to his start position I get an error.
Here is the relevant code (the game is top down view):
var myTransform : Transform; //current transform data of this object private var startPosition;
function Start() { startPosition = transform.position; //store the start position }
function ReturnToPosition() { //rotate to look at the start position myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(startPosition.position - myTransform.position),rotationSpeed*Time.deltaTime);
//move back to start position
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
I have ommitted any code that isn't relevant. I also did a debug to check that ReturnPosition() was being run and it is.
The error I get is:
MissingFieldException: Field 'UnityEngine.Vector3.position' not found.
Thanks for taking a look.
Answer by Bob5602 · Feb 07, 2011 at 05:43 PM
Looks like the error comes from this line :
startPosition = transform.position; //store the start position
Because you're storing your startPosition variable as a Vector3 (transform.position) and then later you're referencing it as startPosition.position. That means what you're really calling is transform.position.position.
I would change your startPosition variable so its declared as something, so do
private var startPosition : Vector3;
then use your startPosition = transform.position
And then in the code, instead of using startPosition.position, just do startPosition.
should do the trick, and cut down some processing time by declaring the variable as an actual type.
Just another quick note, I noticed your code defines a myTransform : transform. I presume you're using something in the update function to set myTransform = transform each frame. If its all within the same object you can just as easily use transform.position ins$$anonymous$$d of declaring a myTransform and using myTransform.position. Not really a big deal but if you have a lot of objects it can save you some processing power.
Your answer
Follow this Question
Related Questions
How to Return Enemy to startPosition 1 Answer
If gameobject moves do this 1 Answer
Enemy position transform 1 Answer
transform.position error 2 Answers
transporting player to gameobject when it collides with different gameobject 0 Answers