Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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
0
Question by Twistyd · Jul 19, 2018 at 12:20 PM · c#collisioninstantiatetransformspawning problems

Instantiated object not keeping transform of the instantiator after instantiator is destroyed

Hi all, first time using the forum and I'm a proper noob that has been smacking my head against a wall for the last 2 days with this one so any help is appreciated.

The Set Up:

  • A GameObject enemy prefab which instantiates the eggs using a coroutine and random time (I don't think this is causal in any way).

  • Egg prefab with Spitball script (shown below)

Uses Transform; Rigidbody; Sphere Collider

In the code the public GameObject spider is the baby spider prefab to be instantiated and the public Transform spawnLoc takes the egg prefab to get the Transform (I think).

  • Baby Spider prefab, used in the public GameObject slot of the Spitball script.

Uses the following components; Transform; Rigidbody; Sphere Collider; Capsule Collider; Nav Mesh Agent; Animation; Animator; Audio Source; Enemy AI script (health, dmg & movement)

The Problem:

I have an enemy that 'spits' out a set of 5 eggs, which on collision with the terrain are supposed to spawn a baby spider at each egg. This is part is working, however as soon as the eggs are destroyed the baby spiders are instantly changing their Transform to 0, 0, 0 (the base Transform of the baby spider prefab).

Example of the problem:

Enemy spits egg > egg hits ground/terrain > baby spider instantiates > egg is destroyed > baby spider Transforms to 0, 0, 0.

The Code [C#] (current version) :

using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic;

 public class Spitball : MonoBehaviour {
     public Rigidbody spider;            // Reference to the spider RigidBody to be spawned
     public Transform spawnLoc;        // Reference to the Transform where the spider should spawn
     private bool collided;
     
         void Update(){
             if(collided == true){
                 // Show in debug the transform.position of the collision
                 Debug.Log ("Colliding at" + transform.position);
     
                 // Set the GameObject spider and Instantiate the spid at the eggs's transform.position
                 Instantiate (spider, spawnLoc.position ,Quaternion.identity);
     
                 StartCoroutine ("Pop");
             }
         }
     
         void OnCollisionEnter(Collision other){
             if(other.gameObject.tag != "Terrain"){
                 collided = true;
             }
         }
     
         IEnumerator Pop(){
             yield return new WaitForSeconds (0.2f);
                 // Destroy the egg
             Destroy(spawnLoc.gameObject);
         }
     }




The Code [C#] (older version) :

using UnityEngine; using UnityEngine.Events; using System.Collections; using System.Collections.Generic;

  public class Spitball : MonoBehaviour {
   public GameObject spider;            // Reference to the spider GameObject to be spawned
   public Transform spawnLoc;        // Reference to the Transform where the spider should spawn
     
         void OnCollisionEnter(Collision other){
             if(other.gameObject.tag != "Terrain"){
                 // Show in debug the transform.position of the collision
                 Debug.Log ("Colliding at" + transform.position);
     
                 // Set the GameObject spider and Instantiate the spid at the eggs's transform.position
                 Instantiate (spider, spawnLoc.transform.position ,Quaternion.identity);
             }
         }    
     }


The current version (shown first) allows the spiders to spawn but as soon as the Pop coroutine is run and the egg is destroyed the spiders reset to their own transform.

Hopefully this is detailed enough and my thanks in advance to anyone with the patience to help me, a humble noob, to understand and remedy my issue.

Comment
Add comment · Show 2
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 PizzaPie · Jul 19, 2018 at 01:11 PM 0
Share

First of all use the older version it makes more sense, obvisously you should add the coroutine call in it too.

After that most probably you assign wrongfully the spawLoc which according of what you say is the transform of the object, thus you could use the property transform ins$$anonymous$$d of manual assignment, also as the SpitBall script is on the egg which you want to destroy use Destroy(gameObject) .

Now if none of this make any difference odds are you manipulate the transform from another script.

Lastly what @Shemamforash says is wrong because when you instatiate an object it does not reference the same transform but it copies the values you provide which is obvious from the overload you are using and the fact that structs are value type.

Cheers

avatar image Shemamforash PizzaPie · Jul 19, 2018 at 01:19 PM 0
Share

If you are changing an instantiated object that true, but he is calling Destroy on a reference to a prefab (spawnLoc), which Unity does not allow.

2 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by Shemamforash · Jul 19, 2018 at 12:36 PM

Hi there! How is your spawnLoc assigned? If the spawnLoc transform is the transform of the Spider itself, then as soon as you destroy it Unity is going to add a new Transform component with the default position value of (0,0,0). This behaviour occurs because Unity won't allow a gameobject to be without a transform. Let me know if this helps!

Comment
Add comment · Show 14 · 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 Twistyd · Jul 19, 2018 at 12:47 PM 0
Share

Whoops forgot to say the egg prefab is dragged in to the public Transform spawnLoc slot. Will add it to main question.

What you say makes sense and thanks :)

avatar image Shemamforash Twistyd · Jul 19, 2018 at 12:48 PM 0
Share

No problem, did that fix it for you?

avatar image Shemamforash Shemamforash · Jul 19, 2018 at 01:00 PM 0
Share

If I understand correctly, you are referencing the egg prefab in your script. If so just remove the spawnLoc variable and change these lines:

 Instantiate(spider, spawnLoc.position, Quaternion.identity);
 //change to
 Instantiate(spider, transform.position, Quaternion.identity);
 
 and
 
 Destroy(spawnLoc.gameObject);
 //change to
 Destroy(gameObject);

Also you should change your rigidbody reference to a gameobject reference if you are instantiating the spider from a prefab.

Show more comments
avatar image
0

Answer by mayur7garg · Jul 19, 2018 at 12:41 PM

I totally understood your problem but from the code, I am unable to understand the role of the "spawnLoc" Transform variable in the current version. Whose transform is it storing? By the way, since this script is attached to the egg which when collides with the terrain generates a spider, you can simply use "this.transform.location" in the second argument of the Instantiate call instead of the spawnLoc.position. I guess that should work.

Comment
Add comment · Show 1 · 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 Twistyd · Jul 19, 2018 at 12:56 PM 0
Share

Updated the question, thanks for spotting I'd missed that.

The egg prefab gets dragged in to the spawnLoc slot in the editor (if that makes sense).

When changing "spawnLoc.posistion" to "this.transform.position" the baby spiders are still warping to 0,0,0 after the egg is destroyed, thanks anyway though :)

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

554 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

Destroy temp object and make new object. 0 Answers

How do you choose where your object Instatntiates? 2 Answers

Rotating a certain axis offsets the other ones? 1 Answer

Parent colliding bullet to the object 1 Answer

Issues with instantiated prefabs 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