- Home /
When I instantiate a prefab, I want to assign it custom values.
I have a very simple code that fires a bullet when I hit spacebar. I want to assign these bullets values based on the ships current level.
Here is my code thus far:
void Shoot (){
if(Input.GetKeyDown(KeyCode.Space)){
Instantiate(bullet1, gunPosition1.position, transform.rotation);
Instantiate(bullet1, gunPosition2.position, transform.rotation);
Instantiate(bullet1, gunPosition3.position, transform.rotation);
Instantiate(bullet1, gunPosition4.position, transform.rotation);
Instantiate(bullet1, gunPosition5.position, transform.rotation);
Instantiate(bullet1, gunPosition6.position, transform.rotation);
}
}
How would I change it so that I could plug in the player level into the bullets?
Answer by Eluate · Apr 22, 2015 at 09:33 PM
You should be assigning the variables after you instantiate it. For example:
if(Input.GetKeyDown(KeyCode.Space)){
int playerLevel = 1;
GameObject bullet = (GameObject)Instantiate(bullet1, gunPosition1.position, transform.rotation);
bullet.getComponent<BulletScript>().level = playerlevel;
}
Awesome, that indeed works perfectly. A new issue has come because of this though. When I try to insantiate multiple bullets at once it will only do one. Here is my code if you can help.
void Shoot (){
if(Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.Space)){
GameObject bullet1 = (GameObject)Instantiate(bullet, gunPosition1.position, transform.rotation);
GameObject bullet2 = (GameObject)Instantiate(bullet, gunPosition2.position, transform.rotation);
GameObject bullet3 = (GameObject)Instantiate(bullet, gunPosition3.position, transform.rotation);
GameObject bullet4 = (GameObject)Instantiate(bullet, gunPosition4.position, transform.rotation);
GameObject bullet5 = (GameObject)Instantiate(bullet, gunPosition5.position, transform.rotation);
GameObject bullet6 = (GameObject)Instantiate(bullet, gunPosition6.position, transform.rotation);
bullet1.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet1.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet2.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet2.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet3.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet3.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet4.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet4.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet5.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet5.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet6.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet6.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
}
}
@redcap, that seems to be a bug. Also, you should consider using for loops and arrays ins$$anonymous$$d of making one entry for each bullet.
You could use a for loop or recycle the statement.
example:
GameObject bullet;
bullet= (GameObject)Instantiate(bullet, gunPosition1.position, transform.rotation);
bullet.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet= (GameObject)Instantiate(bullet, gunPosition2.position, transform.rotation);
bullet.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet= (GameObject)Instantiate(bullet, gunPosition3.position, transform.rotation);
bullet.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
bullet= (GameObject)Instantiate(bullet, gunPosition4.position, transform.rotation);
bullet.GetComponent<PhoenixBullet>().skillLevel = GetComponent<ShipStats$$anonymous$$anager>().skill1Level;
bullet.GetComponent<PhoenixBullet>().playerReference = GetComponent<ShipStats$$anonymous$$anager>().player;
and so on. The Idea is to use as few new variables as you can. the creation process does grab memory. Or as suggested above use a for loop.