- Home /
 
Assign a 'Transform' target to prefab by finding a 'GameObject'
I've read through other posts, and I know what needs to be done, I just can't find a way to do it. I'm pretty new to unity and game programming in general.
I have a 'Transform' object that is being used to calculate prefabbed enemy's angle of rotation and direction of travel. I can't seem to find a way to assign the target through scripting.
 enter code using UnityEngine;
 using System.Collections;
 
 public class seekTarget : MonoBehaviour {
     
     public Transform target;
     public float speed;
     public float moveSpeed;
     public float moveStep;
     public float range;
     public float distance;
 
     void Update() {
 
         Vector3 dir = target.position - transform.position;
         float angle = Mathf.Atan2(dir.y,dir.x) * Mathf.Rad2Deg;
         transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
 
         float moveStep = moveSpeed * Time.deltaTime;
         distance = Vector3.Distance (target.position, transform.position);
 
         if (distance > range) 
         {
             transform.position = Vector3.MoveTowards (transform.position, target.position, moveStep);
         }
 
     }
 
 }
 
               I've tried using the GameObject.FindGameObjectByTag("Player"); line, but when I try that it says I can't convert from 'Transform' to 'GameObject'
When I try to make the 'target' a 'GameObject' from the start, none of my vector functions will work.
I've tried explicitly typecasting as well, to no avail.
What am I missing?
Answer by robertbu · Feb 14, 2014 at 03:29 PM
If you are absolutely sure that at least one of the 'Player' tagged objects exist in the scene, you can do:
 target = GameObject.FindGameObjectByTag("Player").transform;
 
               Getting something by tag is efficient enough to do every frame, but if the 'Player' tagged object never changes to a new game object it would best to do the assignment in Start().
If there is a chance that the 'Player' game object will not exist, you can do:
 GameObject go =  GameObject.FindGameObjectByTag("Player");
 if (go != null) {
     target = go.transform;
 }
 else {
     target = null;
 }
 
               But if you need to handle this situation, you also need to handle target being null in the rest of your code.
Of course, I was missing something as simple as '.transform' .. Thank you, kind stranger!
Your answer
 
             Follow this Question
Related Questions
Creating an array of prefabs? 4 Answers
How to order newly created Objects? 1 Answer
Find Transform in the scene 2 Answers
prefab query 1 Answer
How to delay a line of code. 2 Answers