[Solved] Assigning variable without changing the value of assigned variable when the variable value is changed?
Hello, I have a problem with variable declaration. I already google it but doesn't really know what the keyword would be and don't find the answer, so I try to ask in this place instead. Sorry if the title is hard to understand..
So, I have this script:
public static CharacterDurability CountBoundary(CharacterDurability durability,PlayerHealth health)
{
CharacterDurability temp = durability;
CharacterDurability temp2 = durability;
CharacterDurability temp3 = temp2;
Debug.Log("durability1 =" + durability.stamina);
temp.stamina = durability.stamina + (durability.stamina * (health.Mood / 100)) * 20 / 100;
Debug.Log("durability2 =" + durability.stamina);
Debug.Log("temp2 =" + temp2.stamina);
Debug.Log("temp3 =" + temp3.stamina);
// durability changed after using formula above. I dunno how to make things work. Help!!
return temp;
}
The output is durability1 = 80 durability2 = 92 temp2 = 92 temp3 = 92
And then I changed the formula to
temp.stamina = temp.stamina + (temp.stamina * (health.Mood / 100)) * 20 / 100;
But the value still same as before
I don't want the values of durability to be changed (still 80), but I want to use variable temp with value of durability assigned. How can I do that? Please help me...
I'm using 5.4.0f3 personal edition, with visual studio And using Wingdows 10 64 bit as OS...
Edit:
OK, I found the answer. What I need is change the temp declaration to this one
CharacterDurability temp = (CharacterDurability) durability.MemberwiseClone() ;
And it all work now.
Answer by Ahndrakhul · Aug 22, 2016 at 07:20 AM
If I am understanding this correctly, I think that you can fix your problem by changing
CharacterDurability temp = durability;
to
CharacterDurability temp = new CharacterDurability();
As your code is right now, your three temp variables all reference the original durability instance of "CharacterDurability" that is passed into the method. Because of this, a change to one of the temp variables is a change to all of them. You need to create a new instance of CharacterDurability so that you can alter its variables (stamina in this case), without altering the stamina variable of the original.
Thanks for the answer.
Yes, your way is not wrong, but I don't want to use new class since there will be so much variables in the class to be assigned and that will be hard to do maintenance. I already found the answer as above, which use $$anonymous$$emberwiseClone(), and it finally worked!!
And again, thank you for the answer