- Home /
How can I make a Transform that I dont have to set each time I place a prefab?
I have an enemy AI which uses the player's transform.position, but I want any enemy that spawns to inherit the player transform rather that having to set it each time a new enemy is placed from a prefab. the question in simple words: Is there a way to make Player a GameObject and have the position accessable?
Here is the script, If anyone knows how to change it the way I want it, it would be much appreciated:
var speed : float = 9; var player : Transform; var MaxDistance : int = 30; var awake : boolean = false; var explosion : Transform;
function Update () {
transform.eulerAngles = Vector3(0,transform.eulerAngles.y,0); var distance : Vector3 = player.position - transform.position; //if player is in range, enemy will follow if(distance.magnitude < MaxDistance){ awake = true; } if(awake){ renderer.material.color = Color.red; velocity = distance.normalized * speed; rigidbody.velocity = velocity; } if(distance.magnitude < 2){ Instantiate(explosion, transform.position, transform.rotation); Destroy(gameObject); } }
Answer by MonkeyAssassin8 · Dec 16, 2010 at 11:52 AM
It's ok, I got it...
var speed : float = 9; var player : GameObject; var MaxDistance : int = 30; var awake : boolean = false; var explosion : Transform;
function Update () {
player = GameObject.FindWithTag("Player");
transform.eulerAngles = Vector3(0,transform.eulerAngles.y,0); var distance : Vector3 = player.transform.position - transform.position; //if player is in range, enemy will follow if(distance.magnitude < MaxDistance){ awake = true; } if(awake){ renderer.material.color = Color.red; velocity = distance.normalized * speed; rigidbody.velocity = velocity; } if(distance.magnitude < 2){ Instantiate(explosion, transform.position, transform.rotation); Destroy(gameObject); } }
One suggestion... unless the player will be changing objects (The player object being destroyed, instantiated, etc.) cache the player variable in Awake() rather than Update(). That way you won't be doing a Find every frame (which gets expensive the more enemies you have). If you will be changing the player object, you can still cache and then put an if [something like: if (!player) player = GameObject.FindWithTag("Player");] statement in to make sure the enemy can find the player again, and the if is a lot less expensive...
yes, I know, I have spawn points... but thanks for the suggestion
Your answer
Follow this Question
Related Questions
Help With LookAt Target 1 Answer
Can't add Transform to an Array on Prefab. 1 Answer
throw / fling object or prefab 1 Answer
Putting prefab into scene messes with the transform origin? 1 Answer
How to assign Transform to prefab ? 2 Answers