Jump to content
Unity Insider Forum

All Activity

This stream auto-updates

  1. Today
  2. Hallo, Sieht gut aus.­čĹŹ Gru├č Jog
  3. Hallo, Auch von mir ein Willkommen und viel Spa├č mit Unity! ­čÖé Gru├č Jog
  4. Ich versuche schon eine Weile einen Endboss zu animieren. Eigentlich die Bewegung zu animieren. Ab einem bestimmten "Zerst├Ârungslevel" soll sich z.B. der ein Teil des Raumschiffes abspalten und solche Sachen. Jetzt habe ich immer wieder Probleme weil die einzelnen Animationssequenzen nicht ├╝bereinstimmen und andere Probleme. Jetzt bin ich mir nicht sicher ob es das richtige System ist sowas wie im Video (oben) ├╝ber die Unity-Animation zu realisieren. Meine Frage: Ist so was grunds├Ątzlich m├Âglich? Oder soll ich meine Energie lieber in ein eigenes System investieren um das zu realisieren? oder so was:
  5. Danke, Sascha. Ja, ich dachte, ich schreibe mal ÔÇ×etwasÔÇť ├╝ber mich, um mich vorzustellen. W├Ąre ja langweilig, wenn ich nur schreiben w├╝rde: ÔÇ×Hey, ich bin Ago, ich finde Programmieren cool, viele Gr├╝├če." ­čÖé
  6. Yesterday
  7. Hey, willkommen! Das ist doch mal eine motivierende Backstory. Viel Erfolg!
  8. Hallo, die ersten sechs Missionen sind jetzt fertig. In der n├Ąchsten Region wird es dann um die Errichtung von Monumenten und Sehensw├╝rdigkeiten gehen. Hier ein Screen aus der 6. Mission. Die H├Ąuser haben bereits teilweise die f├╝nfte Ausbaustufe.
  9. Willkommen! Nachschlagewerke sind immer gut. Der Carsten Seifert war vor einigen Jahren auch hier im Forum unterwegs (zur Zeit von Unity 5). Viel Spa├č bei uns.
  10. Hallo zusammen, ich freue mich, dass ich dieses Forum gefunden habe. Ich hei├če Ago, bin 39 Jahre alt und lebe in M├╝nchen. Meine Muttersprache ist Bosnisch. Ich bin in Deutschland geboren bzw. aufgewachsen und arbeite seit 2004 bei einer M├╝nchner Polizeidienststelle als Schreibkraft/Angestellter. Durch meinen Beruf bin ich sehr fit in der neuen deutschen Rechtschreibung und beherrsche das 10-Finger-System, was beim Programmieren nat├╝rlich auch sehr hilfreich ist. Das Programmieren habe ich seit einigen Monaten entdeckt. Mein Vater ist Rentner und interessiert sich ebenfalls f├╝r das Programmieren, hat viele B├╝cher und belegt in Udemy diverse Kurse. Im Februar dieses Jahres kam es dazu, dass ich pl├Âtzlich Panikattacken bekommen habe. Ich war dann zwei Wochen krankgeschrieben. In dieser Zeit war ich bei meinen Eltern, um nicht allein zu sein. Und um auf andere Gedanken zu kommen, habe ich mir gedacht, dass ich mal in die Welt des Programmierens eintauche, und seitdem hat es mich erwischt. ­čÖé Meine Panikattacken sind seitdem auch verschwunden und bis jetzt ÔÇô zum Gl├╝ck ÔÇô nicht mehr aufgetaucht. Ich hatte dann ein paar Monate nicht ge├╝bt, sodass ich wieder von vorn anfangen musste. Im Oktober 2022 habe ich mir einen Wunsch erf├╝llt und viel Geld daf├╝r gespart/investiert: Ich habe mir einen nagelneuen Gaming PC mit allem Drum und Dran gekauft. Und seitdem ├╝be ich t├Ąglich (!) C# bzw. in Unity Spieleprogrammierung, da es einfach mit dem neuen Computer viel mehr Spa├č macht und es mit dem gro├čen Bildschirm ergonomischer ist. Wenn ich mal Lust habe, zocke ich nat├╝rlich auch, das ist ja klar. ­čÖé Mir ist nun auch bewusst geworden, wie viel Arbeit und Energie eigentlich dahintersteckt, um ein Spiel zu programmieren. Ich finde das Programmieren auch deswegen super, weil man auch logisch nachdenken muss. Und das ist nat├╝rlich auch ein gutes Training f├╝r unser Gehirn bzw. f├╝r unser Ged├Ąchtnis. Wenn der Code dann funktioniert und z. B. der Player das macht, was man wollte, werden nat├╝rlich auch Endorphine ausgesch├╝ttet und man ist dann noch motivierter. ­čÖé Ich bin mega begeistert von der Spielengine Unity und finde es toll, dass es so viele Tutorials diesbez├╝glich gibt und jeder sich gegenseitig unterst├╝tzt. An dieser Stelle m├Âchte ich auch an euch ein herzliches Dankesch├Ân aussprechen, dass ihr euch gegenseitig helft. Zurzeit arbeite ich das Buch ÔÇ×Einstieg in Unity, 2D- und 3D-Spiele entwickelnÔÇť (Autor Thomas Theis) Schritt f├╝r Schritt durch, das ich sehr gut finde und jedem empfehlen kann. Eine neue Auflage ist laut dem Autor in Planung und kommt, denke ich, irgendwann im Jahr 2023 raus. Was ich auch zum Nachschlagen empfehlen kann, ist das Buch ÔÇ×Spiele entwickeln mit Unity 5ÔÇť vom Autor Carsten Seifert. Es gibt manche Sachen, die ich derzeit noch nicht so ganz verstehe, z. B., was es bedeutet, wenn eine Variable static ist oder was ÔÇ×staticÔÇť generell bedeutet, aber ich denke, dass es mit der Zeit dann irgendwann klick machen wird. Mein Ziel ist es, wie bei vielen anderen sicher auch, ein eigenes Spiel zu entwickeln, ein Rollenspiel w├Ąre nat├╝rlich der Hammer. Da ich hilfsbereit bin und euch auch gerne unterst├╝tzen m├Âchte, werde ich das nat├╝rlich machen, falls ich eine Frage sehe, die ich, wenn meine Programmierskills ausreichen, beantworten werde. Und wer z. B. einen Lektor f├╝r Texte ben├Âtigt, die in euren Spielen vorkommen, sagt einfach Bescheid und ich werde sie nach Fehlern durchsehen bzw. lektorieren ÔÇô kostenlos nat├╝rlich. Ich w├╝nsche euch allen weiterhin ganz viel Programmierfreude und bleibt weiter an den Tasten bzw. gebt niemals auf! Viele Gr├╝├če Ago
  11. Last week
  12. Moin! SpriteRenderern ist ihre Reihenfolge in der Hierarchie egal. Deren Zeichenreihenfolge ist undefiniert, solange sie auf demselben Layer mit derselben sortingOrder sind. Du kannst den SpriteRenderer ansprechen und einen sortingOrder setzen, der dem Index des Elements entspricht: temp.GetComponent<SpriteRenderer>().sortingOrder = snakeBody.Count;
  13. Zun├Ąchst einmal habe ich ein GIF erstellt, um zu zeigen, wie es aktuell bei mir aussieht. GIF zur aktuellen Lage und ein Bild wie es aussehen sollte. Bild wie es sein sollte Ich habe eine Liste von GameObjects, die die BodyParts Tempor├Ąr hinzuf├╝gen und in der richtigen Zeit und Position instanziieren. Jetzt funktioniert das wie erwartet, aber ich m├Âchte das neue bodyParts unter einander spawnen statt dar├╝ber. Man kann erkennen das der Kopf "unter" den neuen K├Ârperteilen erscheint, aber er sollte immer oben sein und jedes neue K├Ârperteil sollte unter einander erscheinen. **Was ich versuchte:** : ``` bodyParts.transform.SetAsFirstSibling(); ``` Das ver├Ąndert aber nur die Hierarchie Anordnung, den selben Effekt habe ich auch wenn ich die Clone manuell verschiebe, das hat aber keinen Einfluss darauf ob etwas ├╝bereinander oder untereinander erscheint. Daher hat das f├╝r mich nicht funktioniert. Ich weis das es m├Âglich ist, schlie├člich nutze ich ein bereits bestehendes Unity Game als Vorlage nutze zu meinen Lernzwecken. Hoffe hier ist jemand der sowas in der Art schon gel├Âst hat. **Hier mein Code der die bodyParts erstellt:** private void CreateBodyParts() { if (snakeBody.Count == 0) { GameObject temp1 = Instantiate(bodyParts[0], transform.position, transform.rotation, transform); if (!temp1.GetComponent<MarkerManager>()) temp1.AddComponent<MarkerManager>(); if (!temp1.GetComponent<Rigidbody2D>()) { temp1.AddComponent<Rigidbody2D>(); temp1.GetComponent<Rigidbody2D>().gravityScale = 0; } snakeBody.Add(temp1); bodyParts.RemoveAt(0); } MarkerManager markM = snakeBody[snakeBody.Count - 1].GetComponent<MarkerManager>(); if (countUp == 0) { markM.ClearMarkerList(); } countUp += Time.deltaTime; if (countUp >= distanceBetween) { GameObject temp = Instantiate(bodyParts[0], markM.markerList[0].position, markM.markerList[0].rotation, transform); if (!temp.GetComponent<MarkerManager>()) temp.AddComponent<MarkerManager>(); if (!temp.GetComponent<Rigidbody2D>()) { temp.AddComponent<Rigidbody2D>(); temp.GetComponent<Rigidbody2D>().gravityScale = 0; } snakeBody.Add(temp); bodyParts.RemoveAt(0); temp.GetComponent<MarkerManager>().ClearMarkerList(); countUp = 0; } }
  14. Hallo, eine neue kleine Vorabversion meines Siedlerprojekts steht zum Testen zur Verf├╝gung. Insgesamt kann sich der Spieler an f├╝nf Aufgaben beweisen, dass er das Dorf entsprechend der Vorgaben aufbauen kann. Die Auswahl der ben├Âtigten Geb├Ąude und Objekte steigt mit jeder Aufbaumission an. Beispielhaft muss der Spieler Vorgaben bez├╝glich der Anzahl der Siedler, gesammeltes Gold oder eine bestimmte Hausbewertung erzielen. Es gibt zahlreiche Farmen und Geb├Ąude, die die Rohstoffe zu ben├Âtigten Waren weiterverarbeiten. Download: Siedler 0.3.0
  15. Moin! Dein Objekt besteht ja aus irgendwelchen Daten. Wenn du von einem Mesh (also einem 3D-Modell) redest, dann hast du einen Haufen Punkte (Vertices), die wiederum zu einem Haufen Dreiecke (Triangles) verbunden werden, um eine 3D-Form darzustellen. Um den Mittelpunkt eines Meshs zu finden, musst du dir diese Punkte anschauen und dann von den Mittelpunkt von ihnen finden. Dazu kannst du z.B. eine AABB (Axis-Aligned Bounding Box) berechnen, oder ggf. auch einfach die nehmen, die Unity sowieso schon hat. Der Mittelpunkt dieser Box ist dann der Mittelpunkt deines Objekts. Ist das das, was du suchst, oder meinst du eher etwas anderes?
  16. Servus Leute, ich hab eine Frage. Wie kann ich den Mittelpunkt eines Objektes ermitteln. Zum Beispiel von einen Cube oder ├Ąhnliches. Google will mir keine Infos geben haha ­čśů ich bedanke mich f├╝r die Antwort und noch einen sch├Ânen Tag lg.
  17. Earlier
  18. Ahhh..... sche auf mein Haupt ­čść ich versgesse die st├Ąndig. Ja, damit sollte es klappen.^^ Danke euch beiden.
  19. Was ich ja sogesehen damit getan habe... Die Liste k├Ânnte bis ins unendliche gehen. Deswegen wei├č ich nicht ob das so sauber ist. malzbie meinte damit die tats├Ąchlichen Layer. Wenn du die sortingOrder-Eigenschaft genommen hast, ist das schon v├Âllig in Ordnung so. In dem Moment, wo du mit einem Laufindex auf deine Liste zugreifst, solltest du keine LinkedList mehr nehmen. Kann gut sein, dass einige LinkedList-Implementationen deshalb gar keinen Index-Zugriff erlauben. Nimm einfach ne normale Liste. Wenn du nicht zehntausende Elemente hast, bringt dir ne LinkedList keinen Performance-Vorteil. Ich nenne die inzwischen "MonoBehaviour-Events", und ich glaube das machen viele so. Mach selber nen Raycast (oder vermutlich eher Physics2D.OverlapPointNonAlloc) und filtere dir dann das Objekt mit der h├Âchsten sortingOrder raus.
  20. Ich glaube zunehmend, dass ich meinen Singleton-Artikel mal ├╝berarbeiten muss. Ich bleibe dabei, dass es wichtig ist, das im Gang of Four-Buch vorgestellte Pattern klar von dem zu trennen, was die Leute so in Unity machen. Einfach schon, weil es im Unity-Kontext Serialisierung und MonoBehaviour nur f├╝r Instanzen gibt. Was im Artikel noch fehlt ist, dass ich mir angew├Âhnt habe, dass Code m├Âglicht wenig Restriktionen im Editor erzeugen soll. Deshalb finde ich das Standardpattern f├╝r Unity- Singletons auch so doof - der Code tut nur was er soll, wenn man auch ja nicht vergisst, das Ding in die Szene zu schmei├čen. Wenn man wie @MaZy ein anderes Pattern benutzt, mit dem der Code tut, egal was mit im Editor anstellt... dann sieht das schon gleich ganz anders aus. Ein Beispiel f├╝r so ein Pattern w├Ąre dieses: public static class MusicPlayer { private static AudioSource audioSource; [RuntimeInitializeOnLoadMethod] private static void Initialize() { var go = new GameObject("Music Player"); go.AddComponent<AudioSource>(); go.hideFlags = HideFlags.HideAndDontSave; Object.DontDestroyOnLoad(go); } public static void PlayMusic(AudioClip clip) { audioSource.Stop(); audioSource.clip = clip; audioSource.Play(); } } Das ist halt im Prinzip auch ein Singleton, und es ist auch sinnvoll, weil eine statische Klasse halt keine AudioSource haben kann - dazu braucht man eine GameObject-Instanz. Allerdings erzeugt das Ding sich sein GameObject automatisch bei Spielstart, macht es unsterblich und versteckt es. Im Editor kriegst du nichts davon mit. Und vor allem muss keiner daran denken, das Ding auch in eine Szene einzuf├╝gen, damit der Code tut was er soll. Es bleibt nur noch Serialisierung als Problem, das ich f├╝r mich ├╝ber SettingsProvider gel├Âst habe - ich kann meinen statischen (oder beliebigen anderen) Klassen damit in den Project Settings Referenzen und andere Werte zuweisen. Hab das in Soda eingebaut *hust* Lange Rede, kurzer Sinn... ich muss mal den Artikel updaten.
  21. Singleton kurz und knapp bedeutet, dass man SICHER stellt, dass ein Objekt nur EINMAL existiert. Dabei ist egal, ob du das selber erstellt hast oder direkt eine Funktion aufrufst. In Unity mit GameObject bedeutet das, dass dein Monobehaviour ├╝berpr├╝ft, ob ├╝berhaupt eine Instanz existiert. Wenn nicht, wird dann ein GameObject erstellt, dann Component hinzugef├╝gt und nun ist es verf├╝gbar. Die Frage ist, wie kannst du das ├╝berpr├╝fen? Dazu wird static variable verwendet. Der ├╝bliche (simple) Weg wurde schon durch @Singular gezeigt. Ein Singleton kann, aber muss nicht von au├čen erreichbar sein. Beispiel Playerlist.Instance.Players w├Ąre von au├čen. Nun kann man das anders machen. Playerlist.Players. Jetzt greifst du auf etwas zu, aber l├Ąsst die Instance raus, sonst k├Ânnte man auch auf Member zugreifen. Vllt will man ja damit nur intern arbeiten. Meine Empfehlung bei sowas ist, dass man den selbst initialisieren sollte. Beispiel AudioPlayer.Init(). Nun AudioPlayer.Clips. Allerdings ist das bei Unity nat├╝rlich problematisch. Was wenn man eine Scene testen m├Âchte, aber AudioPlayer.Init() erst im Hauptmenu aufgerufen wird? Schon kommen die erste Problem (aber daf├╝r gibt es einige L├Âsungen.. Gott sei Dank :D) WANN sollte man das verwenden? Ein Beispiel wo es sinn macht. AudioPlayer.Play("pfad/zu/mein/sound.wav", volume, pitch, isLoop). Das ist ein gutes Beispiel. Mein ParticleSpawn System funktioniert so ├Ąhnlich. Ein besseres Beispiel w├Ąre, wenn es ├╝berhaupt kein GameObject oder so erstellen muss. Beispiel Steamworks von Facepunch funktioniert ohne GameObject und ist von ├╝berall zugreifbar. WANN sollte man das NICHT verwenden? Ein Beispiel Player Klassen um da auf Variable zuzugreifen. PlayerHealthComponent.instance.Health. Ich benutze selbst sehr selten Singletons, aber ich habe auch daf├╝r eine Technik entworfen, welches mir gew├Ąhrleistet, dass es ├╝berall, egal in welcher Scene ich bin auch funktioniert. Leider brauche ich daf├╝r ScriptableObject (geht auch ohne, aber finde ich unsch├Ân).
  22. Okay, nice das hat geklappt mit. Und es ist tats├Ąchlich so, Hohe Zahl = Ganz oben, niedrige Zahl = ganz unten. Ich habe es jetzt so gemacht, dass alle Objecte, sich in ihrer Awake Methode bei einem Static Object anmelden und dort in eine Liste eingetragen werden. Beim Anklicken des Objects, bekommt dieses die Zahl "List.Count" zugewisen und alle anderen werden dann absteigend durch die Liste zugewisen. Also bekommen sozusagen die Zahl an der Sie stehen in der Liste (invertiert). Ob das jetzt so sauber ist, wei├č ich nicht... Ich wei├č halt nicht, wann so etwas in die Knie geht, da mit jedem Klick jedes Object in der Spielwelt einmal angesprochen wird, bzw deren SpriteRenderer. Mein "Spiel" ist sogesehen kein richtiges Spiel... (kennt Ihr TabelTopSimulator auf Steam?) du darfst es dir als Schreibtisch vorstellen auf dem alles M├Âgliche liegen kann. Spielkarten, W├╝rfel, ... Dementsprechend kann alles immer ├╝berall liegen und auch ├╝ber und untereinander. Es soll zwar einzelne Objekte geben, die immer oben liegen (W├╝rfel) bzw immer unten liegen (Spielbrett) aber das mal am Rande und darum k├╝mmere ich mich sp├Ąter^^. Was ich ja sogesehen damit getan habe... Die Liste k├Ânnte bis ins unendliche gehen. Deswegen wei├č ich nicht ob das so sauber ist. Ich habe gerade mal versucht, dass das oberste Object einfach auf 5 gesetzt wird und alle anderen auf 3, dann geht es nicht mehr. Im zuge dess stellt sich mir nochmal die Frage: Warum geht das hier mit einer Linked List nicht: layerList[0].sortingOder = 5; bzw, wie komme ich am besten an das erste oder xte Objekt dran??? Derzeit mache ich das ├╝ber das Unity Event (ist das ein Event? ­čĄö) OnMouseDown bzw. OnMouseDrag usw. wie pr├╝fe ich das denn am besten? Es werden immer noch Objekte, die eigentlich hinter einem anderen sind, zuerst bewegt. Nicht immer, aber leider sehr oft. Alle Objekte haben in diesem Fall einen BoxCollider2D. Wenn der Spieler Klickt, wird das Objekt nach oben im sortingOrder gesetzt, "Draged" der Spieler, wird das Objekt an den Mauszeiger geheftet und bewegt sich mit. Theoretisch m├╝sste beim Klick gepr├╝ft werden ob sich zwischen dem angeklickten Objekt und dem Mauszeiger Objekte sind, die in der Liste weiter oben liegen. Ich glaube, w├╝rden ALLE Objekte dem Mauszeiger folgen w├Ąre der Fall klar, da mehrere Objekte gefunden wirden die unter dem Mauszeiger sind aber da nur eins folgt (Was ja auch sein soll) bin ich mir nicht sicher, wie ich da vor gehen soll.
  23. Hallo, ein kleiner virtueller Rundgang durch ein kleines Dorf.
  24. Ne. Es gibt gleich eine Handvoll Dinge, die "Layer" hei├čen. Das da ist der GameObject-Layer - der wird f├╝r selektives Ausblenden von Objekten - Sichtbarkeit, Beleuchtung oder in der Physik - benutzt. Du kannst z.B. deine Raycasts durch bestimmte Layer hindurchschlie├čen lassen. Oder die Kollision zwischen zwei Layern komplett abschalten. Hier brauchen wir den "Sorting Layer", das ist eine Eigenschaft von Renderern. Im SpriteRenderer kannst du das direkt einstellen. Da gibt es zum einen die Layer selbst, von denen du ein paar anlegen kannst. Typisch w├Ąren so Layer wie "Background, Gameplay, Foreground" oder so. Reicht dann auch. Was du dir hier anschauen musst, ist aber die zweite Eigenschaft: "Sorting Layer". Das ist schlicht eine Zahl, die innerhalb eines Layers benutzt wird, um eine Ordnung festzulegen. Ob hohe Zahl = vorne oder = hinten ist, kann ich mir immer nicht merken Da das nur eine Zahl ist, musst du hier nichts anlegen. Du kannst also sowas machen: for (var i = 0; i < spriteRenderers.Length; i++) { spriteRenderers[i].sortingOrder = i; } (for-Schleife nat├╝rlich nicht bei einer LinkedList, da br├Ąuchtest du eine foreach-Schleife die nebenbei hochz├Ąhlt... oder du nimmst halt ne List)
  25. Also ich sehe da 2 Wege. Eintweder du gehst davon aus, dass alle Objekte zu Beginn in der obersten Ebene sind, oder sie sind zu Beginn in der untersten Ebene. Es ist ja eine Frage der Verortung. Also wie und wo k├Ânnen Sprites ├╝bereinander liegen. Geht es da nur um eine Art Inventory, dann ist es ja leicht zu wissen, welche Sprites an welcher Position liegen. Und wenn sie dann gestackt w├╝rden, dann m├╝sste(n) das(die) Sprite(s) im Layer jeweils eins nach unten. Immer nur das Sprite im obersten Layer kann angeklickt werden. Das w├Ąre einfach f├╝r den Test und ginge ohne Liste. Wird das oberste Sprite aufgehoben, dann m├╝ssten alle da drunterliegenden eine Ebene h├Âher im Layer. Das w├Ąre ein kleiner Befehl (event) f├╝r alle Sprites im entsprechenden Fach. Ist es aber irgendwie in einer Spielewelt, wo zuf├Ąlligerwiese Sprites voreinander liegen w├╝rden, dann wird das schon schwieriger, denn jetzt musst du es irgenwie schaffen, diesen Haufen zu gruppieren. Da sehe ich klare Vorteile bei einer oder mehreren Listen, die immer dann da sind, wenn es zu Anh├Ąufungen von Sprites kommt. Was ich aber noch wichtig f├Ąnde, ist die Tatsache, dass man nicht unendlich viele SortingLayer anlegen muss. Man braucht vielleicht 3 f├╝r das Stacken. Das oberste Sprite soll nat├╝rlich immer oben gezeichnet sein. Das da drunter dann auch so, dass es optisch direkt unter dem Obersten liegt. Aber alle weiteren Sprites des Stacks k├Ânnen gemeinsam im untersten Layer liege. Ist vollkommen egal, wann welches gezeichnet wird. Nur musst du dann intern wieder eine Liste haben, die die richtige Reihenfolge f├╝r alle Sprites darstellt. Und dann ist es wirklich gut, wenn in der Liste das Oberste gel├Âscht w├╝rde und alle anderen nachrutschen. Die jetzt obersten 2 Sprites verschieben sich um einen Layer, f├╝rs optische, und alle weiteren bleiben im untersten Layer. Der Test, welches Sprite denn anklickbar ist, ist ja ganz einfach ├╝ber die Liste zu ermitteln.
  26. ­čś▒ Ich wu├čte, dass dieses Thema mich f├╝her oder sp├Ąter einholen wird... Ich muss euch beiden gestehen, ich habe keine Ahnung von Layern und was sie tun. Ich gehe mal vorsichtig davon aus, dass sie "Schichten" sind wie die Objekte angezeigt werden. Im Inspector gibt es ja auch das sch├Âne Dropdownfeld "Layer - Default", hat das etwas damit zu tun? Alle Objekte in eine Liste stecken, Check! Das bekomme ich hin und ist ├╝berschaubar und machbar. Bei klick das Objekt finden und auf Platz 1 setzen, Check! Das ist auch kein Problem. --> LinkedList.Remove(Renderer), LinkedList.AddFirst(Renderer) H├Ąh? Wie ├Ąndere ich den Layer? Wahrscheinlich dar├╝ber, richtig? L├Ąuft das dann dar├╝ber, dass ich GetComponent<SpriteRenderer>().sortingLayerID = 0. Muss ich dann nicht nochmal durch die ganze Liste durch und jedem Object die n├Ąchst h├Âhere Zahl zuweisen also sozusagen an welcher Position sie sich in der Liste sie sich gerade befinden? Danke schpn mal f├╝r eure Hilfe
  27. Hey, da hab ich doch mal einen Blogeintrag zu geschrieben http://blog.13pixels.de/2019/unity-and-the-mysterious-singleton/ Aber ich erz├Ąhl trotzdem mal. Das klingt furchtbar. Ich hoffe f├╝r deinen Kollegen, dass du seine Aussage nur nicht gut verstanden hast Ein Singleton (bzw. das, was unter Unity-Entwicklern als solches bezeichnet wird) ist dazu da, dass eine Referenz auf ein einzigartig gemeintes Objekt global bekannt gemacht wird. Einzigartig k├Ânnte z.B. die Spielerfigur, die Ziellinie oder die Lebensanzeige des Spielers im UI sein. Mit diesem Muster kannst du Objekten der jeweiligen Klasse sagen, dass sie sich im Code als "DAS" Objekt dieser Sorte anmelden sollen. Jeglicher anderer Code kann dann auf dieses Objekt direkt zugreifen, ohne es erst heraussuchen zu m├╝ssen. Hast du im Vergleich dazu eine beliebige Menge von Objekten (z.B. Zombies), dann kannst du schlecht einfach so auf eines dazu zugreifen, weil der Computer nat├╝rlich nicht raten will, welchen der im Zweifelsfall vielen Zombies du gerade meinen k├Ânntest. Nun stellt sich aber, wenn man lang genug ├╝ber das Thema nachdenkt, eben jenes heraus: und genau das ist auch die Hauptkritik am originalen (nicht-Unity-bezogenen) Singleton-Pattern. Wenn man verstanden hat, was eine statische Klasse ist, dann ist es nicht schwer zu erkennen, dass eine Objekt, von dem immer nur eines existieren soll, im Prinzip dasselbe macht wie statische Klasse (was ein Ding ist, das Daten speichern oder Methoden haben kann, und es kann immer nur eine davon pro Sorte im Programm geben). Im Unity-Kontext gibt es ein paar mehr Argumente f├╝r dieses Pattern. Zum einen k├Ânnen nur Component-Instanzen MonoBehaviour-Events (wie z.B. Update) empfangen und zum anderen kann man nur auf Objekten in der Szene, Prefabs oder ScriptableObjects Werte serialisieren (bzw. anders gesagt: im Editor eingeben). Wenn du z.B. eine Textur aus den Assets im Editor zuweisen willst, geht das nicht in eine statische Klasse hinein. Wenn man versucht, sich zu diesem Pattern zu informieren, dann h├Ârt man gef├╝hlt sehr viele Stimmen die entweder aus ihrer begrenzten Erfahrung heraus voll daf├╝r sind, oder andere die immer mal wieder geh├Ârt haben dass das schlecht sein soll und das deswegen verteufeln. Meiner Meinung nach gibt es Situationen, in denen die Anwendung sinnvoll ist, aber auch sehr oft Leute, die das Ding voll toll finden, es viel zu oft benutzen und sich dann wundern warum ihr Projekt so schlecht voran geht. Besonders ├╝bel sind die "Manager"-Klassen. Das sind dann oft so Klassen, die gar nicht gro├čartig Teil der Szene sind, sondern einfach nur da sind, um irgendeine globale Aufgabe zu erf├╝llen. Zum Beispiel der "LevelManager". Der hat dann Methoden zum Laden verschiedener Level. Und da wird's dann halt echt l├Ącherlich, weil eine statische Klasse genau dasselbe machen kann, ohne dass man deine Szenen-Hierarchie zum├╝llt. Wenn dich das weiter interessiert, empfehle ich dir daf├╝r das Video meinem verlinkten Artikel. Warum ich erstmal das Gesicht verzogen hab, als ich das Zitat von deinem Kollegen gelesen habe: Wir hatten hier fr├╝her mal so Anf├Ąngertutorials, von denen eines genau dieses Pattern vorgeschlagen hat, damit ein Knopf eine T├╝r ├Âffnen kann. Wir hatten dann alle Nase lang die Frage, wie man das denn machen soll, wenn man zwei T├╝ren und zwei Kn├Âpfe hat. An dieser Stelle war das Pattern n├Ąmlich total fehl am Platz. Darum: Static und das Singleton-Pattern sind nicht dazu da, dir das Leben einfacher zu machen, wenn es generell darum geht, auf andere Objekte zuzugreifen. Sie erlauben es dir, "das eine" Objekt einer Sorte (den einen Spieler, die eine Health Bar) global zugreifbar zu machen, sodass man da nicht unn├Âtig Referenzen definieren und Objekte suchen muss. Und wenn du ein Objekt hast, das sowieso Teil deiner Szene sein soll, weil es dort hineingeh├Ârt, und du dir sicher bist, dass du davon immer nur eines zur Zeit haben wirst - dann kannst du dieses Pattern guten Gewissens verwenden. Der einzige Fehler, den du nicht begehen solltest, ist, das Ding st├Ąndig zu benutzen ohne jedes Mal kurz dar├╝ber nachzudenken, ob das an dieser Stelle nicht totaler Quark ist.
  1. Load more activity

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...