- Home /
Instantiating gameObejcts that can't be referred to after creation
I'm making a card game that allows players to make tokens with customised rules/text based on text placed in an input field. The first token comes out great, but if I repeat the creation process at runtime again, it adds double the amount of tokens and changes the original token's text rules as well as the new ones. This is what my script looks like:
public void CreateToken()
{
DropZone = GameObject.Find("Drop Zone");
Token = Instantiate(Token, new Vector2(0, 0), Quaternion.identity);
Token.transform.SetParent(DropZone.transform, false);
Token.layer = LayerMask.NameToLayer("Cards");
CardName = GameObject.Find("CardType").GetComponent<Text>();
CardRule = GameObject.Find("Rules").GetComponent<Text>();
CardStats = GameObject.Find("PowDef").GetComponent<Text>();
CardName.text = TokenName.text;
CardRule.text = TokenRule.text;
CardStats.text = TokenStats.text;
gameObject.SetActive(false);
}
This script is placed in the pop up menu token creator. Is there any way to make each instantiated token unique and unreferrable by the token menu once it's instantiated?
Thanks in advance.
Answer by MarkoHazel · May 07, 2020 at 03:35 AM
Ok, so I managed to figure out how to not change the stats in already instatiated tokens by replacing the GameObject.Find with this:
CardName = Token.transform.Find("CardType").GetComponent<Text>();
CardRule = Token.transform.Find("Rules").GetComponent<Text>();
CardStats = Token.transform.Find("PowDef").GetComponent<Text>();
Now I just need to fix the script from instantiating tokens that have already been created. Would a bool help this?
Getting closer, but the problem starts after around the 4th token being generated...
public void CreateToken()
{
if (createdToken)
{
createdToken = false;
}
else
{
DropZone = GameObject.Find("Drop Zone");
Token = Instantiate(Token, new Vector2(0, 0), Quaternion.identity);
Token.transform.SetParent(DropZone.transform, false);
Token.layer = Layer$$anonymous$$ask.NameToLayer("Cards");
CardName = Token.transform.Find("CardType").GetComponent<Text>();
CardRule = Token.transform.Find("Rules").GetComponent<Text>();
CardStats = Token.transform.Find("PowDef").GetComponent<Text>();
CardName.text = TokenName.text;
CardRule.text = TokenRule.text;
CardStats.text = TokenStats.text;
gameObject.SetActive(false);
createdToken = true;
}
}
Your answer
Follow this Question
Related Questions
Creating text at the position of the gameobjects in world 0 Answers
GameObject.Find only working on server? 1 Answer
Adjusting Rotation of Instantiated Objects 0 Answers
All subsequent instantiated objects = auto-named with suffix (Clone)? 1 Answer
How can I destroy an specific clone already instantiated, when there's more than one? 1 Answer