x


Prefabs Transforms LookAt

I have a Strange thing going on and need a solution if anyone knows?

I have a Enemy who's AI "Looks At" my Players Transform which is a variable in the Inspector (var Player : Transform).

If I drag and drop my Player from the Scene View onto the Player variable (for LookAt) everything works fine and the enemy is always going after my Player.

Heres the Problem:

If I instantiate the Enemy at runtime it wont remember or hold my players Transform, So Im thinking I need to add my players Prefab in the Inspector so I did.

If I drag my Players Prefab onto the var Player (for LookAt) the Enemy will go to where the players prefab was and not go after my player???

I need use the Players Prefab because when I instantiate the Enemy its the only way for it to Hold My Players Transform.

Ahh.. this is confusing anyone ever run into this problem? and would anyone know how I would solve this?

Im thinking the Players Prefab needs to be updated for the Enemy to know where I am know but I have no idea how to go about this or this may not be the right solution. Here's my Code Im hoping someone can help me sort this out?

var awareDistance : float = 15.0; var scaredDistance : float = 10.0; var player : Transform;

var runSpeed : float = 4.0;

enum AIStatus {Idle = 0, Scared = 1} private var status = AIStatus.Idle; //by default

var controller : CharacterController;

private var moveDirection = Vector3.zero;

//function Start loop animations function Start() { //set all animations to loop animation.wrapMode = WrapMode.Loop;
}

function Awake() { //maybe replace character controller with box collider & rigidBody for gravity controller = GetComponent(CharacterController); }

function Update() {

CheckStatus();

switch(status)
{
    case AIStatus.Idle:
    Idle();
    break;

    case AIStatus.Scared:
    RunAway();
    break;
}   

}

function Idle() { animation.CrossFade ("idle2");
}

function RunAway() { //transform.eulerAngles.y = -player.transform.eulerAngles.y; //gets thier rotation from mine

// give enemy thier own rotation
transform.LookAt(player.transform);

//to make them run the other way add 180 degrees 
//transform.eulerAngles.y += 180;

moveDirection = Vector3(0,0,40); //help our robot know hich way to go create a float variable to test it.
moveDirection = transform.TransformDirection(moveDirection); //converst it to worldSpace
moveDirection *= runSpeed; //times 4.0 above
controller.SimpleMove(moveDirection * Time.deltaTime); // moves our enemy
animation.CrossFade ("relax_walk1"); //and plays the run animation  

}

function CheckStatus() { //player.position is what ever enemy I drag into the player varable above in the inspector var dist = (player.position - transform.position).magnitude; //returns the length for dist

if (dist < scaredDistance)
{
    status = AIStatus.Scared;   
}   
else if (dist > awareDistance)
{
    status = AIStatus.Idle; 
}

}

more ▼

asked Dec 11 '10 at 07:08 PM

Me gravatar image

Me
16 2 2 2

Wowowow I finally figured it out one little line of code drove me nuts but here it is and it has to be in the start function.

player = GameObject.FindWithTag("myrobot").transform;

Dec 12 '10 at 03:05 AM Me

Yup. So either 'answer' it yourself or delete the question to clean up the list. Thanks

Jan 13 '11 at 11:04 PM DaveA

Thanks I was having the same problem and this solved it TY!

Jan 31 '12 at 09:16 PM Posly
(comments are locked)
10|3000 characters needed characters left

0 answers: sort voted first
Be the first one to answer this question
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x1670
x1278
x1253
x494
x374

asked: Dec 11 '10 at 07:08 PM

Seen: 953 times

Last Updated: Jan 31 '12 at 09:16 PM