Garzec Geschrieben 19. Juni 2017 Melden Share Geschrieben 19. Juni 2017 Hi, ich habe ein Portal, das beim Betreten eine Szene lädt. Nun gibt es ja im Spiel mehrere Portale und doppelter Code ist bekanntlich doof. Mein Ziel ist also möglichst elegant eine Basis zu schaffen, um hinterher neue Portale " am Fließband zu erzeugen". Also habe ich folgende Struktur gebastelt, // Basis Controller public abstract class PortalCommonController : EnvironmentCommonController { protected PortalData data; protected PortalView view; protected void OnTriggerEnter(Collider col) { if (CheckCollision(col, data.PlayerObject)) LoadScene(data.SceneToLoad); } } // die Daten public class PortalData : EnvironmentCommonData { public PortalData(string sceneToLoad) { SceneToLoad = sceneToLoad; } public string SceneToLoad { get; set; } } // die View mit Animationen etc. public class PortalView : EnvironmentCommonView { } // das eigentliche Portal public class PortalHubWorld : PortalCommonController { private void Start() { data = new PortalData("Ingame"); view = new PortalView(); } } Da ich noch kein wirklich "erfahrener" Programmierer bin, möchte ich mal fragen, ob man tatsächlich OnTriggerEnter vererben kann. Ich habe es getestet, es funktioniert. Ebenfalls mit mehreren Portalen, zu unterschiedlichen Szenen. Es traten keine Fehler auf. Aber OnTriggerEnter ist ja ein Event, ist es wirklich so klug, es zu vererben? Der Code an und für sich ist ja für weitere Portale sehr überschaubar. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 19. Juni 2017 Melden Share Geschrieben 19. Juni 2017 Kurze Antwort: Ja, kann man vererben. Unity schaut per Reflection nach der Methode. Das heißt stumpf gesagt, dass in der Komponente, unabhängig davon, wovon sie erben, nach einer Methode mit einem bestimmten Namen gesucht wird. Vererbte Methoden können dabei auch gefunden werden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 19. Juni 2017 Melden Share Geschrieben 19. Juni 2017 Soweit ich weiß ist "OnTriggerEnter" eine Methode der Klasse "MonoBehaviour" (seltsamerweise finde ich sie aber auch unter der Klasse "Collider"). Mich wundert, daß er ohne "MonoBehaviour" als Basisklasse seiner Klasse anzugeben überhaupt auf die Methode zugreifen kann, aber wenn Unity hier per Reflection sucht wäre das eine Erklärung. Ich hätte eher gedacht - im Sinne einer sauberen Lösung-, daß man den Inhalt in einer eigenen Methode kapselt und dann am Ende der Vererbungshierarchie diese Methode referenziert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Garzec Geschrieben 19. Juni 2017 Autor Melden Share Geschrieben 19. Juni 2017 Naja mein Basiscontroller erbt ja von EnvironmentCommonController und irgendwann erbt der oberste Controller von Monob. Ich wollte nur fragen, ob dort Probleme auftauchen könnten, bzw. Dinge erst im Nachhinein kaputt gehen könnten. Aber sehr cool, danke 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.