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
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", 0, 1); } }
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