• 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

Sascha

Administrators
  • Content count

    9,766
  • Joined

  • Last visited

  • Days Won

    391

Sascha last won the day on April 16

Sascha had the most liked content!

Community Reputation

1,916 Excellent

About Sascha

  • Rank
    Community Manager
  • Birthday 08/13/1990

Contact Methods

  • Website URL
    http://www.indiepowered.net

Profile Information

  • Gender
    Male
  • Location
    Hamburg
  • Interests
    Programmierung

Recent Profile Visitors

25,142 profile views
  1. Ist der andere Collider auch ein nicht-konvexer MeshCollider?
  2. Das ist nicht korrekt. Der Collider entspricht dann exakt dem sichtbaren Mesh. Deaktiviere mal den MeshRenderer, dann siehst du auch die grünen Linien. Was allerdings problematisch ist, dass keine zwei nicht-konvexen MeshCollider miteinander kollidieren können. Wenn du eine konkave Form haben willst, die mit anderen konkaven Formen kollidieren kann, musst du einen Compound Collider bauen, also mehrere konvexe Kollider zusammenstecken.
  3. Genau daran. https://de.wikipedia.org/wiki/Konvex Die Convex-Option lässt Unity die sogenannte konvexe Hülle des Colliders bauen, und genau die sehen wir hier.
  4. Also, Fehler um eine ganze Größenordnung sind quasi ausgeschlossen, besonders in dem Raum, in dem du dich da befindest. Lass dir mal die Zahlen zusätzlich alle in der Konsole ausgeben und schau, ob es an ToString liegt.
  5. Hmm... du hast Recht, das stimmt gar nicht. Ich meinte, dass NextUpdate <= 0 bleibt und im nächsten Frame direkt nochmal die Funktion ausgelöst wird. Ich hatte da so eine Fallgrube reininterpretiert, bei der NextUpdate dann immer <= 0 bleibt und alles für die Katz wäre. Allerdings wird Distance ja mit sehr hoher Wahrscheinlichkeit nicht noch einmal genau 10 sein, sodass dann wieder alles in Ordnung ist.
  6. Der Main Thread ist in Unity leider der Thread, der das Bild rendert. Egal, wer da vor dem Rechner sitzt - wenn der Render Thread für drei Sekunden einfriert, mag das keiner. Zumindest eine kleine Ladeanimation sollte schon drin sein. Ja. Ohne Thread.Sleep arbeitet der Thread allerdings alles so schnell wie möglich ab und wird damit wertlos. Thread.Sleep lässt den aktuellen Thread x Millisekunden warten. Da es allerdings nicht der Main Thread, also der Render Thread ist, macht das nichts, denn dieser läuft einfach weiter. numberOfMeasurements und timeBetweenMeasurements sind Platzhalter. Du kannst entweder Variablen mit diesen Namen bauen oder sie mit Zahlen ersetzen. Du hast hier drei Stellschrauben: Die Gesamtzeit für alle Messungen, die Anzahl der Messungen und die Zeit zwischen zwei Messungen. Zwei davon musst du definieren, die dritte ergibt sich daraus. Wenn du Die Anzahl der Messungen nicht definiert sein soll, dann musst du angeben, wie lange gemessen werden soll und sie lange die Pause zwischen zwei Messungen sein soll. Nur die Gesamtzeit zu definieren reicht nicht - der Computer kann nicht einfach für dich entscheiden, wie viele Messungen oder wie viel Zeit zwischen zwei Messungen es sein soll. In meiner Lösung gibst du daher die Anzahl der Messungen und die die Zeit jeweils dazwischen an. Daraus ergibt sich eine Gesamtmesszeit von (Anzahl - 1) * Zwischenzeit. (Die -1 nur, wenn man noch eine kleine Anpassung im Code macht, die ich vergessen hatte).
  7. Du kannst keine Funktion bauen, die etwas nach einer längeren Zeit zurück gibt, ohne in der Zwischenzeit den ganzen Thread anzuhalten. Eine Coroutine wird beim ersten yield-Statement unterbrochen und der Code läuft an der Stelle weiter, wo sie aufgerufen wurde: public void StartStuff() { StartCoroutine(Stuff()); print("zwei"); } private IEnumerator Stuff() { print("eins"); yield return null; print("drei (verzögert)"); } Also ist die Methode noch gar nicht fertig, wenn der aufrufende Code schon längst das Ergebnis bräuchte. Darum kann man kein Ergebnis zurück geben. Was mein Code jetzt aber macht ist, ein Array namens "data" zu befüllen und an der Stelle vom Debug.Log ist die Funktion damit fertig. An diese Stelle kannst du beliebigen Code einfügen, der alles mögliche mit dem Ergebnis macht. Wenn du die Messfunktion an mehreren Stellen benutzen willst und jedes Mal mit dem Ergebnis etwas anderes machen willst, kannst du eine Action reinreichen, aber wenn nicht, führt das gerade zu weit.
  8. Ah, verstehe. Hierfür ist ein Thread wohl wirklich die bessere Variante, mit der zeitlichen Präzision. Zum Glück kann man beides gut kombinieren. Ich hatte dafür sogar mal eine Klasse geschrieben. Die kannst du in diesem Fall so benutzen: public void MeasureData() { StartCoroutine(MeasureData_Coroutine()); } private IEnumerator MeasureData_Coroutine() { yield return new CoroutineThread(() => { for(var i = 0; i < numberOfMeasurements; i++) { data[i] = GetCurrentData(); Thread.Sleep(timeBetweenMeasurements); } }); Debug.Log("I am done measuring!"); }
  9. Okay, inzwischen klingt das schon sehr nach XY-Problem. Was ist denn das für eine Liste, und was genau hast du damit vor? Warum der Zeitfaktor?
  10. Du möchtest auf keinen Fall deinen Main Thread dafür auf Eis legen, nimm auf jeden Fall eine Coroutine. In diesen kannst dann wieder einen Thread packen, aber das ist schon wieder die nächste Geschichte. Eine Coroutine wird unterbrochen, indem man ein yield-Statement benutzt: yield return null; // Einen Frame warten yield return new WaitForSeconds(2); // 2 Sekunden warten yield return new WaitUntil(() => IsDone()); // Warten, bis IsDone true zurück gibt Du kannst jetzt in einer Schleife jeweils einmal einen Frame warten und dann mit Time.deltaTime schauen, wie lange der Frame gedauert hat. Wenn du mehr Präzision brauchst, musst du mit Threading anfangen. Da solltest du dich dann mal einlesen.
  11. Wenn dein Anwendungsfeld das nicht verhindert, würde man dafür eine Queue nehmen. Man kann sich das aber auch selber bauen. class FixedQueue<T> { private T[] arr; private int index = 0; public int count { private set; get } public FixedQueue(int capacity) { arr = new T[capacity]; } public void Insert(T t) { arr[index] = t; index = (index + 1) % arr.length; if(count < arr.length) { count++; } } public T GetAtPosition(int i) { if(i < 0 || i => arr.length) { return new IndexOutOfBoundsException(); } return arr[(index + i) % arr.length]; } } Nur so runtergeschrieben, nicht getestet.
  12. Aaaaah!!1eins Wenn Distance == 10 ist, kommt man in einen Zustand, aus dem man nicht mehr raus kommt Außerdem: Warum nicht einfach nextUpdate = distance * 0.1f;
  13. Gibt einen Haufen Gründe, warum das alte System abgeschafft wurde, daher würde ich empfehlen, auf das neue zu wechseln
  14. Ewig kannst du dich aber um's Selbercoden nicht drücken
  15. The float values perhaps don't exactly match. In your array, you have (0.5,0,0) and your parameter would be (0.4999,0,0) or something. Put a print statement between your for loop and if clause: print(color + " vs. " + colors[i]);