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

Life Is Good

Members
  • Content count

    669
  • Joined

  • Last visited

  • Days Won

    8

Life Is Good last won the day on March 13

Life Is Good had the most liked content!

Community Reputation

69 Excellent

About Life Is Good

  • Rank
    Advanced Member

Profile Information

  • Gender
    Male
  • Location
    Köln

Recent Profile Visitors

3,621 profile views
  1. Bild -> Terrain

    Kommt drauf an. Willst du Unity's Terrain System nutzen, oder einfach bloß ein Mesh draus generieren ? Im 1. Fall willst du daraus vermutlich ne Heightmap machen. Also deine Grafik auslesen, in ne Heightmap schreiben und die aufs Terrain werfen. Im 2. Fall könntest du ein Grid über die Grafik legen und Marching Squares drüber laufen lassen. Ist beides wohl nicht so ohne weiteres
  2. Ich find die Grafiken toll! Sieht gut aus.
  3. NavMesh Agent - die Technik dahinter

    Hiermit kannst du mehrere NavMeshs in der selben Szene haben: https://github.com/Unity-Technologies/NavMeshComponents (Falls das noch nicht mit Unity mitkommt, hab das NavMesh schon ne Weile lang nicht mehr benutzt) Es schneidet einfach die Fläche raus, die dein Hinderniss besetzt. Unter Umständen kann das dazu führen, dass es neuberechnet werden muss, ja. Ich glaube aber nicht, dass das gesamte NavMesh neuberechnet wird. (ich hab's aber auch nicht getestet) NavMeshs sind aber generell auch eher weniger für dynamische Umgebungen geeignet. Das letzte was du machen willst, ist 1250 Trigger nur dafür in deiner Szene zu haben Du kannst also entweder einfach das NavMesh nutzen, normale Waypoints selbst überall in deiner Welt verteilen oder du musst dich nun mal mit Pathfinding auseinander setzen. So ein Open World Spiel entwickelt sich nun mal nicht von selbst!
  4. Bitselect bei Floats - ComputeShader

    Schon. Aber bei float haben die jeweiligen bits nun mal ne andere Bedeutung. Ich weiß gerad gar nicht, ob es Unions in Unity HLSL gibt (ich glaube schon), aber aus der C Welt wird gerne ein kleiner Trick für sowas angewendet: typedef union { unsigned int i; float f; } u; u.f = 10.5; // Member von Unions teilen sich den selben Speicherort. // u.i greift nun also auf den Speicher von u.f zu. /* bitwise Vergleich von u.i und deinem anderem Zeug. */
  5. NavMesh Agent - die Technik dahinter

    https://docs.unity3d.com/Manual/class-NavMeshLink.html Klar. Mach was auch immer du für dein Projekt als angemessen empfindest.
  6. First Person Shooter - Zoom Umsetzung

    Ich find die Dual Rendering Methode schicker. Wenn's besser klappt, bleib doch gleich dabei
  7. NavMesh Agent - die Technik dahinter

    Das NavMesh ist im Grunde bloß eine Sammlung von ganz normalen Knoten, die anhand der Polygone / Vertices deiner Meshs generiert werden. Und dein Agent läuft die dann ganz normal A* mäßig ab. Und ja. Unity kann mehrere NavMeshs miteinander verbinden. Google doch einfach mal rum, was es so alles rund ums NavMesh gibt
  8. Speicheroperationen in C#

    Wenn du riesige Mengen an Gras rendern willst, dann musst du dich vermutlich von dem Gedanken entfernen, jedes einzelne Grasdetail im Speicher zu kennen und einzelnt zu rendern. Ich glaube es ist für Gras ziemlich üblich density maps zu generieren und die dann zum Rendern auszulesen. Das Paper hier sieht ziemlich vielversprechend aus (ich hab's selbst bloß überflogen) http://www.kevinboulanger.net/grass.html und das hier klingt auch ganz interessant http://developer.amd.com/wordpress/media/2012/10/i3dGrassFINAL.pdf Ansonsten, versuch so viel wie möglich zusammen zu fassen. Wenn z.B. 1000 Gras details die selbe Farbe haben, ist es verschwenderisch die Farbe 1000 mal im Speicher zu haben
  9. Speicheroperationen in C#

    Deine Ergebnisse sind tatsächlich nicht sonderlich überraschend, wenn man sich mal mit Speicherperformance auseinandersetzt. Obwohl in den vergangenen Jahren CPUs / GPUs deutlich schneller geworden sind, ist die Performance von Speicher im Vergleich bloß minimal angestiegen. (Siehe angehängte Grafik) Nichts davon kann man übrigens wirklich C# Speicheroperationen nennen, denn C# implementiert überhaupt keine Funktionen um Speicher zu kopieren. Das macht in den meisten Fällen der GC (in unserem Fall leider der veraltete Boehm GC, zumindest glaub ich, dass Unity da noch nicht aktualisiert hat) Array.Copy und RtlCopyMem hingegen machen interop, schieben deine Pointer also auf die native Seite und kopieren da (Siehe Kernel32.dll CopyKernel) CopyLong macht da nicht so viel Sinn, da du halt weiter den GC zum Speicherallokieren benutzt. Da macht es auch keinen großen Unterschied, dass du dein Zeug direkt zu Pointer umwandelst. (was intern sowieso passieren würde, würdest du es nicht tun) Du könntest da durchaus einen kleinen Bonus kriegen, aber der ist vernachlässigbar. Ich weiß nicht genau was du da treibt, aber 14mb jeden Frame hin- und her zu schieben ist allgemein nicht so praktisch. Idealerweise willst du soviel Speicher wie möglich zusammenfassen und erst beim Rendern wieder auseinander pflücken.
  10. Alternative zu Windows 10

    Antivirensoftware richtet mehr Schaden als Gut an, und manche stehen sogar im Verdacht selbst Viren zu verbreiten (siehe Kaspersky) Wenn dein Rechner „übernommen wird“, trenn halt die Internet Verbindung und formatier, was wollen die dagegen machen ? Wenn du die Vermutung hast, dass dein Pc infiziert wurde ist die einzig sichere Lösung die betroffene Festplatte zu formatieren. Regelmäßige Backups sollten doch heutzutage Standard sein und mit SSDs geht das neuaufsetzen mitlerweile auch innerhalb von ner Stunde. Zu den Windows Updates: Ich hab ja nicht gesagt schalt es aus für immer der Vorteil beim ausschalten ist, dass Windows dich nicht nerven wird und keine Zwangsupdates macht. Wenn du soweit bist und wieder updaten willst aktivierst du es halt wieder, lässt die Updates installieren und schaltest es wieder aus.
  11. Alternative zu Windows 10

    Ich hatte vor kurzem nen Windows 10 Bug, bei dem der Windows Updater mal eben +200GB große Log Dateien angelegt hat. Das meine SSD da so missbraucht wird fand ich auch nicht so lustig (Interessanter weise hat mich der Bug sowohl auf meinem PC als auch auf meinem Laptop erwischt) Ja. Und dann hat sich Windows dazu entschieden ein großes Update zu starten. Während ich am Flughafen war. Wenn du zu oft später klickst geht das auch nicht mehr :D, siehe Worauf ich hinaus will: deaktivier Windows Updates komplett. Das wird dein Leben leichter machen. Ich glaube VS ist das einzige Microsoft Programm dass ich aktiv nutze. Das läuft bei mir soweit ziemlich stabil ¯\_(ツ)_/¯
  12. Absinken und Aufsteigen

    Schau dir den 2. Abschnitt deines Codes mal genau an. Ich geh mal davon aus du willst, dass dein Gegner wieder smooth aufsteigt ? Du lässt ihn aber nur steigen solange sinking.y < 0 ist. Außerdem setzt du sinking.y = 100 * Time.deltaTime. Time.deltaTime kann niemals negativ sein, also wirst du beim 1. mal direkt sinking.y > 0 haben. Du willst wahrscheinlich inkrementieren (also +=) statt einfach nur zu setzen (=)
  13. Inspector Winkel im Script nutzbar machen

    Schwer zu sagen, das meiste von Quaternion ist auf der nativen Seite implementiert. Du arbeitest bei Rotationen ja aber so oder so mit Quaternionen. (eulerAngles ist ja auch eine Property von Quaternion) Die Euler Winkel, die du da reinschiebst, werden dann ja zu Quaternionen umgerechnet. Sollte also denke ich kein Problem sein. Edit: Ich sag's mal so: Er will ja bloß eine Kamera hin- und her schwanken lassen. Da sollte er schon keine Probleme kriegen Edit 2: Ich seh gerade sogar, in der Manual steht knapp erklärt, warum die Winkel sich im Inspector so komisch verhalten. https://docs.unity3d.com/Manual/QuaternionAndEulerRotationsInUnity.html
  14. Inspector Winkel im Script nutzbar machen

    Ich hab noch das kleine Beispiel für @HenriChinasky geschrieben. // minimale- und maximale Abweichung (in Grad) public float min = 30.0f, max = 30.0f; public float speed = 0.3f; // t benutzen wir hier zum interpolieren private float t = 0.5f; // Zwischenspeicher für den Startwinkel + min / max Abweichung private float minAngle, maxAngle; private void Start() { var angle = transform.rotation.eulerAngles.y; minAngle = CalcAngle(angle - min); maxAngle = CalcAngle(angle + max); } private void Update() { t += speed * Time.deltaTime; // Kehrt die Drehgeschwindigkeit um, sobald wir eines der Enden (min / max) erreicht haben. if (t > 1.0f || t < 0.0f) speed = -speed; Rotate(); } private void Rotate () { var rot = transform.rotation; var angles = rot.eulerAngles; // Interpoliert linear zwischen unserem min / max Winkel. var y = Mathf.LerpAngle(minAngle, maxAngle, t); rot.eulerAngles = new Vector3(angles.x, y, angles.z); transform.rotation = rot; } // Rechnet den Winkel um, sollte dieser durch min/max ins negative gehen / 360.0f überschreiten. private float CalcAngle (float angle) { return (angle < 0.0f) ? 360.0f + angle : (angle > 360.0f) ? angle - 360.0f : angle; }
  15. Inspector Winkel im Script nutzbar machen

    Ahhhh ich seh's, ja ! Ich hatte mir das eben schon kurz ausgeben lassen, aber da war 2 mal das selbe Ergebnis, da hatte ich nicht weiter getestet Wie auch immer: Im Grunde ist's egal, da du eigentlich sowieso so gut wie nie wirklich mit festen Winkeln arbeiten willst. @HenriChinasky Clamp ist eine Methode aus Unity's Mathf Klasse. Damit klemmst du einen Wert zwischen einen min und max Wert. Dann kannst du im Grunde einfach nur noch interpolieren zwischen diesen Werten (siehe Mathf.Lerp) Ich kann dir nachher mal ein kleines Beispiel schreiben.
×