Unity Komponenten und Methoden

  • GameObject und prefab haben unteranderem Methoden für Unity Komponenten

    wie z.B.: addComponent, removeComponent, setComponentProperty, invokeComponentMethod ...

    Die Methoden arbeiten mit Reflection (String component, String property ...) :wow: coole Sache


    aber

    Ich habe leider nichts gefunden um Unity Komponenten aufzulisten.

    red51 existiert eine Möglichkeit oder API Methode um Unity Komponenten aufzulisten?


    wenn nicht, wenn keine solche Methode existiert um Komponenten aufzulisten,

    red51 kannst du bitte API Methoden einbauen die Unity Komponenten aufzulisten.

    z.B. String[] getAllUnityComponents() - minimal Lösung weil wir mit Strings arbeiten

    oder

    inklusive einer Klasse in der API die UnityComponent repräsentiert mit 3,4 Infos mehr und Methoden wie string getName()

    List<UnityComponent> getAllUnityComponents()


  • red51 kannst du bitte API Methoden einbauen die Unity Komponenten aufzulisten.

    Jein... also grundsätzlich wäre das möglich, aber das Problem ist, dass es in Unity so unendlich viele Komponenten gibt, ein nicht unwesentlicher Teil davon aber entweder veraltet, inkompatibel oder nicht für die HDRP geeignet ist :dizzy:


    Um wirklich alle kompatiblen bzw. sinnvoll einsetzbaren Komponenten zu erhalten müssten wir eigentlich von Hand eine Liste anlegen... wofür würdest du die Liste denn benötigen? Für ein konkretes Plugin, oder für eine allgemeine Übersicht (zB im Wiki)?


    inklusive einer Klasse in der API die UnityComponent repräsentiert mit 3,4 Infos mehr und Methoden wie string getName()

    List<UnityComponent> getAllUnityComponents()

    Schön wäre es wahrscheinlich, aber so ein 1:1 Mapping ist auch manchmal unerwartet viel Arbeit (besonders wenn es von der allgemeinen Grundklasse "Component" ausgeht)... und würde wahrscheinlich ein umfangreiches und sauberes Planen erfordern (unzureichend durchdachte Design-Entscheidungen in der API sind immer doof, da wir das dann meist nicht mehr so einfach ändern können) :saint:


    Sinnvoll wäre das aber wahrscheinlich auch erst dann, wenn es in der API auch wirklich entsprechende Repräsentationen jeweiliger Components geben würde (zB Rigidbody, VisualEffect usw). Andererseits gibts aber bereits zB "Collider" usw, d.h. hier müsste eigentlich alles zu diesem eher universelleren System zusammengeführt werden... unter der Haube wiederum ist es aber oft kein 1:1 Mapping, da auf dem Server ohnehin keine Unity-GameObjects o.ä vorliegen, sondern das ganze nur abstrakt repräsentiert ist... und manche Quirks der Unity HDRP von der API ohnehin ausgeblendet werden (zB dass eine Light-Component alleine nicht ausreicht, sondern ebenfalls eine HDAdditionalLightData-Component erforderlich ist, gleichzeitig aber nur die Hälfte der Light-Component-Properties funktionieren, während die andere Hälfte als gleichnamige Methode in HDAdditionalLightData zu finden ist usw).


    Unterm Strich leider wahrscheinlich wirklich einiges an Aufwand :(


    eine API Methode die Unity MonoBehaviour Methoden per Reflection aufrufen kann

    z.B.: invokeMonoBehaviourMethod() oder so

    Theoretisch müsste das eigentlich auch mit invokeComponentMethod() funktionieren (da MonoBehaviour von Behaviour abgeleitet ist, welches wiederum eine Component ist) ^^ Welche Methode von Behaviour/MonoBehaviour würdest du denn auf dem Wege aufrufen wollen?

  • Jein... also grundsätzlich wäre das möglich, aber das Problem ist, dass es in Unity so unendlich viele Komponenten gibt, ein nicht unwesentlicher Teil davon aber entweder veraltet, inkompatibel oder nicht für die HDRP geeignet ist

    Das ist mir sehr gut klar und bewusst.

    von Hand eine Liste anlegen.

    Ich rate dir davon echt ab.


    red51 aso, ich meinte Unity Komponenten aufzulisten die schon auf GameObject oder prefab drauf sind. !
    NICHT alle die Unity so hat ... uff
    Unteranderem will ich wisse ob z.B.: addComponent erfolgreich war, oder welche Komponente kann ich mit setComponentProperty glücklich machen ...

    Für ein konkretes Plugin, oder für eine allgemeine Übersicht (zB im Wiki)?

    Konkretes Plugin, nein, noch nicht. - In erster Linie für Forschung und Entwicklung .. am Ende wollte ich ein Plugin baue der etwas allgemeiner funktioniert,

    ich mag Hartcodierte Sachen nicht und arbeite sehr gerne mit Reflections.
    nein, keine allgemeine Übersicht ... dafür ist die Unity Doku.


    sinnvoll einsetzbaren Komponenten zu erhalten müssten wir eigentlich von Hand eine Liste anlegen.

    Dafür existiert die Unity Dokumentation, teilweise R.W. Wiki und Erfahrungen die ein Unity User sammelt.


    Wenn ich nebenbei herausfinden kann welche Komponenten ein NPC im Rucksack oder ein Möbelstück in der Schublade hat

    dann bin ich dir auch nicht böse ;):D


    also

    String[] getAllUnityComponents() - minimal Lösung weil wir mit Strings arbeiten, würde für GameObject und prefab reichen

    um zu wissen welche Komponenten schon drauf sind.

  • aso, ich meinte Unity Komponenten aufzulisten die schon auf GameObject oder prefab drauf sind. !
    NICHT alle die Unity so hat ... uff
    Unteranderem will ich wisse ob z.B.: addComponent erfolgreich war, oder welche Komponente kann ich mit setComponentProperty glücklich machen

    Achso, das habe ich falsch verstanden :saint: So macht das auf jeden Fall mehr Sinn. D.h. du möchtest eine Liste aller Components, die auf dem geladenen Prefab vorhanden sind? Im Falle des Basis-GameObject hingegen wäre es dann meist wahrscheinlich Transform, MeshFilter und MeshRenderer, bei Prefab hingegen dann ggf. noch die vom User im Editor erstellten Components.


    Ich muss nur mal schauen, wie wir das am besten umsetzen... der Server lädt normalerweise gar keine Assetbundles, sondern nur der Client. Es gibt bereits eine Ausnahme (getAllAssetNames()), aber für Components müssten die ganzen Prefabs geladen werden (samt Texturen usw). Vmtl. wäre hier ein Cachen zwingend erforderlich, damit Mehrfachaufrufe nicht den Server zuballern... ich schaue mir das auf jeden Fall mal genauer an :)

Participate now!

Don’t have an account yet? Create a new account now and be part of our community!