x


Use an objects (from array) position to focus a camera on

I have a list of buttons which is created by reading all the objects in an array. This works. But now I want to move the camera target to the transform.position of the object that is related to the clicked button. So if the label of the button says "ObjectX", I want to move the camera target to ObjectX.transform.position.

've been working with gameObject.Find and Transform.Find but I can not get it to work. The code below generates a nullReferenceException. I think I'm doing something wrong with gameObject.Find(toString).transform.position. Basically I need to find the object named as stored in toString (or CreateObjectList01.listOfObjects[i]) (I tried both into the gameObject.Find() but it didn't work) and get it's position coordinates which is a Vector3 I presume.

for (var i = 0; i < CreateObjectList01.listOfObjects.length; i++) 
{       
var toString = "" + CreateObjectList01.listOfObjects[i];   //converts array objects to type string        

 if (GUILayout.Button(toString))    
 {                           
 gameObject.Find("Cameratarget").transform.position = gameObject.Find(toString).transform.position; 
 }
}

This compiles, but gives me the null reference exception when I click on one of the buttons. Your first suggestion doesn't solve it, the nullreference remains. The second suggestion triggers the following error: "Assets/myGUI.js(84,114): BCE0019: 'transform' is not a member of 'Object'. " I assume that means it's an array of Objects which is not the same as GameObjects. I did try that before therefore I tried to use the GameObject.Find instead. Is there perhaps a way to convert an Object to a GameObject?

Cameratarget exists and toString is not a GameObject but a string. If I try

 var toString = CreateObjectList01.listOfObjects[i];  //object type

instead of

 var toString = "" + CreateObjectList01.listOfObjects[i];  //string type

I get an error : BCE0017: The best overload for the method 'UnityEngine.GameObject.Find(String)' is not compatible with the argument list '(Object)'.

Any help would be greatly appreciated!

Edit: The string conversion is done (together with string split) to get the object names in the button-labels without (unityengine.gameobject) in them. I tried both the "toString" as a string and object (like mentioned above. And also tried "CreateObjectList01.listOfObjects", neither worked, I think I'm doing very simple completely wrong, just can figure out what.

more ▼

asked Apr 06 '11 at 05:39 AM

David 25 gravatar image

David 25
31 4 4 9

Please specify more clearly what the previous suggestions actually were. Or else you may just end up getting them again.

Apr 06 '11 at 07:00 AM KeithK
(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first

There is also blahblah.ToString() (ignoreing blahblah) which converts almost anything to a string, but don't you want object.name? Try CreateObjectList01.listOfObjects[i].name

more ▼

answered Apr 06 '11 at 07:03 AM

DaveA gravatar image

DaveA
26.5k 151 171 256

A null reference means that the Find() function is not finding any GameObjects with their "name" property set to whatever you are storing in toString. Use print() functions to check if stored values are what you expect them to be.

Apr 06 '11 at 07:14 AM KeithK
(comments are locked)
10|3000 characters needed characters left

DaveA: I've implemented the ToString to create the string which works great! With the nullexception I have less luck I tried the following:

GameObject.Find("Cameratarget").transform.position = GameObject.Find(CreateObjectList01.listOfObjects[i]).transform.position;' this results in BCE0017: The best overload for the method 'UnityEngine.GameObject.Find(String)' is not compatible with the argument list '(Object)'.

Than I tried to get the name into a variable to use it later

var tazer = CreateObjectList01.listOfObjects[i].name;

But this results in: BCE0019:'name' is not a member of 'Object'.

I also tried:

var tazer = CreateObjectList01.listOfObjects[i];
GameObject.Find("Cameratarget").transform.position = GameObject.Find(tazer).transform.position; 

Which results in BCE0017: The best overload for the method 'UnityEngine.GameObject.Find(String)' is not compatible with the argument list '(Object)'.

Do you have any clue? It seems to me that the array contains Objects and I need GameObjects, when I print them I get "objectname (UnityEngine.Transform)".

more ▼

answered Apr 06 '11 at 07:04 PM

David 25 gravatar image

David 25
31 4 4 9

(comments are locked)
10|3000 characters needed characters left

I just solved it: the names in toString contained a space at the end after the string splitting, but the object names do not end with a space. Therefore the objects could not be found. Thanks for your help!

more ▼

answered Apr 06 '11 at 10:23 PM

David 25 gravatar image

David 25
31 4 4 9

(comments are locked)
10|3000 characters needed characters left
Your answer
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:

x2093
x1363
x111
x18

asked: Apr 06 '11 at 05:39 AM

Seen: 1260 times

Last Updated: Apr 06 '11 at 08:04 AM