x


Unity iOS Javascript - Problem with Instantiate

I've been on working on instantiating 10 boxes and giving them some properties. They all get the same properties for now but it i want to be able to give them different props in the future. The code worked until I put it in #pragma strict mode.. Now it says there is a Nullreferenceexeption when i ask for the obstakel.

       for (var i : int = 0;i < 10; i++)
    {
       obstakel = Instantiate (obstakelPrefab, Vector3((i * space)+obstakelOffset, 0, 0), Quaternion.identity) as GameObject;

       var tempScript:Obstakel;

       tempScript = obstakel.GetComponent(Obstakel) as Obstakel;

       tempScript.SetObstakel(trigger,snelheid);
    }

Any ideas on what could solve my problems are very welcome!

more ▼

asked Aug 09 '11 at 05:16 PM

YvdB gravatar image

YvdB
1 1 1 2

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

1 answer: sort voted first

I would assume that obstaklePrefab is not of type GameObject.

By the way, in Unity 3.4 you can just write this:

var obstakelPrefab : GameObject;

function Start () {
    for (var i = 0; i < 10; i++)
    {
        obstakel = Instantiate (obstakelPrefab, Vector3((i * space)+obstakelOffset, 0, 0), Quaternion.identity);
        var tempScript = obstakel.GetComponent(Obstakel);
        tempScript.SetObstakel(trigger, snelheid);
    }
}

Instantiate returns the type of the prefab being instantiated (instead of Object as before), and GetComponent returns the type of the component (instead of Component as before).

Actually you can shorten it:

obstakel = Instantiate (obstakelPrefab, Vector3((i * space)+obstakelOffset, 0, 0), Quaternion.identity);
obstakel.GetComponent(Obstakel).SetObstakel(trigger, snelheid);

Or even more:

Instantiate (obstakelPrefab, Vector3((i * space)+obstakelOffset, 0, 0), Quaternion.identity).GetComponent(Obstakel).SetObstakel(trigger, snelheid);
more ▼

answered Aug 09 '11 at 05:32 PM

Eric5h5 gravatar image

Eric5h5
80.3k 42 132 521

Thank you! That last line is perfect, it doesn't solve the problem, it eliminates it.

I'm on a school macbook and updates will have to wait till school starts again but the last line works in 3.3 as well. [edit: no wait, it doesn't: getcomponent not a member of Unity.object]

Moral of the story, work with up to date software.

Aug 09 '11 at 05:53 PM YvdB

@YvdB: You can still do it in one line on 3.3 as long as you cast appropriately:

(Instantiate (obstakelPrefab, Vector3((i * space)+obstakelOffset, 0, 0), Quaternion.identity) as GameObject).(GetComponent(Obstakel) as Obstakel).SetObstakel(trigger, snelheid);

That's maybe a bit much for one line of code though.

Aug 09 '11 at 06:38 PM Eric5h5
(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:

x3465
x1683
x399

asked: Aug 09 '11 at 05:16 PM

Seen: 843 times

Last Updated: Aug 09 '11 at 06:38 PM