Jump to content
Unity Insider Forum

Singular

Members
  • Posts

    220
  • Joined

  • Last visited

  • Days Won

    1

Singular last won the day on August 2 2021

Singular had the most liked content!

About Singular

  • Birthday 12/08/1987

Profile Information

  • Gender
    Male
  • Location
    K├Ânigswinter

Recent Profile Visitors

1,112 profile views

Singular's Achievements

Advanced Member

Advanced Member (3/3)

2

Reputation

  1. Ahhh..... sche auf mein Haupt ­čść ich versgesse die st├Ąndig. Ja, damit sollte es klappen.^^ Danke euch beiden.
  2. 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.
  3. ­čś▒ 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
  4. Hallo zusammen, Ich br├Ąuchte mal wieder eure Hilfe. Ich habe eine 2D Umgebung in der ich Objekte per Drag&Drop verschieben kann. Das Funktioniert auch soweit alles ganz wunderb├Ąrchen. Problem ist jetzt, dass, wenn die Objekte ├╝bereinander liegen, teilweise unterschiedlich gegriffen werden k├Ânnen. Habe ich zum Beispiel 3 Objekte ├╝bereinander gestapelt, kann es passieren, dass ich das unterste beim klickken bewegen kann, es kann aber auch das oberste oder das mittlere sein. Es sieht ein wenig zuf├Ąllig aus welches Objekt ich erwische. Die Reihenfolge in der Herachie scheint keine Auswirkungen darauf zu haben und auch nicht in welcher Reihenfolge sie gerendert werden. Ich w├╝rde gerne dass das Objekt, dass ich gerade Bewege als letztes gerendert wird. Also ganz oben angezeigt wird. Wie kann ich diese Reihenfolge ├Ąndern? Au├čerdem m├Âchte ich, dass immer das Objekt, das oben liegt zuerst bewegt werden kann.
  5. Kleiner Tip am Rande: "Hilf uns, damit wir dir helfen k├Ânnen." Wir haben keine Ahnung was du hast und was du brauchst. Wenn du sagst, dass du dich nicht C# auskennst, kann man dir nicht wirklich helfen, da wir nicht wissen auf welchem Stand du bist. Beispielscripts sind immer ein guter erster schritt. Was hast du? Was tut es (nicht)? Was sollte es tun? (etc.)
  6. Hallo und Herzlich willkommen, Ein Singleton wird normalerweise so, oder so ├Ąhnlich eingeleitet: public class Singleton : MonoBehaviour { public static Singleton instance; private void Awake() { if(instance != null && instance != this) { Destroy(this); } else { instance = this; } } } Damit hast du das Grundger├╝st. Das kannst du auf ein GameObject in deiner Scene ziehen auf das andere Objecte zugreifen k├Ânnen. Hat dein Singleton also beispielsweise eine Methode wie: public void DoSomething() { //Ich tue Dinge } k├Ânnen deine Objecte so darauf zugreifen: Singleton.instance.DoSomething(); Damit kannst du eine Schnittstelle erstellen ohne dass du gro├čartig dieses eine Object suchen musst oder erst ├╝ber den Inspector zugreifen musst. Hat dein Singleton beispielsweise einen int points, k├Ânnten in einem Tower Defence Game die Gegner die get├Âtet werden einfach das Singleton aufrufen und eine Methode auf dem Singleton ausf├╝hren um die Punkt (,Gold etc.) zu erh├Âhen. Alternativ k├Ânntest du eine Static Class erstellen die letzlich das gleiche ist, aber das kann nicht von MonoBehaviour erben wordurch einzelne Methoden nicht ausgef├╝hrt werden k├Ânnen. Was du damit auch machen kannst, Also mit einem Singleton, du kannst diesem Objekt andere Objekte zuweisen. Zum Beispiel den Spielern, um immer zugriff auf ihn zu haben. Also, um im Beispiel eines Tower Defence zu bleiben, ein Gegner l├Ąuft ins Ziel und der Spieler soll einen Lebenspunkt verlieren (der Sich auch auf der Karte herum bewegen kann) Dann muss du nur die Zuweisung machen, dass das Singleton den Spieler kennt aber der Gegner muss nicht erst den Spieler suchen um ihm dann einen Schaden zuzuf├╝gen. (Ja das letzte beispiel w├Ąre warscheinlich sowieso besser ├╝ber das EventSystem aber, you got the point)
  7. VERGISS ES!!! Habe den Fehler gefunden. Er sa├č, wie so oft zwischen Tastatur und B├╝rostuhl... Habe ihn beseitigt... ­čĄö Ich habe mich in den Objekten verschrieben, und tats├Ąchlich Blend, Fixed geschrieben und schon war der Fehler perfekt. Achso und da ich beseitigt wurde wollte ich mich noch schnell bedanken f├╝r deine Hi ­čö┤[NullReferenceExeption: Object reference not set to an instance of an object Programmer.instance() (at Assets/Office/Programmer.cs 76)]
  8. Okay, Color32 war des r├Ątsels l├Âsung. ­čśâ Allerdings, bleibt das Problem mit dem Fixed. Ich habe auch herausgefunden, dass das Problem nur dann auftritt, wenn es ein Objekt gibt, das diesen Gradienten anfragt. Gibt es kein Objekt, das einer Farbe zugeordnet wird, kann ich zwischen Fixed und Blend ohne Probleme im Game Mode hin und her wechseln. Die Objekte selbst ├Ąndern aber nichts an dieser Farbe. Die holen sich ihre Farbe ├╝ber eine Get Funktion und speichern diesen selber ab. Dabei wird aber auch nicht der mode auf Fixed umgestellt. also nie... es gibt auch keinen Grund dazu...
  9. Ah, okay das versuche ich mal. Color war bisher das einzige, was ich verwendet habe. Richtig. W├Ąrend das Spiel l├Ąuft. Da die Farbe vorher ja noch nicht da war, weil sie ja durch den Code generiert wird. Die Farben nutze ich f├╝r Objekte als "ColorOverLifetime" und da sieht man es dann auch deutlich, dass die Farbe springt und nicht wie bei blend von der einen in die andere ├╝ber geht. Nein in die Update Methode verwende ich nicht um es auf Fixed um zu stellen^^. Die ist sowieso leer
  10. Sorry ich sehe gerade ich habe mich verklickt... das sollte eigentlich in Scripting rein. k├Ânnt ihr den Beitrag verschieben? edit: Dankesch├Ân!
  11. Hallo zusammen, ich schon wieder. ich habe hier eine Reihe von Gradienten, die ich mir Code zuf├Ąllig generieren lasse. sieht in etwa so aus: void Start() { for(int i = 0; i < gradients.Length; i++) { GradientColorKey[] gck = new GradientColorKey[4]; gck[0] = NewKey(0); gck[1] = NewKey(0.4f); gck[2] = NewKey(0.9f); gck[3] = NewKey(1f); gradients[i].colorKeys = gck; gradients[i].mode = GradientMode.Blend; } } private GradientColorKey NewKey(float time) { int r = 0; int g = 0; if (Random.Range(0, 2) == 0) { r = Random.Range(0, 256); g = Random.Range(120, 256); } else { r = Random.Range(80, 256); g = Random.Range(0, 256); } int b = Random.Range(0, 141); Color c = new Color(r, g, b); return new GradientColorKey(c, time); } Jetzt habe ich folgende Probleme: Zum einen wird die Farbe immer auf "HDR" eingestellt, was dazu f├╝hrt, dass die Objekte immer wei├č angezeigt werden. Zum anderen wird die Farbe immer auf Fixed umgestellt. Selbst dann, wenn ich hin gehe und das Blend selbst eintrage, (im Game Mode) wird es, so als w├╝rde es in irgendeiner Update Methode wieder auf Fixed umgestellt. Vielen Dank.
  12. Hallo Sascha, Danke dir. Da war irgendwo mein Fehler. Jetzt funktionierts wie es soll! Wie gesagt mit Local und global war ich mir nicht sicher deswegen habe ich beides hin und her ausprobiert in allen m├Âglichen kombinationen. Und das ich den Quaternion in einen V3 umwandle um ihn dann wieder zu einem Quaternion zu machen war diesem hin und her geschuldet, um zu schauen ob es vielleicht daran liegen k├Ânnte, dass er den Quaternion irgendwie anders ├╝bertr├Ągt. Aber wie gesagt, jetzt klappts. Danke dir.
  13. Hallo zusammen, Hallo Sascha ich habe folgendes Problem: Ich m├Âchte f├╝r die Raumstation, die der Spieler in meinem Spiel bauen kann einzelne Module erstellen, die angebaut werden k├Ânnen. Das ganze soll aber offen gehalten werden, dass der Spieler frei ist welches Modul wo hin kommt. Soweit so gut. Ich habe dazu einzelne Module erstellt und habe ihnen ein EmptyGameObject zugewiesen, um dem Modul mitzuzeilen, wo die Verbindungspunkte sind, also wo weitere Module angeschlossen werden k├Ânnen. Wird ein neues Modul erstellt, wird es als Child Object des Moduls an das es angeschlossen wird, Instanziiert. Darum habe ich in der StartMethode des Moduls folgenden simplen Code geschrieben: private void Start() { transform.localPosition = Offset; try { turnSpeed = GetComponentInParent<MainModule>().turnSpeed * -1; Vector3 rotation = GetComponentInParent<Transform>().localRotation.eulerAngles; Debug.Log(rotation); transform.rotation = Quaternion.Euler(rotation); } catch { } } Das Problem ist die Zeile vor und nach dem Debug. Bzw m├╝sste das Problem dort sein... Das Parent Object hat als Rotation (0, 180, 0) und das wird mir im Debug auch so ausgegeben. Die Rotation, die das neue Modul aber dann annimmt ist die Rotation, die es vorher auch hatte. Das einzige, was passt ist die Position. Dabei habe ich mittlerweile alle Kombinationen durch bez├╝glich transform.localRotation und transform.rotation. Auch die m├Âglichkeit Vector3 zu einem Quaternion zu machen straft mich mit dem selben Ergebniss. Die Rotation wird in allen f├Ąllen 0 ├╝bernommen. Wenn das Object vorher eine rotation von (50,50,50) hatte, hat es nachher die selbe Rotation. Was mache ich falsch?? Oder habe ich etwas komplett d├Ąmliches ├╝bersehen?
  14. Somit liegt das Problem ganz woanders... wo allerding kann ich euch nicht sagen, denn: Ich habe, wie schon angedroht das Script neu geschrieben und getestet... l├Ąuft... ohne Probleme gleich beim ersten versuch. Vielleicht habe ich schon vorher irgendo was mit dem Script gemacht, was ihm nicht geschmeckt hat und dann wollte er einfach nicht mehr. Keine Ahnung. Das habe ich jetzt noch mit hinzugef├╝gt aber das ├Ąndert nichts an der funktionalit├Ąt^^ Danke euch.
  15. Genau. Der Sinn ist, dass du nicht mehr Schild aufladen sollst, wenn du schon auf oder ├╝ber Maximum bist. Dann ruft sie sich aber auch selbst nicht auf. die kommt dann gar nicht ins "if" rein und beendet sich sofort. Das soll sie auch. Genau. Das w├╝rde ich auch erwarten. Also starten tut er, stoppen nicht. Das Stop sehe ich auch, wie erwartet, auch nur ab dem zweiten Mal. Ja, hab ich mal versucht... ├Ąndert leider nichts am Verhalten. Also sie startet wie erwartet und stopp nicht. Wenn euch nichts mehr einf├Ąllt, werde ich das Script mal einfach neu schreiben und schauen ob es dann funktioniert.
×
×
  • Create New...