Jump to content
Unity Insider Forum

Djeurissen

Members
  • Content count

    547
  • Joined

  • Last visited

  • Days Won

    12

Djeurissen last won the day on July 21

Djeurissen had the most liked content!

Community Reputation

107 Excellent

About Djeurissen

  • Rank
    Advanced Member
  • Birthday 11/14/1995

Profile Information

  • Gender
    Male
  • Location
    Zuhause

Recent Profile Visitors

3,727 profile views
  1. Djeurissen

    In Konstruktor "null" zurück geben?

    Nein, wenn ein Konstruktor hat keinen Rückgabewert aus dem Grund das der Rückgabewert immer die Klasse ist die gerade erzeugt wird. Du kannst aber natürlich eine Methode schreiben die den Konstruktor aufruft und evtl. null zurück gibt. public class SaveSlot { public static SaveSlot LoadFromFile() { if(FileDoesNotExist) return null; return new SaveSlot() } }
  2. Djeurissen

    Einsteigerfrage

    Es ist vollkommen egal wie die Hexagons grafisch aussehen. Das wichtige ist das du in der Lage bist das HexagonGrid erstmal in Code darzustellen: https://www.redblobgames.com/grids/hexagons/ Sobald du die Codedarstellung hast kannst du nämlich einfach sagen wenn sich Spieler auf Hexagon(1,1) befindet dann ist die 3D Figur z.B an Vector Position (1, 1, 0)
  3. Djeurissen

    Farbwechsler

    In dem Fall ist deine Berechnung von dem t Parameter falsch. Da t nur aus dem intervall von [0, 1] sein darf muss deine Formel angepasst werden: (Time.time - startZeit) * geschwindigkeit Da Time.time in Sekunden ist wäre bei geschwindigkeit = 2 bereits bei einer halben Sekunde t = 1. Je kleiner geschwindigkeit wird desto länger würde es dauern z.B geschwindigkeit = 0.5 sorgt dafür das t erst bei 2 Sekunden auf 1 gesetzt wird. Was du willst ist: (Time.time - startZeit) / geschwindigkeit Zudem musst du nicht abfragen ob die Farben gleich sind, prüf einfach ob t >= 1 ist. Zusätzlich darfst du niemals die gesetzte Farbe von den Textboxen wiedeverwenden da es sonst keine lineare interpolation mehr ist. Du musst immer die start und endfarbe wiederverwenden: public void Update() { var t = (Time.time - this.startTime) / geschwindigkeit; foreach(Text text in this.texte) text.color = Color32.Lerp(this.startColor, this.targetColor, t); if(t >= 1) // t = 1 bedeutet wir haben targetColor erreicht { this.startColor = this.targetColor; this.targetColor = // Berechne random Farbe } }
  4. Djeurissen

    Farbwechsler

    Du willst einfach nur alle X-Sekunden die Farbe wechseln. Lerp ist dazu da zwischen Farben zu interpolieren, dementsprechend macht es schon keinen Sinn Lerp zu nutzen, zudem musst du nicht prüfen ob du bereits bei der Farbe bist wenn du eigentlich nur schauen musst ob die X-Sekunden bereits vergangen sind. Zudem würde ich dir empfehlen nicht soviele Methoden für kleinkram zu erstellen. z.B ZufallsfarbeErmitteln macht deinen Code nur unnötig schwerer zu lesen für eine Zeile Code. Wie dem auch sei: private void Update() { if((Time.time - this.startTime) >= geschwindigkeit) { // Erzeuge eine random Farbe und weise diese allen Texten zu this.startTime = Time.time } }
  5. Genau das was Unity dir sagt, deine Klasse ist von MonoBehaviour abgeleitet und diese Klasse sollst DU nicht erzeugen. Das soll man nur mit Instantiate etc. machen, da Unity intern bestimmte Daten verwaltet die nicht aktualisiert werden wenn du das Objekt selbst erzeugst. Was du warscheinlich willst ist das hier: public class Datenspeicher { } Das ': MonoBehaviour' ist nur dafür da wenn du deine Klasse als Komponente an andere Gameobjekts packen willst. Das scheint hier nicht der Fall zu sein.
  6. Djeurissen

    Vector2 Werte in Grad umrechnen?

    Nutz einfach Vector2.Angle. Das gibt dir den Winkel zwischen zwei Vektoren. Der 1. Vektor ist (0, 1) und der 2. Vektor ist eben dein Vektor vom Input. Wenn du das ganze jetzt noch abhängig von nem Mittelpunkt haben willst rechne einfach Fingervektor - Mittelpunkt und pack das dann in die Methode
  7. Djeurissen

    GetComponents Frage

    Das was du machen willst ist weitaus komplizierter als man anfangs vermuten mag. Es ist ziemlich einfach Variablen aus Klassen auszulesen und diese Auszugeben. Jetzt will man diese Werte ja nicht einfach nur augeben sondern "hübsch" anzeigen. Das bedeutet nicht einfach nur die Werte anzeigen sondern z.B soll eine Zahl die Lebenspunkte darstellen, also erstellt man einen Balken dessen Länge abhängig von den Lebenspunkten ist. Sowas kann man aber nicht einfach so generalisieren, dafür nutzt man schon recht komplexe Systeme. Und meistens können diese Systeme auch noch viele Tücken haben. Vorallem wenn es daran geht das die GUI immer aktuell gehalten werden soll. Wenn du unzählige Variablen hast ist es extremst unperformant jeden Frame die Grafiken neu zu generieren weil evtl. sich ein Wert geändert hat. Viel sauberer wäre es wenn sich die GUI nur ändert wenn sich ein Wert ändert. Etc etc etc. Dafür gibt es dann in Unity schon solche Tools: https://www.assetstore.unity3d.com/en/#!/content/49004 Davon rate ich dir aber ab. Du bist noch ganz am Anfang und ich bezweifle das dir sowas wirklich weiterhelfen wird. Klar ist es toll Sachen dynamisch zu machen, aber das was du willst ist viel zu viel. Du wirst niemals soviele Variablen haben das du nicht in der Lage sein wirst die von Hand anzuzeigen. Dazu kommt wenn du deine GUI gut designst dann wird das auch immer weniger zum Problem. Einfaches Beispiel: Anstatt eine Riesenklasse zu schreiben die alles darstellt was du irgendwo in deiner GUI rumfliegen hast, schreib kleine Klassen. Diese kleinen Klassen bekommt dann eben die Variable/Variablen die du anzeigen möchtest und die GUI Elemente bei denne es angezeigt werden soll. public class CustomerDisplay { public Label NameLabel; public Label IncomeLabel; public Customer Data; public void OnUpdate() { NameLabel.text = Data.name; IncomeLabel.text = Data.income; } } Sowas kann man nun immer wiederverwenden, wenn du irgendwann mal einen Customer anzeigen willst kannst du diese Klasse wieder nutzen. Und du kannst mir nicht erzählen das du jemals soviele Variablen haben wirst das es zuviel Aufwand ist mal schnell eine Klasse zu schreiben die das ganze 1 zu 1 mappt.
  8. Djeurissen

    GetComponents Frage

    Ich verstehe noch nicht zu 100% was du möchtest. Klar irgendwelche Werte schön anzeigen. Aber warum genau? Willst du dem Spieler die Werte anzeigen oder einfach nur für dich? Weil wenn du dem Spieler die Werte anzeigen willst, dann wirst du sowieso niemals alle Variablen benötigen die eine Component hat. Wenn du die Werte sehen möchtest hast du bereits den Unity Inspector.
  9. Djeurissen

    GetComponents Frage

    Du scheinst etwas ganz Grundlegend falsch zu machen. Was genau versuchst du zu erreichen? Wie ich bereits erklärt habe kannst du nicht einfach Variablen von unbekannten Componenten auslesen. Das lässt der Compiler schon garnicht zu und selbst wenn würde es zur Laufzeit evtl. zu haufenweise Fehlern führen. Denn du kannst schlecht zur Laufzeit wissen was in der Component nun genau drin steht und genau das versucht die Fehlermeldung zu verhindern. Was versuchst du zu erreichen? Ich meine was willst du beim "auslesen" automatisieren? Wenn du es nicht erklären kannst gib uns ein Beispiel was du machen willst und was genau dich dann daran stört.
  10. Djeurissen

    GetComponents Frage

    Zu sagen das etwas nicht funktioniert, hilt uns nicht wirklich weiter. Ich weiß das dir zu 100% eine Fehlermeldung geworfen wird und die solltest du am besten hier posten oder versuchen vorher zu googlen was diese Fehlermeldung bedeutet. ExampleClass wurde von MonoBehaviour abgeleitet. Das widerrum irgendwann von Component abgleitet wurde. ExampleClass ec = new ExampleClass(); //Merke niemals new bei MonoBehaviours machen dient nur als Beispiel Debug.Log(ec.wert); // Funktioniert ist ja eine Variable vom Typ ExampleClass Component c = ec; // Funktioniert weil ExampleClass irgendwann mal von Component abgeleitet hat Debug.Log(c.wert); // Funktioniert nicht, wir wissen zwar das in c unsere ExampleClass steckt aber der Compiler hat davon keine Ahnung Debug.Log(((ExampleClass)c).wert); // Funktioniert weil wir dem Compiler sagen das in c eine ExampleClass steckt. Das nennt man auch casten D.h du kannst zwar alle Components von einem Objekt sammeln, aber der Compiler kann nicht wissen welche Klassen das nun sind. Du kannst also nicht einfach hingehen und auf werte zugreifen die irgendwo in irgendeiner Klasse mal irgendwann definiert wurden. Dafür musst du dem Compiler vorher sagen welche Klasse in der Variable ist. Wobei ich dir davon abraten würde das so zu machen. Sobald du die Reihenfolge deiner Components veränderst würde dein Code kaputt gehen (Weil deine ExampleClass nun nicht mehr an Index 1 sondern evtl. bei Index 10 liegt) Musst du denn umbedingt auf den Wert zugreifen und wenn ja warum?
  11. Djeurissen

    KI Items vergleichen und ausrüsten lassen

    Das klingt alles ganz toll aber geh es was ruhiger an. Klar soll die KI gut sein, aber ich würde dir empfehlen erstmal nur die basics zu implementieren und dann die restlichen Hauptfunktionen deines Spiels. Wenn du jetzt zuviel Arbeit in die super duper KI legst hast du am Ende die klügste KI aber kein Spiel in der du die KI wirklich testen kannst...
  12. Djeurissen

    Linie erzeugen

    Wenn wir mal davon ausgehen das deine Zeichnung akkurat ist, dann bedeutet das deine Objekte liegen immer in einer Ebene? Für diesen Fall: https://martin-thoma.com/how-to-check-if-two-line-segments-intersect/ Für den dreidimensionalen Fall gibt es aber genauso Lösungen: http://paulbourke.net/geometry/pointlineplane/ Beide Links nutzen aber einfach Lineare Algebra um das Problem zu lösen. So wie es scheint gibt es von Unity keine vorgefertigte Lösung.
  13. Djeurissen

    Objekt im Kreis bewegen und rotieren

    Erstmal ein paar Tipps: Du kannst deinen Code besser formatieren wenn du den CodeTag nutzt (Dieses zeichen: <>) Anstatt dir für alles boolean Variablen anzulegen kannst du auch sowas hier machen: void Update() { // Wurde eine Pfeiltaste gedrückt? if(Input.GetKey(KeyCode.LeftArrow)|| Input.GetKey(KeyCode.RightArrow)) { // Berechne den timeCounter float timeCounter = Time.deltaTime * speed; // Wenn die linke Pfeiltaste gedrückt wurde, invertiere den timeCounter if(Input.GetKey(KeyCode.LeftArrow) timeCounter = timeCounter * -1; // Hier kommt nurnoch dein Rotationscode etc } } Aber anstatt die Rotation selber zu berechnen, nutz doch einfach Unity. Vielleicht hast du es schon bemerkt aber du kannst in Unity Objekten Kinder zuordnen. Wenn nun das Parentobjekt rotiert wird, rotieren sich die Kinder relativ zum Mittelpunkt vom Parent. Das heißt: Wenn du ein leeres Objekt anlegst und dann deinen Balken als Kind zu dem leeren Objekt zuordnest kannst du deinen Balken drehen lassen indem du einfach das leere Objekt rotierst. Oder vielleicht noch anders ausgedrückt, in deine Skizze der Mittelpunkt ist das leere Objekt das einfach rotiert wird. Ich bin mir nicht ganz sicher wie du nun dein 2tes Problem löst aber ein Ansatz sollte folgendes sein: Du kennst die Rotation vom Parentobjekt. Versuch einfach mal deinen Balken um den exakt gleichen Wert zu rotieren. Evtl. kommt dabei bereits das gewünschte Ergebniss raus. Ansonsten musst du halt nur schauen um wieviel die Rotation falsch ist und das dann einfach ausgleichen.
  14. Djeurissen

    APK und Windows Export Daten fehlen

    2. Dinge: 1. Das ist ja ein neues Thema dafür sollte man am besten auch einen neuen Thread aufmachen. 2. Dein Code scheint ziemlich durcheinander zu sein, du versuchst gerade mehrere Lösungsansätze führst aber keinen zuende. Evtl. solltest du den Code vorher nochmal aufräumen bevor du den hier postest. Der XMLWriter erlaubt dir XML Dokumente zu schreiben. Das Problem dabei ist das es sehr umständlich ist das richtig hinzubekommen: https://www.dotnetperls.com/xmlwriter Du musst genau drauf achten wo du ein Element öffnest, schließt etc. Mit dem XMLDocument kannst du XML darstellen indem du Klassen wie XmlElement etc. nutzt. Vorteil dabei du musst nicht darauf achten wann du etwas schließt. Wenn du nun xmlDoc.Save aufrufst nutzt dieses warscheinlich den XMLWriter um die Daten zu speichern. Das Problem bei dir ist allerdings das du dem XMLDocument niemals die Elemente gegeben hast. Du hast zwar XmlElement's angelegt aber halt nicht zum Dokument hinzugefügt. https://msdn.microsoft.com/de-de/library/dw229a22(v=vs.110).aspx
  15. Djeurissen

    APK und Windows Export Daten fehlen

    Der Resourcenordner wird wie alles andere kompiliert und mit den Unity Daten ausgeliefert. Was genau dabei kompilieren heisst kann ich dir nicht sagen. Aufjedenfall sind diese Daten nicht mehr veränderbar, du kannst zwar Daten aus dem Ressourcenordner laden aber nicht mehr ändern. Was Torigas dir nun gezeigt hat ist die Variable Application.persistentDataPath. Dieser Pfad zeigt auf irgendeinen Ordner wo du sicher deine Daten ablegen kannst.D.h nimm diesen Pfad und leg dort deine XML Datei an. Diese kannst du dann auch ändern.
×