Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • 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
1
Question by Chris12345 · Jun 15, 2012 at 02:29 AM · spawning

How do i spawn object after it has been destroyed?

Hello i have this script that works great but it does not re-spawn when the object it is spawning is destroyed. I would like it if 2 objects are destroyed to spawn another 2 right away so we always have the same amount of objects in the scene. here is the code so far.

   using UnityEngine;
   using System.Collections.Generic;

   public class PlatformManager : MonoBehaviour {

   public Transform prefab;
   public int numberOfObjects;
   public float recycleOffset;
   public Vector3 minSize, maxSize, minGap, maxGap;
   public float minY, maxY;

   private Vector3 nextPosition;
   private Queue<Transform> objectQueue;

    void Start () {
     objectQueue = new Queue<Transform>(numberOfObjects);
     for(int i = 0; i < numberOfObjects; i++){
         objectQueue.Enqueue((Transform)Instantiate(prefab));
     }
     nextPosition = transform.localPosition;
     for(int i = 0; i < numberOfObjects; i++){
         Recycle();
     }
 }

 void Update () {
     if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
         Recycle();
     }
 }

 private void Recycle () {
     Vector3 scale = new Vector3(
         Random.Range(minSize.x, maxSize.x),
         Random.Range(minSize.y, maxSize.y),
         Random.Range(minSize.z, maxSize.z));

     Vector3 position = nextPosition;
     position.x += scale.x * 0.5f;
     position.y += scale.y * 0.5f;

     Transform o = objectQueue.Dequeue();
     o.localScale = scale;
     o.localPosition = position;
     objectQueue.Enqueue(o);

     nextPosition += new Vector3(
         Random.Range(minGap.x, maxGap.x) + scale.x,
         Random.Range(minGap.y, maxGap.y),
         Random.Range(minGap.z, maxGap.z));

     if(nextPosition.y < minY){
         nextPosition.y = minY + maxGap.y;
     }
     else if(nextPosition.y > maxY){
         nextPosition.y = maxY - maxGap.y;
     }
 }
     }
Comment
Add comment · Show 17
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 robert_mathew · Jun 15, 2012 at 03:45 AM 1
Share

make the game object you want to re-spawn as prefab then you will be able to re-spawn the object after it is destroyed the prefab you want to re-spawn should be in project

avatar image bodec · Jun 15, 2012 at 04:53 AM 0
Share

you need to be running a check looking for your gameobjects to see if you have 2 in game if not respawn.

avatar image Chris12345 · Jun 15, 2012 at 01:54 PM 0
Share

How would I do this?

avatar image Chris12345 · Jun 15, 2012 at 10:57 PM 0
Share

Can someone please help?

avatar image Chris12345 · Jun 15, 2012 at 11:20 PM 0
Share

Can someone please help?

Show more comments

2 Replies

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

Answer by Wolfram · Jun 15, 2012 at 11:37 PM

Create/edit a script that you attach to the projectile prefab, and add a function OnDestroy(). In it, you can put any code that gets executed as soon as the projectile is destroyed. For example, you could decrease a counter in your PlatformManager (and then react to that in PlatformManager's Update(), or immediately spawn a new Projectile, etc...

Comment
Add comment · Show 10 · 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 Chris12345 · Jun 15, 2012 at 11:39 PM 0
Share

can you show me how i would do this?

avatar image whydoidoit · Jun 15, 2012 at 11:41 PM 0
Share

Hang on, he's got the objects in a Queue there and it will be nulling it (which is throwing an error right now)- I think the best place to re instantiate is in the loop where it peeks at the queue position... If it is null then create a new one....

avatar image whydoidoit · Jun 15, 2012 at 11:44 PM 1
Share
 void Update () {
    if(objectQueue.Peek() == null)
    {
          objectQueue.Dequeue();
          objectQueue.Enqueue((Transform)Instantiate(prefab));
          nextPosition = transform.localPosition;
    }
     if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
        Recycle();
     }
 }
avatar image Chris12345 · Jun 15, 2012 at 11:50 PM 0
Share

where do i put this code? on what object

avatar image whydoidoit · Jun 15, 2012 at 11:51 PM 0
Share

It replaces the Update function in the code you posted.

Show more comments
avatar image
2

Answer by whydoidoit · Jun 16, 2012 at 12:08 AM

If you don't mind them turning up later on - when it's time to fit one in to the right slot then this would do it:

 void Update () {
    if(objectQueue.Peek() == null)
    {
          Transform newOne;
          objectQueue.Dequeue();
          objectQueue.Enqueue(newOne = (Transform)Instantiate(prefab));
          newOne.gameObject.SetActiveRecursively(false);
          nextPosition = transform.localPosition;
    }
     if(objectQueue.Peek().localPosition.x + recycleOffset < Runner.distanceTraveled){
        Recycle();
     }

}

 private void Recycle () {
     Vector3 scale = new Vector3(
        Random.Range(minSize.x, maxSize.x),
        Random.Range(minSize.y, maxSize.y),
        Random.Range(minSize.z, maxSize.z));
 
     Vector3 position = nextPosition;
     position.x += scale.x * 0.5f;
     position.y += scale.y * 0.5f;
 
     Transform o = objectQueue.Dequeue();
      if(!o.gameObject.active)
           o.gameObject.SetActiveRecursively(true);
     o.localScale = scale;
     o.localPosition = position;
     objectQueue.Enqueue(o);
 
     nextPosition += new Vector3(
        Random.Range(minGap.x, maxGap.x) + scale.x,
        Random.Range(minGap.y, maxGap.y),
        Random.Range(minGap.z, maxGap.z));
 
     if(nextPosition.y < minY){
        nextPosition.y = minY + maxGap.y;
     }
     else if(nextPosition.y > maxY){
        nextPosition.y = maxY - maxGap.y;
     }
 }
Comment
Add comment · 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

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.

Follow this Question

Answers Answers and Comments

7 People are following this question.

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

Related Questions

A node in a childnode? 1 Answer

Spawn Script not working on iPhone? 0 Answers

How can i spawn one by one? 2 Answers

How can i get this to spawn all the time? 1 Answer

how can i get rid of this transform.localPosition;? 1 Answer


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