- Home /
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.
Answer by · Sep 14, 2010 at 04:38 AM
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.
Thanks I will try this out. I'm also trying it by giving my spawners a unique name and na$$anonymous$$g the instantiated objects.
thanks!
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!
Answer by Herman-Tulleken · Sep 14, 2010 at 04:34 AM
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).
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.
Yes, I am totally confused... Luckily, you and z3lda understand each other, so all is good :-)
Your answer
Follow this Question
Related Questions
Parenting Instantiated objects on Collision 2 Answers
Set parent of instantiated object. 0 Answers
Wont let me instantiate gameobject when i destroy it? 0 Answers
Instantiate a Prefab as child 0 Answers
Setting parent of instantiated sprite 2 Answers