frkx316 Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Hallo, ich schreibe gerade an einem Editor (window) und würde gerne wissen wie ich methoden von anderen scripten aufrufen kann? Mein Programm wir mittlerweile relativ unübersichtlich und ich würde es gerne aufteilen. Die Geschichte mit GetComponent funktioniert ja leider nicht da man ein editorscript nicht an ein Gameobject legen kann... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
6-huber Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 hast du alle protected (privat, public, etc.) richtig gesetzt? mit getComponent kannst du auf die scripte von einem gameobjekt zugreifen. die methoden und die classen müssen dafür auf public gesetzt sein Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 2. März 2020 Autor Melden Share Geschrieben 2. März 2020 Das wird nicht funktionieren, da man Editor scripte (wie schon gesagt) nicht an ein Gameobject legen kann Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Kannst du ein bisschen beschreiben, was da jetzt für Klassen im Spiel sind und wie die miteinander interagieren sollen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Thariel Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Zum Beispiel so: //irgend ein script public class WndMarkers : MonoBehaviour { public static WndMarkers singleton { get; private set; } void Awake() { if (singleton == null) singleton = this; } public void MeineFunktion() { Debug.Log("Es funktioniert!"); } } Jetzt kannst du die Funktion im Editor Script und auch von überall sonst aufrufen: WndMarkers.singleton.MeineFunktion(); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Funktioniert nur im Play Mode, nur mit einem einzelnen Objekt und ist nach wie vor immer eher eine Notlösung... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 2. März 2020 Autor Melden Share Geschrieben 2. März 2020 Da ich gerade länger nicht an meinen Rechner komme versuche ich das mal aus dem Gedächtnis so gut wie es geht zu rekonstruieren und da ich am Handy schreibe sieht es auch nicht so gut aus Void class myeditor : Editor{ Script ScriptA= wird irgendwie aufgerufen void OnGUI(){ if(Button){ ScriptA.method1(); } } } und das andere Script Public class ScriptA : Editor{ Public void method1(){ Mache irgendwas } Wie man sieht würde ich gerne bestimmte Funktionen zwischen Editorscripts Austauschen und ebenso variabeln Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 2. März 2020 Autor Melden Share Geschrieben 2. März 2020 Im Spiel soll das alles auch nicht auftauchen das soll mir am Ende helfen meinen Workflow zu beschleunigen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Also... Editor ist ja die Basisklasse für eigene Inspektoren; das heißt, du willst zwei Komponenten im Editor haben und der Inspektor des einen soll irgendetwas im Inspektor des anderen auslösen. Zuerst solltest du dir überlegen, ob du nicht in Wirklichkeit nur den Inspektor von Komponente A Komponente B manipulieren lassen willst. Denn deine Möglichkeiten sind: Von einem Inspektor auf die jeweilige Komponente zugreifen (bzw. mehrere, wenn mehrere GameObjects markiert sind), mit "target" bzw. "targets". Von einer Komponente auf eine andere zugreifen (mit GetComponent, ist klar). Was aber meines Wissens nach nicht geht (man korrigiere mich gegebenenfalls, auch wenn ich mir nicht sicher bin, ob ich den Code dafür sehen wollen würde...): Von einer Komponente auf dessen Editor zugreifen. Ich frage mich ehrlich gesagt sowieso, was das für eine Komponentenstruktur ist, bei der so ein Setup von Vorteil wäre 🤔 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 2. März 2020 Autor Melden Share Geschrieben 2. März 2020 Es soll eben nicht etwas im Inspektor des anderen auslösen (soweit ich das verstanden habe meinst du doch mit dem Inspektor das Fenster) ich möchte doch nur eine eigene Klasse Schreiben die ich in anderen scripten Aufrufen kann vielleicht dann irgendwie so das ich folgendes schreiben kann using myclass; und dann myclass.method(); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. März 2020 Melden Share Geschrieben 2. März 2020 Es geht also gar nicht um Editorklassen? Ich habe ein bisschen das Gefühl, du hast dir da irgendetwas zusammengesucht, aber vieles davon hat überhaupt nichts mit dem zu tun, was du eigentlich tun willst? Kannst du vielleicht einmal ganz spezifisch erläutern, was für Klassen/Objekte du hast, die da interagieren sollen? So ein ganz handfestes Beispiel? Denn die Lösung für dein Problem lautet ganz anders, je nach dem, was du da tun willst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 3. März 2020 Autor Melden Share Geschrieben 3. März 2020 Besser kann man es nicht beschreiben ich brauch eine allgemeine Lösung wie ich meine eigenen Klassen in verschiedenen Projekte integrieren kann Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Thariel Geschrieben 3. März 2020 Melden Share Geschrieben 3. März 2020 Du verarschst uns doch 😁 Oder du bist Lehrer und planst eine Projektwoche und bist im falschen Film gelandet 😆 Da weiss ich leider auch nicht, wie du deine Klasse in andere Projekte integrierst. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 3. März 2020 Autor Melden Share Geschrieben 3. März 2020 Nein ich verarsche euch nicht. Und wie kommst du darauf das ich Lehrer bin? 😂 Ich bin übrigens zufällig auf die passende Lösung gekommen Wenn man weis wonach man sucht findest man es relativ schnell raus Sobald ich wieder an meine Rechner bin, schicke ich euch mein Ergebnis Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 4. März 2020 Autor Melden Share Geschrieben 4. März 2020 Um eigene klassen global zu nutzen sind die befehle namespace irgendwas { ... } und using irgendwas; zu benutzen. Dabei handelt es sich um reine C# deklarierung. Mit dem folgendem Code erstellt man seine eigene Klassen so das man sie in jedem Script aufrufen kann using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Myclass { public class ScriptA : MonoBehaviour { // Property public int Numb { get; set; } // method internal int Multiply(int zahl) { return Numb * zahl; } //method internal void Method() { Debug.Log("es funktioniert"); } //Konstruktor public ScriptA() { Numb = 2; } } } wenn man dieses Script erstellt hat kann folgendes ausgeführt werden: using System.Collections; using System.Collections.Generic; using UnityEngine; using Myclass; public class ScriptB : MonoBehaviour { void Start() { ScriptA scr = new ScriptA(); Debug.Log(scr.Numb);// 2 scr.Numb = 5; Debug.Log(scr.Numb);//5 scr.Multiply(6); Debug.Log(scr.Multipl(6));//30 scr.Method();//"Es funktioniert" } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
frkx316 Geschrieben 4. März 2020 Autor Melden Share Geschrieben 4. März 2020 Am 3.3.2020 um 11:05 schrieb Thariel: Du verarschst uns doch 😁 Oder du bist Lehrer und planst eine Projektwoche und bist im falschen Film gelandet 😆 Da weiss ich leider auch nicht, wie du deine Klasse in andere Projekte integrierst. Sowas sollte man lieber lassen, wenn man selbst keine Ahnung hat.😂 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 4. März 2020 Melden Share Geschrieben 4. März 2020 Also... An dem, was du geschrieben hast, ist nichts falsch, aber es ist etwas merkwürdig. Denn Klassen, die in keinem expliziten Namespace sind, funktionieren halt auch. Du kannst den Namespace um ScriptA und das using-Statement vor ScriptB halt weglassen und es wird immer noch funktionieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 4. März 2020 Melden Share Geschrieben 4. März 2020 //Aber statt ScriptA scr = new ScriptA(); //solltest du lieber so die Komponente erzeugen (Komponente = weil die von MonoBehaviour erbt) ScriptA scr = gameObject.AddComponent<ScriptA>(); //Oder du nimmst bei ScriptA oben das ": MonoBehaviour" weg, weil du dort keine Komponenten-Logik benötigst bzw. diese nicht auf dem GameObject liegen soll 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.