Entwickler-Ecke

C# - Die Sprache - Code optimieren durch Eigenschaften


Garzec - Di 08.11.16 19:17
Titel: Code optimieren durch Eigenschaften
Guten Abend,
ich habe eine kleine Frage bezüglich grundlegenden Techniken. Ich entwickel ein kleines Spiel und habe ein Powerup, das das MovementSpeed höher setzt und nach einer gewissen Zeit wieder runtersetzt. Das Ganze mit Unity, aber mein Problem ist allgemein gehalten. Ich weiß, dass ich den Code durch Eigenschaften optimieren kann, als Anfänger habe ich damit aber meine Probleme. Hier der Code..

Im Player Movementscript

C#-Quelltext
1:
public float moveForce = 5000;                    


Das PowerUp Script

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
float powerUpDuration = 5;
    float speedFactor = 1.5f;
    float defaultMovementSpeed;

    private void Start()
    {
        defaultMovementSpeed = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().moveForce;
    }

    private void OnTriggerEnter(Collider collision)
    {
        if (collision.gameObject.tag == "Player")
        {
            GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().moveForce *= speedFactor;
            InvokeRepeating("SpeedManager"01);
        }
    }

    void SpeedManager()
    {
        if (powerUpDuration > 0)
        {
            powerUpDuration--;
        }
        else
        {
            CancelInvoke("SpeedManager");
            GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().moveForce = defaultMovementSpeed;
            powerUpDuration = 5;
        }
    }


Interessant bzw. wichtig sind in dem 2. Script alle stellen, wo GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().moveForce genutzt wird.
Durch Google bzw. Halbwissen weiß ich, dass man moveForce zu einer Eigenschaft machen könnte und per get und set den Wert verändern kann. Leider weiß ich nicht so recht, was zu tun ist, da ich der Eigenschaft ja erst einmal einen Default Wert zuweisen muss und hinterher den Wert verändern muss.

Könnte mir das jemand erklären? Wäre super


Ralf Jansen - Di 08.11.16 19:39

Zitat:
Leider weiß ich nicht so recht, was zu tun ist, da ich der Eigenschaft ja erst einmal einen Default Wert zuweisen muss und hinterher den Wert verändern muss.

In etwa das gleiche wie bei einem Feld. Setze den Defaultwert der Property genauso wie bei einem Feld (ab Visual Studio 2016/C# 6). In einer Vorversion von Visual Studio mußt du denn Wert (die 5000f) im Konstruktor setzen.

C#-Quelltext
1:
public float MoveForce { get; set; } = 5000f;                    



C#-Quelltext
1:
GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerMovement>().MoveForce = defaultMovementSpeed;                    


Delete - Di 08.11.16 19:42

- Nachträglich durch die Entwickler-Ecke gelöscht -


Garzec - Di 08.11.16 20:00

Vielen Dank, ihr habt mir sehr geholfen :)