x


how do i know where my instantiated object came from?

Ok so I have 3 GameObjects that are being used to instantiate objects. They are all called TargetSpawner_GO

I have the following script attached to them:

    function SpawnAnother(){
        var localObject : GameObject = Instantiate(myObject,transform.position, transform.rotation);
        localObject.GetComponent(moveTarget).speedLeft = myCounter + 2;
        localObject.GetComponent(moveTarget).speedRight = myCounter + (-2);
    }

When the instantiated object is killed I use the following script:

  var deathClock : float = 5.0;
    var deathTime : float = 5.0;
    var startDeathClock = false;
    function Update () {

    deathClock -= Time.deltaTime;
    //Debug.Log(deathClock);

        if(startDeathClock){
            if(deathClock < 0){
                Destroy(gameObject);
                var myObject = GameObject.Find("TargetSpawner_GO").GetComponent(SpawnTarget);
                myObject.SpawnAnother();
            }
        }

    }

    function KillMeNow(){
    deathClock = deathTime ;
    startDeathClock = true;

    }

Now my problem: How do I know where the instantiated object came from so I can spawn another one at the location where it was first instantiated from.

Right now they are all coming from the same object when they die.

more ▼

asked Sep 14 '10 at 03:58 AM

EndBoss gravatar image

EndBoss
14 2 2 6

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

2 answers: sort voted first

You could create a variable, kept on the spawned instance, that stores which 'spawner' it belongs to.

On a script attached to the spawned instance (which I will refer to as 'scriptName'):

var spawnOrigin : GameObject;

In SpawnAnother(), when you create the object, you would:

localObject.GetComponent(scriptName).spawnOrigin = gameObject;

This sets the 'spawnOrigin' variable (on the spawned instance) to the GameObject that spawned it.

You would then use the spawnOrigin variable to SpawnAnother(), i.e.:

spawnOrigin.GetComponent(SpawnTarget).SpawnAnother();

Without your full code, I can't post a complete snippet, but hopefully you'll be able to piece it together. Any questions, please ask.

more ▼

answered Sep 14 '10 at 04:38 AM

Marowi gravatar image

Marowi
4.9k 4 14 53

Thanks I will try this out. I'm also trying it by giving my spawners a unique name and naming the instantiated objects.

thanks!

Sep 14 '10 at 05:17 AM EndBoss

Giving them all unique names is sure to work, but less scalable. With this approach, you should be able to add as many spawners as you want, and it will programmatically create/maintain the links. Best of luck!

Sep 14 '10 at 05:21 AM Marowi
(comments are locked)
10|3000 characters needed characters left

The easiest would be to store the position (and rotation) of the object in the Start function, and use it to spawn the object:

(I am not a native JavaScript speaker, so the syntax might be a bit off). The following must be in the same script as the function SpawnAnother in your code.

var initialPosition : Vector3;
var initialRotation : Quaternion;

function Start()
{
  initialPosition = transform.position;
  initialRotation = transform.rotation;
}

function SpawnAnother()
{
  var localObject : GameObject = Instantiate(gameObject, initialPosition, initialRotation);
  localObject.GetComponent(moveTarget).speedLeft = myCounter + 2;
  localObject.GetComponent(moveTarget).speedRight = myCounter + (-2);
}

(P.S. I am not sure why you had gameObject as parameter for instantiate - I am assuming here that you want to clone the attached object, so I replaced it with gameObject).

more ▼

answered Sep 14 '10 at 04:34 AM

Herman Tulleken gravatar image

Herman Tulleken
1.6k 25 36 56

I think you've misinterpreted what z3lda is asking. As I read it, the SpawnAnother() object does not move. It initially spawns an object, and when the object is killed, it is meant to spawn another from the spawner it originated from.

Sep 14 '10 at 04:40 AM Marowi

Yes, I am totally confused... Luckily, you and z3lda understand each other, so all is good :-)

Sep 14 '10 at 05:34 AM Herman Tulleken
(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:

x1667
x1273
x438
x418

asked: Sep 14 '10 at 03:58 AM

Seen: 991 times

Last Updated: Sep 14 '10 at 03:58 AM