• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by AndreasX12 · Jul 14, 2013 at 10:22 PM · collisiongameobjectinstantiatetransformparent

Set parent of instantiated object.

Hi, I'm trying to instantiate an object and then set the parent. This is my code (it's in an OnTriggerEnter void btw :-) )

             GameObject healthgameObject = Instantiate(health, m1_enemy1_healthSpawn.transform.position, m1_enemy1_healthSpawn.transform.rotation) as GameObject;    
             healthgameObject.transform.parent = m1_enemy1_healthSpawn.transform;



It gives no errors when I look in the console, but when I play the game and my player hits the object it pauses the game and gives me this error:

Object reference not set to an instance of an object

At this line: healthgameObject.transform.parent = m1_enemy1_healthSpawn.transform;

How can this be solved?

Thanks, Andreas.

Comment
Add comment · Show 12
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image robertbu · Jul 14, 2013 at 10:28 PM 0
Share

This would happen if 'health' is not initialized. If you did not drag and drop a game object on 'health' in the inspector or if your GameObject.Find() or GameObject.FindWithTag() did not find the specified game object.

avatar image AndreasX12 · Jul 14, 2013 at 10:30 PM 0
Share

I have dragged my Transform to "health"

avatar image robertbu · Jul 14, 2013 at 10:32 PM 0
Share

It is possible this script is attached to more than one game object, and you did not initialize all of them?

avatar image AndreasX12 · Jul 14, 2013 at 10:37 PM 0
Share

Well, In runtime everything is assigned, but when the player hit's the other object, the error comes. (It also says that the error comes from the gameObject the script is attached to, so I don't think it's attached to anything else). The script is also attached to the player :-)

avatar image robertbu · Jul 14, 2013 at 10:41 PM 0
Share

On the top right of the Hierarchy window there is a place to type a search term. Type in the name of the script. Then check each game object with the script to verify that value is initialized.

avatar image AndreasX12 · Jul 14, 2013 at 10:46 PM 0
Share

Okay, I have done that now. Some of the objects is assigned at runtime. If I click the console after the game has paused and the error has shown, it also marks the player (which the script is attached to) yellow.

avatar image sunala · Jul 15, 2013 at 09:08 AM 0
Share

Type in the name of the script.

avatar image AndreasX12 · Jul 15, 2013 at 09:58 AM 0
Share

The name of the script is "$$anonymous$$issionClient" (Because it handles all the missions). If you need more of the script:

     public GameObject m1_cp1;
     public GameObject m1_enemy1;
     public GameObject m1_enemy1_aimSpawn;
     public GameObject m1_enemy1_healthSpawn;
     

     void Start () {
         
         m1_enemy1 = GameObject.Find("m1_enemy1");
         m1_cp1 = GameObject.Find("Checkpoint1");
         m1_enemy1_aimSpawn = GameObject.Find("m1_enemy1_aimSpawn");
         m1_enemy1_healthSpawn = GameObject.Find("m1_enemy1_healthSpawn");
         
     }


     void OnTriggerEnter(Collider hit) {
         
         if(chosen$$anonymous$$ission == 1) {
         
             if(hit.name == "Checkpoint1") {
                 
                 m1_cp1_hit = true;
                 m1_enemy1.animation.Play("m1_enemy1");
                 Instantiate(aim, m1_enemy1_aimSpawn.transform.position, m1_enemy1_aimSpawn.transform.rotation);
                 GameObject healthgameObject = Instantiate(health, m1_enemy1_healthSpawn.transform.position, m1_enemy1_healthSpawn.transform.rotation) as GameObject;    
                 healthgameObject.transform.parent = m1_enemy1_healthSpawn.transform; // It's here the error is.
                 
                 
                 Destroy(m1_cp1);
                 
             }
             
         }
         
         
     }
avatar image TonyLi · Jul 15, 2013 at 02:08 PM 0
Share

The error doesn't make clear which variable isn't set as you expect.

Your program$$anonymous$$g life will be much happier if you make it a practice to always check your variables before using them:

 if (health == null) {
     Debug.LogError("health is null");
     return;
 }
 if (m1_enemy1_healthSpawn == null) {
     Debug.LogError("m1_enemy1_healthSpawn is null");
     return;
 }
 GameObject healthgameObject = Instantiate(health, m1_enemy1_healthSpawn.transform.position, m1_enemy1_healthSpawn.transform.rotation) as GameObject;
 if (healthGameObject == null) {
     Debug.LogError("healthGameObject is null");
     return;
 }
     healthgameObject.transform.parent = m1_enemy1_healthSpawn.transform;
avatar image Jessy · Jul 15, 2013 at 02:15 PM 0
Share

The title-question is irrelevant.

avatar image AndreasX12 · Jul 15, 2013 at 08:48 PM 0
Share

@TonyLi It says "Debug.LogError("healthGameObject is null");" so I don't think the healthgameObject get's assigned when it instantiates.

avatar image TonyLi · Jul 16, 2013 at 01:35 AM 0
Share

Okay, so that tells us a lot. The variable health isn't null (since you didn't see "health is null"). So health probably isn't a GameObject. The "as" keyword will return null if it can't cast the object as the type you're requesting.

($$anonymous$$aybe it's a $$anonymous$$onoBehaviour?)

You could further divide this to give you more info:

Ins$$anonymous$$d of:

 GameObject healthgameObject = Instantiate(health, m1_enemy1_healthSpawn.transform.position, m1_enemy1_healthSpawn.transform.rotation) as GameObject;
 if (healthGameObject == null) {
     Debug.LogError("healthGameObject is null");
     return;
 }

Try this:

 Object healthObject = Instantiate(health);
 if (healthObject == null) {
     Debug.LogError("Instantiate returned null");
     return;
 }
 
 GameObject healthGameObject = healthObject as GameObject;
 if (healthGameObject == null) {
     Debug.LogError("healthGameObject is null; healthObject is not a GameObject, it's " + healthObject.GetType().Name);
     return;
 }
 // (assign position & position, etc...

You'll probably see the "healthGameObject is null..." message, which will give you the type of the instantiated object.

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

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

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

18 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Instantiated GameObject collision without script repetition? 1 Answer

parenting instantiated object 2 Answers

Creating new Transform from existing objects Transform to Instantiate object 1 Answer

Instantiate Terrain Object as child of Empty Game Object 1 Answer

Getting instance of an sub object rather than the original's subobject 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges