Jump to content
Unity Insider Forum
  • Announcements

    • Lars

      Allgemeine Forenregeln   03/13/2017

      Forenregeln Nimm dir bitte einen Moment um die nachfolgenden Regeln durchzulesen. Wenn du diese Regeln akzeptierst und die Registration fortsetzen willst, klick einfach auf den "Mit der Registrierung fortfahren"-Button. Um diese Registration abzubrechen, klick bitte einfach auf den "Zurück" Button deines Browsers. Wir garantieren nicht für die Richtigkeit, Vollständigkeit und Brauchbarkeit der Nachrichten und sind auch nicht dafür verantwortlich. Die Beiträge drücken die Meinung des Autors des Beitrags aus, nicht zwangsläufig das, wofür die Forensoftware steht. Jeder Nutzer, der denkt, dass ein veröffentlichter Beitrag unzulässig bzw. störend ist, ist aufgefordert uns unverzüglich per E-Mail zu kontaktieren. Wir haben das Recht störende Beiträge zu löschen und bemühen uns, das in einem realistischem Zeitraum zu erledigen (sofern wir beschlossen haben, dass die Löschung notwendig ist). Du akzeptierst, durchgehend während der Nutzung dieses Services, dass du dieses Forum nicht dazu missbrauchen wirst, Inhalte zu veröffentlichen, welche bewusst falsch und/oder verleumderisch, ungenau, beleidigend, vulgär, hasserfüllt, belästigend, obszön, sexuell belästigend, bedrohlich, die Privatsphäre einer Person verletzend oder in irgend einer Art und Weise das Gesetz verletzen. Des Weiteren akzeptierst du, dass du keine urheberrechtlich geschützte Inhalte ohne Erlaubnis des Besitzers in diesem Forum veröffentlichst. Mit dem Klick auf den "Mit der Registrierung fortfahren"-Button, akzeptierst du zudem unsere Datenschutzerklärung und stimmst der Speicherung deiner IP-Adresse und personenbezogenen Daten zu, die dafür benötigt werden, um dich im Falle einer rechtswidrigen Tat zurückverfolgen zu können bzw. permanent oder temporär aus dem Forum ausschließen zu können. Es besteht keine Pflicht zur Abgabe der Einwilligung, dies erfolgt alles auf freiwilliger Basis.   Zusatzinformationen Der Forenbetreiber hat das Recht, Nutzer ohne Angabe von Gründen permanent aus dem Forum auszuschließen. Des Weiteren hat er das Recht, Beiträge, Dateianhänge, Umfrage, Blogeinträge, Galleriebilder oder Signaturen ohne Angabe von Gründen zu entfernen. Mit der Registrierung verzichtest du auf alle Rechte an den von dir erstellten Inhalten, bzw. treten diese an das Unity-Insider.de und Unity-Community.de ab. Dies bedeutet im Klartext, dass das Unity-Insider.de und Unity-Community.de frei über deine Texte verfügen kann, sofern diese nicht wiederum die Rechte anderer verletzen. Es besteht weiterhin kein Anspruch von registrierten Nutzern bzw. ehemaligen registrierten Nutzern darauf, dass erstellte Inhalte und/oder die Mitgliedschaft (User) wieder gelöscht werden (Erhaltung der Konsistenz dieses Forums).   Einwilligungserklärung Wenn du mit der Speicherung deiner personenbezogenen Daten sowie den vorstehenden Regeln und Bestimmungen einverstanden bist, kannst du mit einem Klick auf den Mit der Registrierung fortfahren-Button unten fortfahren. Ansonsten drücke bitte Zurück. Stand: 07.03.2011
Sign in to follow this  
Kojote

GameObject, Prefab & Find

Recommended Posts

Grüße!

Mal ne Frage, ich habe mehrere Objekte als Eltern-Objekte. Das Script liegt im Parent. Ich muss nun von diesem Script auf Komponenten in den Kindern zugreifen.

Frage ist nun, wie mache ich das besser? Weiße ich alles Manuell zu, in dem ich alles im Inspector hin und her ziehe oder benutze ich "Find" wie zum Beispiel so:

    private void Awake() {
        richtungspunktAnzeige = transform.GetChild(1).gameObject.transform; // Sucht nach "Drehfeld Glow"
    }

Ich werde die Objekte auch öfters als Prefab benutzen, da müssten ja die Verbindungen erhalten bleiben, oder? Auf der einen Seite finde ich das finden relativ praktisch, man kann nicht vergessen etwas zu verbinden, auf der anderen Seite habe ich etwas bedenken, da einige Script ja beim Start etwas finden wollen und denke das Unity überlastet sein könnte?

Was meint ihr dazu?

Danke schon mal! :)

 

Share this post


Link to post
Share on other sites

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"

Das kommt ganz allein darauf an, wie veränderbar deine Konstrukte sind.
Wenn du jetzt ein Objekt mit Unterobjekten erzeugst, wo später nichts mehr hinzugefügt oder verändert wird, dann ist es nicht schlecht, wenn du dir für alle Komponenten, die du ansprechen willst, public Variablen erzeugst und sie im Inspector zuweist. Es macht gerade dann Sinn, wenn von einem Typ mehrere vorhanden sind. Als Beispiel würde ich mal einen Körper mit mehreren BoxCollidern sehen. Da ist es per code recht schwer zu identifizieren, welchen dieser Collider du denn nun einer Variable zugewiesen hast.

Man kann das aber auch genaus im Code machen. Da es ja kein "Find" ist, was in der ganzen Szene suchen würde, sondern ja nur ein Verknüpfen einer Komponente des Objektes selbst bzw. eine Komponente einens Child, braucht das nicht viel Performance. Natürlich sollte der GetComponent<> Befehl auch nur selten, am Besten nur einmalig, aufgerufen werden.
Aber du könntest das in der Awake() mit tausenden Objekten machen, ohne Unity damit zu überlasten. Dann hätte vielleicht die ersten Sekunde mal keine 60fps. Macht auch nix.

Ich persönlich mache diese Verknüpfungen zu den Komponenten in der Regel per Code, wenn ich auf einen zentral liegende Koponete zugreifen will. Z.B. wenn sie auf der MainCamera liegt oder im Objekt selbst und/oder dessen Kindern. Und natürlich dann wenn ein Prefab Zugriff auf Komponenten anderer Objekte haben will. Einem Prefab kann man keine Info von anderen Objekten im Inspector zuweisen, die nicht selbst zum Prefab gehören. Also man kann natürlich schon, dann muss aber dieses Prefab schon in der Szene drin sein und dann bezieht sich das auch nur auf diese eine Instanz des Prefabs. Wenn das Prefab also ein statisches Szenenelement ist, macht es trotzdem Sinn, public Variablen zu erstellen, die dann im Inspector gefüllt werden.

Fazit: Nutze das Hinzufügen im Inspector, so oft es möglich ist, denn es spart Codearbeit, das finden der Componente und erleichtert das identifizieren, wenn von einem Typ mehrere in einer Szene vorhanden sind. Immer dann, wenn das Objekt selber oder das Objekt wauf das zugegriffen werden soll, nicht zu Beginn in der Szene drin sind und auch nicht zusammen ein Prefab bilden, musst du leider per Code danach suchen und die Referenz bilden. Oder andere Mechanismen nutzen um eine Kommunikation herzustellen.

  • Like 1

Share this post


Link to post
Share on other sites

Ich kann mich einfach nicht mit Hinzufügen im Inspector anfreunden und versuche es so gut wie es geht zu vermeiden. Performance mäßig ist das wohl die beste Variante und vielleicht fehlt mir einfach noch Erfahrung, aber eine Sache stört mich extrem und zwar wenn ich beim Objekt oder Script Component den Namen ändere, den ich per Inspector hinzugefügt habe, dann ist die Verbindung überall in ganzen Scene weg. Muss dann wieder manuell es überall einfügen, vielleicht gibts eine schnelle Möglichkeit, aber ich kenne sie nicht. Und ich hatte auch schon irgendwas gemacht, dass bei mir Unity gecrasht war und nach dem Neustart waren alle Verbindungen weg. Gut, dass ich noch recht kleinen Projekt hatte, was ist wenn das aber ein riesen Projekt wäre ?! :D Außerdem wird es ein wenig unübersichtlich im Insepector wenn man zu viele Objekt Verbindungen im Script hat, neben public Variablen. Sicher kann man sie in Unity ziemlich gut von einander abtrennen, aber trotzdem :D

find.object statt Hinzufügen im Inspector kostet natürlich mehr Performance,  aber ich nutze das auch öfter und was mich noch sehr vom Hinzufügen im Inspector entlastet,  ist die statische Instance von Objekten die nur einmal in der Welt vorkommen. Wie z.B Camera, UI, GameManager usw. Kann somit überall auf das Objekt zugreifen.

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×