• 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 JayFitz91 · Oct 05, 2013 at 12:33 PM · prefabinstance

Respawn an enemy prefab after its destroyed

 var respawn : Transform;
 var dead : boolean = false;
 
 function OnTriggerEnter(theCollision : Collider)
 {
    if(theCollision.gameObject.name=="Spotlight") 
    {
      Destroy(gameObject);
      Debug.Log("Dead");
      dead = true;
 
    }
 }
 
 
 function Respawn()
 {
 
     if(dead == true)
     {
         Instantiate(respawn, Vector3(0,0,0), Quaternion.identity);
     }
 
 }

I'm having trouble getting my enemies to re-spawn, at the moment i have just the one enemy following me around. I'm trying to re-spawn his after he collides with my spotlight.

I have a prefab Enemy that i want to use to create more instances of Enemy once it gets destroyed.

I'm pretty sure my code above is destroying the prefab itself and thus cannot create any more instances but I'm not sure how to just destroy an instance of a prefab. The code above is attached to my enemy.

Id appreciate if anyone could help me out.

Comment
Add comment
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

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by KirieZ · Oct 05, 2013 at 01:28 PM

Updated:

The problem was that when you were destroying the gameobject it was destroying the spawning code together, that was in the same object. Using a empty gameobject and spawning other gameobject will allow you to only destroy the enemy object.

Code:

 var inmap : Transform; // This variable will store the spawned enemy
 var respawn : Transform;
 var dead : boolean = false;
  
 function Start () 
 {
     inmap = Instantiate(respawn, Vector3(0,0,0), Quaternion.identity); // Create the first enemy when the game starts
 inmap.parent = transform; // Set it as child, so you can move it by moving the spawner
 }
  
 function OnTriggerEnter(theCollision : Collider)
 {
    if(theCollision.gameObject.name=="Spotlight") 
    {
      Destroy(inmap); // Destroy the enemy object, but not the spawner (which have the code)
      Debug.Log("Dead");
      dead = true;
    }
 }
  
 function Respawn()
 {
     if(dead == true)
     {
        inmap = Instantiate(respawn, Vector3(0,0,0), Quaternion.identity); // create another instance of the enemy
        inmap.parent = transform; // set the instance as child of the spawner
        dead = false; // prevents an infinite respawn
     }
 }

=========== Old:

Try changing: function Respawn() to function Update()

If it works, the problem is that the Respawn function isn't being called anywhere, even if dead is true, the function will not be executed.

Comment
Add comment · Show 3 · Share
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 JayFitz91 · Oct 05, 2013 at 01:32 PM 0
Share

Thanks for the response but im actually calling the Respawn() function in the Update() a bit further up, if i comment out the Destroy(gameObject) it works...only it creates multiple instances of the enemy as the enemy is not destroyed.

avatar image KirieZ · Oct 05, 2013 at 02:31 PM 0
Share

I changed a bit the code that you posted, try this: and put the code in an empty GameObject (GameObject > Create Empty) (I think that you're using the prefab directly, am I wrong?), and let inmap empty.

 var inmap : Transform;
 var respawn : Transform;
 var dead : boolean = false;
 
 function Start () 
 {
     inmap = Instantiate(respawn, Vector3(0,0,0), Quaternion.identity);
 inmap.parent = transform;
 }
 
 function OnTriggerEnter(theCollision : Collider)
 {
    if(theCollision.gameObject.name=="Spotlight") 
    {
      Destroy(inmap);
      Debug.Log("Dead");
      dead = true;
    }
 }
 
 function Respawn()
 {
     if(dead == true)
     {
        inmap = Instantiate(respawn, Vector3(0,0,0), Quaternion.identity);
    inmap.parent = transform;
        dead = false;
     }
  
 }

If it works, let me know, then I update the answer with the explanation

avatar image JayFitz91 · Oct 05, 2013 at 02:46 PM 0
Share

This works perfectly, thank you very much for your help :)

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

16 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

Related Questions

How do I re-link an object that has unintentionally become detached from prefab? 0 Answers

Script uses transform.position of Prefab instead of Instance 1 Answer

Two Instances of same Prefab dealing damage to each other. 0 Answers

How do I count how many instances of a prefab there are? 3 Answers

How do I get the global position 2 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