Autor Beitrag
Garzec
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Di 08.11.16 19:17 
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
ausblenden C#-Quelltext
1:
public float moveForce = 5000;					


Das PowerUp Script
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.
ausblenden C#-Quelltext
1:
public float MoveForce { get; set; } = 5000f;					


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


Zuletzt bearbeitet von Ralf Jansen am Di 08.11.16 19:43, insgesamt 1-mal bearbeitet
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.11.16 19:42 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Garzec Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Di 08.11.16 20:00 
Vielen Dank, ihr habt mir sehr geholfen :)