- Home /
Update base class variable value to pass it between subclasses already attached to game objects
Hello, I have a class which will have methods for subclasses and variables to pass values between them. Classes PhaseOne and PhaseTwo are already attached to game objects at the same time, when Val is 0, at least I think this goes like this. And that is why value is not updated in the second class. Question is how to update ? Some kind of "reinheritance" from parent/base class ?
public class TestClass : MonoBehaviour {
public int Val { get; set; }
}
public class PhaseOne : TestClass, IState {
public void Enter ()
{
print(Val); // 0
Val = 15;
}
}
public class PhaseTwo : TestClass, IState {
public void Enter ()
{
print(Val); // still 0
}
}
I'm not understanding what the issue is. Could you explain it a bit more please? What is the goal of this? What are you trying to achieve with these classes? If you could describe step by step what you're doing and what exactly isn't working as you'd expect, it'll be a lot easier to help you.
Regards
I use state$$anonymous$$achine script by interfaces to change states of the game. This script is attached to gameObject. Below this script are attached classes with game phases to the same gameObject. PhaseOne, PhaseTwo, PhaseThree, PhaseFour, PhaseFive. PhaseOne, PhaseTwo, PhaseFive have common methods and variables so they inherit from TestClass with tools for them. Between these classes I want to pass / share variable values because they should be able to manage player choices. The problem is when I change Val in PhaseOne Class, PhaseTwo prints out value not changed ( 0 ). What I think is because they are already added to gameObject before Val changed. I could add another script to this gameObject like ClassWithValues and have access to it by GetComponent but I want to try the way in this topic. How to do this? I hope explanation helps
Why would it? Instances of PhaseTwo don't know that instances of PhaseOne exist, neither group cares what the other does with its members. No instances of those share any values with instances of the other.
You might be confused about how inheritance works. In the above declarations, all PhaseOne and PhaseTwo inherit from TestClass is an integer called Val. And that's it. There's no special version of Val that knows what happens across instances of those other two classes, nor is there a special secret instance of the base TestClass preserving values to share across other derivatives.
Answer by MacDx · Mar 16, 2018 at 07:55 PM
The issue I can see is this:
The problem is when I change Val in PhaseOne Class, PhaseTwo prints out value not changed ( 0 ). What I think is because they are already added to gameObject before Val changed.
You are expecting that, when an instance of PhaseOne modifies its Val, the instance of PhaseTwo will automatically reflect this change on its own Val property. PhaseOne and PhaseTwo objects are separate instances and each of them have their own Val property, they are not linked in any way, even if they share a parent class. Inheritance is for code reusing , it doesn't mean that child classes will implicitly share values in any way.
With that being clarified, there's still the problem of sharing the data. IMO your best option here is to have the class that manages all of these Phase classes, pass them the correct data when needed, this could be done with events, or plain delegates, of you could simply structure the system in a way that every Phase contains the correct data before running their methods.
Hope this helps!
Answer by baribal · Mar 16, 2018 at 10:34 PM
thanks to both of you for you explanation. You're right. I'm new into inheritance and oop stuff. This helps to understand. I will go with manager class and helper class with added objects in the inspector.