Zusammenfassung: Ich frage mich, ob mein Code unnötigerweise überflüssig ist. Ich bemerkte, als ich über meinen Code sah, dass ich eine unnötige Variable und if-Anweisung hatte. Beide Fire() - Methoden erreichen das gewünschte Ergebnis ohne Fehler (von dem, was ich gesehen habe). Für mich ist die "Redundant Fire" -Methode viel besser und meine bevorzugte Methode, aber ich frage mich nur, ob die Alternate-Fire-Methode aufgrund der Effizienz immer noch den Auswertbarkeitsgrad wert ist. Ich frage mich auch, ob es irgendwelche zugrundeliegenden Fehler geben könnte, die in meinen Methoden auftreten können, von denen ich nichts weiß.Redundanter Aufnahmecode
EDIT: Unity Version 4.6.3
Feuer Methode Ergebnis:, wenn die Leertaste gedrückt wird - erzeugt einen Laser, der nach oben in Richtung des Gegners mit der vorgegebenen Geschwindigkeit ausgelöst und durch das Nachladen verzögert Zeit.
Gewünschtes Ergebnis: Wenn die Leertaste gedrückt wird - spawnen Sie einen Laser und lassen Sie ihn mit der voreingestellten Geschwindigkeit nach oben auf die Feinde schießen und haben dann eine Verzögerung entsprechend der voreingestellten Nachladezeit.
Variablen:
public float reloadTime = 0.2f;
public GameObject playerProjectilePrefab;
public float playerProjectileSpeed = 10f;
private bool canShoot = true;
private float reloadCountDown;
Redundant Feuer Methode:
void Fire(){
Vector3 startPosition = transform.position + new Vector3(0 ,(renderer.bounds.size.y * 0.5f), 0);
if (canShoot && Input.GetKey(KeyCode.Space)){
canShoot = false;
GameObject playerProjectile = Instantiate(playerProjectilePrefab, startPosition, Quaternion.identity) as GameObject;
playerProjectile.rigidbody2D.velocity = new Vector3 (0, playerProjectileSpeed, 0);
reloadCountDown = reloadTime;
} else if (!canShoot){
reloadCountDown -= Time.deltaTime;
}
if (reloadCountDown <= 0f){
canShoot = true;
}
}
Alternate Feuer Methode:
void Fire(){
Vector3 startPosition = transform.position + new Vector3(0 ,(renderer.bounds.size.y * 0.5f), 0);
if (reloadCountDown <= 0f && Input.GetKey(KeyCode.Space)){
GameObject playerProjectile = Instantiate(playerProjectilePrefab, startPosition, Quaternion.identity) as GameObject;
playerProjectile.rigidbody2D.velocity = new Vector3 (0, playerProjectileSpeed, 0);
reloadCountDown = reloadTime;
} else if (reloadCountDown > 0f){
reloadCountDown -= Time.deltaTime;
}
}
Th anks im voraus!
Der Umfang dieser Frage scheint besser geeignet für den [Code-Review] (http://codereview.stackexchange.com/) Seite? ˅. –
@MrD Okay, danke, ich werde es dort erneut posten, wenn ich eine andere Frage stellen darf (40 Minuten). – jozza710
Welche Unity-Version verwenden Sie und geben Sie ** Edit ** in Ihre Frage ein und beschreiben Sie, was in der Fire-Funktion passiert. Das wird helfen, festzustellen, ob es mehr Verbesserung braucht – Programmer