- Home /
Modifications to instance effecting all instances
This is a wierd one for me. I am working on a simple evolution simulation. The part I am working on is tree reproduction and mutation. Yet when my mutation method runs it is effecting all plants with the PlantLife script that are from the same "branch" of life. If I directly modify these values in the inspector it changes them for all trees in that branch of life. But if I move the prefab onto the scene it creates a new "branch" that can have different values than the first branch.
I have a variable on a manger class to hold the prefab type: GameObject plantType = Resources.Load("prefabs/Tree");
On the tree itself on the script called PlantLife when the reproduction method runs: GameObject newLife = (GameObject)Instantiate(nodeManager.type,newPos, Quaternion.identity);
newPlantLife= newLife.GetComponent(); ///set new plant to the values of its parent first
newPlantLife.healthMax = healthMax;
newPlantLife.nutrientCapacity = nutrientCapacity;
newPlantLife.energyMax = energyMax;
...
//other similar variables
//chance mutation occurs and if true does this newLife.Mutate();
//Mutate is simply
void Mutate() {
int temp = Random.Range(1,17);
switch(temp) { case 1: healthMax++; break; case 2: healthMax--;
///etc etc. similar variations of the associated code. } }
This feels like it should be straight forward. I can not figure out why mutate is effecting every instance from the first placed.
in the following example if I manually place tree1 and treeA but all others come from reproduction:
tree1 > tree2 -> tree3 treeA -> treeB -> treeC
mutation in tree 3 will apply the same changes to tree1 and tree2. same if I manually change the public values, but it not effect A,B or C
Your answer
Follow this Question
Related Questions
How to instantiate an object with scripts? 1 Answer
Instantiating many objects 1 Answer
Unity UI prefab instantiation bug 1 Answer