Hey,
wenn ich "Gold" aufhebe, wird der Wert laut Debugger den Lebenspunkten gutgeschrieben. Klingt falsch, ist es auch.
Beim Aufruf der Methode, hat er noch nicht den Datensatz "CurrentGold" im Zugriff sondern noch den Datensatz "CurrentLife".
Ich hoffe, ich habe "nur" einen Fehler in meiner Datenstruktur, diese sieht wie folgt aus:
|
C#-Quelltext
|
1
2
3
4
5
|
public abstract class ChangeData : PlayerCommonData
{
public float CurrentValue { get; set; }
public float MaxValue { get; set; }
}
|
Da meine Daten alle einen Maximalwert haben, kann ich dann von dieser Klasse erben und setze die Werte
Die Lebenspunkte
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
|
public class PlayerHealthData : ChangeData
{
private void Awake()
{
MaxValue = 100;
CurrentValue = MaxValue;
}
}
|
Das Gold
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
|
public class PlayerGoldData : ChangeData
{
private void Awake()
{
CurrentValue = 0;
MaxValue = float.MaxValue;
}
}
|
Nun zum Ablauf, der Gegner stirbt, er droppt ein Item. Bei Kollision wird das Item zerstört und der "Inhalt", also das Gold dem Spieler hinzugefügt.
Der hinzuzufügende Wert wird also vom Gegner über das Item hin zum Spieler durchgereicht, der Aufruf
|
C#-Quelltext
|
1
2
3
4
5
|
public void ChangeGold(float goldToAdd)
{
ChangeValue(goldToAdd);
//view.UpdateBar(view.TextGold, data.CurrentValue.ToString());
}
|
Zum Schluss wird also diese Methode aufgerufen:
|
C#-Quelltext
|
1
2
3
4
|
protected void ChangeValue(float valueToAdd)
{
commonData.CurrentValue = Mathf.Clamp(commonData.CurrentValue + valueToAdd, 0, commonData.MaxValue);
}
|
Laut Debugger ist der "valueToAdd" so, wie er sein soll. CurrentValue steht aber noch auf Lebenspunkte anstatt sich dem benötigten Wert anzupassen.
Bekommt die Methode den Wechsel noch nicht mit? Oder kann ich CurrentValue in den Startmethoden nicht einfach so mehrfach setzen..?
Weil das Ganze schwer zu beschreiben ist und zu viele Klassen behandelt werden, hier mal das Repo auf Github
https://github.com/Garzec/DarknessFalls
Das Ganze spielt sich, sobald das Item die Methode "GoldOnCollision()" aufruft, um Gold hinzuzufügen (
https://github.com/Garzec/DarknessFalls/…ldController.cs) nur noch im Spielerordner ab (
https://github.com/Garzec/DarknessFalls/…/Scripts/Player). All diese Scripte liegen auf dem SpielerObjekt.
Innerhalb des Datenordners befindet sich die Basis "ChangeValues", drunter sind dann die einzelnen Klassen, wie Gold, Leben, etc. wo der CurrentValue gesetzt wird. In dem Controller Ordner befindet sich in der Basisklasse "PlayerCommonController" dann die Methode "ChangeValue(float valueToAdd)", aufgerufen dann wieder von den erbenden Klassen eine Ebene tiefer.
Danke für Antworten