AniProGuy2 Geschrieben 29. März 2017 Melden Share Geschrieben 29. März 2017 Hallo Community, Meine Frage ist eigentlich fast selbsterklärend. Ich möchte für mein Spiel ein Script anfertigen (bzw. habe es schon soweit fertig), das als Schnittstelle für Interaktionen dient (z.B. etwas steuern). Dazu wäre es hilfreich, wenn man in eine Liste Components/ Scripte legen kann, bei denen dann Voids angestoßen werden, wie z.B. "UserJoined", "UserQuitted" usw. Welche Scripte in diese Liste gelegt werden, ist dabei variabel und vorher nicht definiert. Es ist nur wichtig, dass die Voids angestoßen werden, und was dann damit gemacht wird, hängt dann vom jeweiligen Script ab. Meine Frage ist nun: ist das möglich? Also Voids in Scripten anstoßen, die vorher nicht definiert sind? Ich habe dazu nichts gefunden und wäre für jede Hilfe dankbar. MfG, AniProGuy2 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. März 2017 Melden Share Geschrieben 29. März 2017 Nur der Richtikgeit halber: Was du meinst, heißt Methoden aufrufen. Es gibt da verschiedene Wege. Das Einfachste ist vermutlich erst einmal, Unitys SendMessage zu benutzen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
AniProGuy2 Geschrieben 29. März 2017 Autor Melden Share Geschrieben 29. März 2017 Danke für die Korrektur ^^ Ich kenne es aus dem Informatikunterricht als "Anstoßen" aber das ist ja eigentlich auch egal. Ich werde es einmal damit versuchen, danke für den schnellen Rat! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
MarcoMeter Geschrieben 29. März 2017 Melden Share Geschrieben 29. März 2017 Ich würde ein Interface mit den gewünschten Methodensignaturen anlegen. Davon erben dann die besaten Scripte und implementiern dann diese Methode. An SedMessage würde ich mich erstmal nicht gewöhnen. Das liegt daran, dass dein Code an Wartbarkeit verliert, denn es wird nur ein String mit dem Methodennamen übergeben. Da kann man sich verschreiben und zur Methode kannst du auch nich direkt mit Visual Studio springen, wiel da keine richtige Referenz vorhanden ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 29. März 2017 Melden Share Geschrieben 29. März 2017 Ja, SendMessage ist auf dauer nicht das beste. Aber Interfaces sind auch keine gute Lösung, weil sie mit einigen Grundkonzepten von Unity nicht verträglich sind. Wenn wir also schon nach besseren Lösungen suchen, dann doch bitte die Aufteilung in mehrere Komponenten Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 30. März 2017 Melden Share Geschrieben 30. März 2017 Statt interfaces kann man auch abstrakte Klassen bauen, die von MonoBehaviour erben und abstrakte (oder virtual) Methoden implementieren. @Sascha, wo genau führen denn Interfaces zu Problemen? Ich hab bisher keine gefunden, wenn ich welche genutzt habe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 30. März 2017 Melden Share Geschrieben 30. März 2017 Ich stehe total auf UnityEvents: https://docs.unity3d.com/Manual/UnityEvents.html Vielleicht wäre das ja auch was für dich. Einfach Klicky-Bunti im Editor die Verbindung zwischen deinen Objekten bauen. Oder halt im Script dynamisch mit Events arbeiten. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 30. März 2017 Melden Share Geschrieben 30. März 2017 @devandart Hier mal ein Beipsiel: MyComponent obj = AddComponent<MyComponent>(); IMyComponent intrfc = (IMyComponent)obj; Destroy(obj); yield return null; Debug.Log("obj == null: " + (obj == null)); Debug.Log("intrfc == null: " + (intrfc == null)); Und: UnityEvents sind in der Tat super. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Torigas Geschrieben 31. März 2017 Melden Share Geschrieben 31. März 2017 17 hours ago, Sascha said: IMyComponent intrfc = (IMyComponent)intrfc; Das Beispiel verstehe ich nicht so ganz. intrfc auf intrfc zu casten ohne es zu initialisieren? Huh? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 31. März 2017 Melden Share Geschrieben 31. März 2017 Da hab ich mich vertippt, ist korrigiert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.