2017-12-30 30 views
0

Mein Ziel ist es, während meines Kampfskripts eine Todesfunktion von CombatHandler an das Skript anzulegen, das an den Feind angehängt ist. Das Problem ist, dass die Gegner nicht gleich bleiben, was bedeutet, dass sich der Skriptname ändern muss! Zum Beispiel wird ein Feind ein Skript namens EnemySalamander, wird das nächste ein Skript EnemyGoblin (diese Steuerung der Feind Statistiken, ect)Unity C# Aufruf des Skripts über eine Zeichenfolge mit variierendem Namen

Hier wird der Code-Snippet aus dem Kampf Handler

if (healthEnemy < 0) { 
    healthEnemy = 0; 
    Debug.Log ("You killed a "+nameEnemy+". You have "+ps.health+" health left!"); 
    //pcc.gameObject.scriptname.death(); 
    clearEnemy(); 
} else if (ps.health < 0) { 
    clearEnemy(); 
    ps.health = 0; 
    Debug.Log ("You died with the enemys health left at " + healthEnemy); 
} 

I genannt habe den Teil auskommentiert, wo ich die Death-Methode des gameObject-Skripts aufrufen muss. Pcc.gameobject ist, wo ich direkten Zugriff auf das GameObject (Feind) habe, den ich angreife.

+1

Dies erfordert OOP-Prinzipien! Erweitern alle Ihre Skripte eine gemeinsame Basisklasse (z. B. "Feind")? Wenn ja, funktioniert GetComponent () '! – Draco18s

+0

Ja! Sie erben eine Klasse namens "EnemyBase", also kann ich diese Klasse stattdessen aufrufen? –

+0

öffentliche Klasse EnemySalamander: EnemyBase { \t void Start() { \t} } –

Antwort

1

Dies ist genau das, was GetComponent() tut. Die offizielle Dokumentation macht es nicht klar, dass auch in einer Klasse vorbei wird jede Komponente finden, die eine Unterklasse des angegebenen Typs ist, aber es wird:

Getting derived class using base class in GetComponent?

Ja, dies wird, wie ich arbeitet glaube, du erwartest es.

Es gibt keinen anständigen Stück Text von der Unity Answers QA wirklich zu zitieren. Es geht von diesem direkt in eine Implementierung und Ergebnisse.

Verwandte Themen