Jump to content
Unity Insider Forum

Helishcoffe

Members
  • Gesamte Inhalte

    951
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    23

Alle erstellten Inhalte von Helishcoffe

  1. Du kannst auch hier einfach schreiben: if (arryHexagon[i].GetComponentInChildren<LineRenderer>())
  2. Ich benutze bei jedem Objekt welches ich platziere Boxcollider. Bei dem Objekt, welches ich platziere schieße ich nun von einer Wand zur anderen innerhalb des Boxcolliders einen Raycast. Also macht dies 6 Raycasts die von einer Seite zur gegenüberliegenden Seite gehen. Außerdem benutze ich einen Raycast aus dem Viewport der Kamera in die Spielwelt hinein um die Position zu kriegen, auf welche der Spieler zeigt. Das Objekt wird nun an diese Stelle platziert (rechnerisch). Dann werden die Raycasts innerhalb des Colliders ausgewertet, um zu schauen ob das Objekt überhaupt an die vom Spieler gezeigte Stelle hinpasst. Die Raycasts bestimmen nun, wie weit und in welche Richtung das Objekt verschoben werden muss, damit es sich nicht mit einem anderen Objekt überschneidet. Das kann man gut ab Minute 7:30 im Video oben erkennen: Die einzelnen Holzplatten werden direkt aneinander gelegt, obwohl der Spieler hier nur die Position grob anzeigt. Das eigentliche Raster welches du meintest ist jetzt nur noch dafür da, damit dem Spieler es leichter fällt, dinge Symetrisch zu bauen und um einheitliche Abstände zu erzeugen damit alles schön stimmig ist. Dies erreiche ich indem ich einfach nur die Koordinaten der Position wo ein Objekt plaziert werden soll, aufrunde auf 0,2 Einheiten.
  3. Jaa ich richte die Objekte an ein Raster aus und berechne mit Raycasts wie sie platziert werden sodass man Objekte z.B. leicht aneinander stellen kann und sich der Umgebung anpassen Danke für dein Feedback
  4. Guten Abend liebe Insider! Vor einem Jahr habe ich mit meinem Spiel "Borderless" angefangen und möchte nun mein Projekt endlich mal vorstellen. Ich denke mal, dass jetzt der richtige Zeitpunkt ist. Borderless ist mein bisher größtes Projekt, in dem ich mit Abstand am meisten Arbeit und schweiß gesteckt habe. Allerdings befindet sich das Spiel noch in den Kinderschuhen und ich werde bis zur Fertigstellung auch noch einige Zeit brauchen. Doch kommen wir nun zum eigentlichen Spiel: Borderless ist ein Open-World Sandbox Spiel, in welchem der Spieler in eine eigene Welt eintauchen kann. Genauer gesagt ist es ein Aufbauspiel, welches vom Gameplay stark an Minecraft erinnert. Dabei handelt es sich aber NICHT um einen Minecraft-Klon. Der Fokus des Spiels liegt dabei hauptsächlich auf das erbauen und erschaffen von technologischen Dingen. Angefangen mit einem simplen Holzhaus, bis hin zur einer großen Fabrik, einer Bahnstation, einem Flughafen oder was auch immer... der Fantasie sind keine Grenzen gesetzt! Dabei kann der Spieler komplexe Computersysteme selbst erbauen und vernetzen um z.B. ein eigenes Hochregallager zu bauen. Allerdings brauchen große Anlagen auch eine menge Strom! Somit muss man sich ebenso um die Energieversorgung seiner Anlagen kümmern und und und... Ich denke mal, man kann erkennen in welche Richtung sich Borderless entwickeln soll. Auch ein Multiplayer exisiert, um mit Freunden gemeinsam zu spielen. Da ich ein großer Fan von solchen Spielen bin, hat mich die Motivation bei diesem Mammutsprojekt (Ja, für mich als Alleinentwickler ist das in der Tat ein Mammutprojekt) nie verlassen, weswegen ich den Ergeiz habe, das Spiel bis zum Ende durchzuziehen. Das Spiel ist grafisch nicht sehr anspruchsvoll, da ich weder gut um Texturieren geschweige denn im Modellieren bin. Deswegen versuche ich einen eher einfachen aber stimmigen Stil zu folgen und konzentriere mich auf das was ich besser kann, nämlich Scripten. Somit kann ich mich auch besser auf Performance konzentrieren und mein Spiel auch für Spieler zugänglich machen, die eine eher schwache Hardware in ihrem Rechner verbaut haben. Ich habe auf meinem Youtube-Kanal Helishcoffe einige DevLogs zu Borderless hochgeladen, falls sich jemand mein Spiel etwas genau ansehen möchte. In diesem kleinen Walkthrough, sind bisher (fast) alle Funktionen die ich bisjetzt implementiert habe vorhanden: Wölfe etc. existieren auch schon, sind aber noch nicht im Video zu sehen. Da ich nun den Levelgenerator fertig habe wird sich die Entwicklungsgeschwindigkeit meines Spiels vorraussichtlich verschnellern da der Levelgenerator bisher sehr viel Zeit eingenommen hat. Deswegen werde ich in Zukunft öfters mal weitere Devlogs posten. Wer mein Spiel jedoch selbst mal spielen möchte, kann sich den aktuellen build herunterladen -> Borderless Dev. Build Herunterladen Steuerung: W, A, S, D oder Pfeiltasten: Laufen Leertaste: Springen B: Buildmenu öffnen I: Inventar öffnen T: Chat Linke Maustaste: Dinge aufheben bzw. zerstören Rechte Maustaste: Dinge platzieren Esc: Pause Wer ein bisschen blödsinn machen will, kann ein bisschen mit den Chatcommands rumspielen die ich bisher integriert habe: /give [Id] Man erhält einen Stack von dem Item mit der angegebenen Id. Beispiel: /give 1 für 4x Holz /itemlist Zeigt eine Liste mit allen Items und der dazugehörigen Id an. /settime [ticks] Setzt die Spielzeit auf die angegeben Tickzeit (0 bis 1999). /summon [Id] erschafft ein Entity mit der angegebenen Id. Beispiel /summon 3 um einen Wolf zu erschaffen /debug zeigt den Debugscreen für den Terraingenerator an /seed zeigt den Seed des Terraingenerator an /god aktiviert den Godmode. Man ist unverwundbar und kann sehr schnell laufen. Achtung: man kann ihn zwar wieder mit /god ausschalten, aber die Laufgeschwindigkeit wird dabei nicht zurückgesetzt, weil ich irgendwie nie dazu gekommen bin diesen Bug zu entfernen /thingmanager zeigt sämtliche Informationen /time zeigt die Spielzeit an /realtime zeigt die echte Uhrzeit an /players zeigt die Liste der Spieler /invstat zeigt alle Informationen über das Spielerinventar /entitylist zeigt alle Entitys mit der dazugehörigen Id an /clearinv leert das komplette inventar Achtung: Der Multiplayer ist zwar schon spielbar, allerdings noch nicht ausgibig getestet und es existieren noch ein paar Bugs. Wer trotzdem auch den Multiplayer spielen möchte, der kann das gerne tun. Beim Starten einer Welt mit "Play World" startet man automatisch einen Server. Andere Spieler können nun über "Join World" im Hauptmenü unter angabe der IP-Adresse des Hosts direkt joinen. Allerdings muss der Port 2204 freigeschaltet sein wenn man nicht im LAN spielt (oder man benutzt ein VPN). Wichtig: Wie bereits erwähnt bin ich mit meinem Spiel noch lange von dem entfernt, was ich oben beschrieben. Der Umfang ist noch recht gering im Vergleich zu meinen Plänen, allerdings möchte ich euch schonmal zeigen woran ich zurzeit arbeite und würde mir gerne ein paar Meinungen und Anregungen von euch einholen
  5. Gestern offiziell 1. Tag als Informatikstudent hinter mir gehabt. Habs überlebt :D 

  6. Das nächste Video ist nun da Ich gehe hier nochmal auf die Grundkonzepte von Unet ein und erkläre mal ganz Theoretisch was da eigentlich abgeht
  7. Nette Spielidee. Solche Rundenbasierten Defense Spiele habe ich früher schon immer sehr gerne gespielt. Ist bestimmt auch ein bisschen was an Zeit reingeflossen. Kritik habe ich dennoch Das UI wirkt noch ziemlich unaufgeräumt und nimmt einiges vom Sichtfeld ein, was alles ein bisschen unübersichtlich wirken lässt. Da lässt sich bestimmt noch was machen. Auch die Steuerung wirkt noch etwas schwammig. Manchmal werden meine Attacken gar nicht richtig wargenommen (könnte aber auch noch an der Performance liegen, die bestimmt noch ausbaufähig ist). Kleiner Tipp: pack so wenig wie möglich in die Update()-Routine. 90% aller Dinge lassen sich auch super in Coroutines oder in InvokeRepeating-Methoden unterbringen. Ist jetzt aber auch nur ein kleiner Tipp, könnte ja auch an was anderem liegen. Achja und die Ragdolls spinnen manchmal ein bisschen rum bei mir Trotzdem ein nettes Spiel!
  8. Schließe mich den anderen an. Besonders die Käferanimation finde ich echt gut gelungen und hat mich zum Schmunzeln gebracht. Die Giskanne ist natürlich auch echt witzig
  9. Wird bei Mathf.PerlinNoise eigentlich auf jedem Rechner die gleiche Map erzeugt? Also liefern die Koordinaten von z.B. x=5 und y=2 auf jedem Rechner die gleichen Werte?

    1. Sascha

      Sascha

      Sollte eigentlich deterministisch sein (also ja), sonst läuft da was gewaltig schief.

  10. Klassiker, aber immer wieder total witzig :D

     

    1. Thanatos

      Thanatos

      haha das kannte ich noch garnicht. ist ja mega

    2. Zer0Cool

      Zer0Cool

      Aber .net hat die schöneren Frisuren! :D

    3. Helishcoffe
  11. Schick schick. Erinnert mich irgendwie an die alten Metroid Teile
  12. Nö, mir war klar dass ich mir damit was einfangen werde Die nächsten Videos sind schon in Arbeit
  13. Hey Leute, ich hatte ja bereits in den Text Tutorials ein wenig mit Unet angefangen. Allerdings fehlt mir einfach die Zeit dieses Tutorial fortzuführen, da Textutorials einfach viel mehr Arbeit und Zeit in Anspruch nehmen. Ich möchte deswegen eine ausführliche Videoreihe zum Thema Unet starten und hoffe dem ein oder anderen etwas helfen zu können. Ist mein erstes Tutorial was ich bisjetzt je gemacht habe, also fangt schonmal an meine ganzen "ähm's" zu zählen Part 1: Einführung mit dem NetworkManager https://www.youtube.com/watch?v=2hcNu8m_ZcA Part 2 : Erste Verbindung aufbauen https://www.youtube.com/watch?v=H9CzsnYASgw Part 3: Grundkonzept von UNet https://youtu.be/lVBc8gxipkY Part 4: Commands und RPC's https://www.youtube.com/watch?v=3hDY_JcoLno Part 5: Unsere Spieler können laufen https://www.youtube.com/watch?v=E4ze1j8jMq0 Part 6: Commands und RPC's in der Praxis https://www.youtube.com/watch?v=JWPMXj-3YwI Weitere Part's werden nach und nach kommen
  14. Wow also die Idee mit dem Bgeleiter gefällt mir echt wahnsinnig gut. Bin in solchen Spielen sowieso immer ein Fan davon, wenn man nicht immer alles "alleine" durchsteht, sondern jemanden als KI dabei hat. Allerdings finde ich den Kampf zwischen dem Begleiter und den Gegnern noch recht unspektakulär. Aber ich denke mal, dass das sowiso noch Prototypenmäßig ist
  15. Sehr nette Seite, wenn auch auf den ersten Blick ein wenig unübersichtlich. Mal schauen ob ich mein Spiel mal einschicke
  16. Nicht schlecht. Mir Gefällt der Sound. Kann mir vorstellen, dass das mit der KI kein Zuckerschlecken war. Weiter so
  17. Link zur Excel-Tabelle ist nun oben im drinne
  18. Okay daran habe ich noch gar nicht gedacht. Werde ich mal in Erwägung ziehen wenn ich noch mehr Funktionen gesammelt habe
  19. Ja da hast du wie Sascha schon sagte wohl das s nicht gesehen Werde heute Abend noch ein paar neue Funktionen reinmachen. Mal schauen
  20. Da ich immer versuche darauf zu achten, dass mein Spiel flüssig und gut läuft, versuche ich immer Performancetötende Funktionen zu meiden bzw. sie so selten wie möglich einzusetzen. Deswegen hatte ich einfach mal die Idee, alle gängigen Funktionen von denen man Oft gebrauch macht auf ihre Performance zu untersuchen. Das hier ist kein professioneller Test oder was auch immer. Ich möchte die jenigen, die vielleicht gerade mit Unity anfangen, eine kleine Übersicht geben welche Funktionen man doch besser lieber nicht jeden Frame aufrufen sollte. Excel-Tabelle: Rangliste 24.05.2017.xlsx Testablauf: Die zu testende Funktion wird 1.000.000 Mal pro Frame aufgerufen und die CPU-Zeit die dafür benötigt wird notiert. Dies würde bei der Funktion Vector3.Distance folgendem Script entsprechen: using UnityEngine; public class Test : MonoBehaviour { void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for(int i = 0; i < 10000000; i++) { Vector3.Distance(v1, v2); } } } Im Stats Monitor lese ich dann die CPU-Zeit ab und trage sie in einer Tabelle ein. Mein PC: Grafikkarte: AMD Radeon 7850 Prozessor: AMD Phenom II 4x (3,4 GHz) RAM: 8 GB DDR2 So nachdem nun die Umstände geklärt sind, hier die Liste (Absteigend sortiert, beginnend mit der Performancelastigsten Methode): -------------------------------------------------------------------------------------------------------------------------------------------- GameObject.CreatePrimitive, GameObject.Instantiate, new GameObject, GameObject.Destroy... (>10.000 ms) Diese Funktion nimmt sehr viel Resourcen auf sich. Ist aber auch in Ordnung so, da das Erstellen von neuen GameObjects auch eigentlich nichts ist, was man hunderte Male pro Sekunde macht. Ich wollte es aber auf Grund der Vollständigkeit mit in diese Liste aufnehmen void Update () { for (int i = 0; i < 10000; i++) { GameObject.CreatePrimitive(PrimitiveType.Plane); } } (Getestet mit 10.000 Durchläufen Pro Frame: 960 ms. Hochgerechnet auf 1.000.000: 96.000 ms) GameObject.FindGameObjectOfType / GameObject.FindGameObjectsOfType (> 10.000) bei einer Szene mit 200 GameObjects void Update () { for (int i = 0; i < 1000000; i++) { GameObject.FindObjectOfType(typeof(Transform)); } } GameObject.Find (6.800 ms) bei einer Szene mit 200 GameObjects void Update () { for (int i = 0; i < 1000000; i++) { GameObject.Find("SomePepper"); } } Vector3.SmoothDamp (810 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); Vector3 v3 = Vector3.zero; for (int i = 0; i < 1000000; i++) { Vector3.SmoothDamp(v1, v2, ref v3, 0.235F); } } Physics.SphereCastAll (650 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.SphereCastAll(v1, 0.235F, v2); } } Physics.CapsuleCastAll (600 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(1, 0, 0); for (int i = 0; i < 1000000; i++) { Physics.CapsuleCastAll(v1, v2, 0.235F, v3); } } Physics.BoxCastAll (580 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.BoxCastAll(v1, v2, v3); } } GameObject.FindGameObjectsWithTag (540 ms) bei einer Szene mit 200 GameObjects void Update () { for (int i = 0; i < 1000000; i++) { GameObject.FindGameObjectsWithTag("SomePepper"); } } Physics.OverlapCapsule (510 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.OverlapCapsule(v1, v2, 0.235F); } } Vector3.Angle (480 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for(int i = 0; i < 1000000; i++) { Vector3.Angle(v1, v2); } } Physics.OverlapBox(480 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Quaternion q1 = new Quaternion(123, 456, 789, 1.0F); for (int i = 0; i < 1000000; i++) { Physics.OverlapBox(v1, v2, q1); } } Physics.RaycastAll (480 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.RaycastAll(v1, v2); } } Physics.OverlapSphere (450 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.OverlapSphere(v1, 0.235F); } } Physics.CapsuleCast (420 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(1, 0, 0); for (int i = 0; i < 1000000; i++) { Physics.CapsuleCast(v1, v2, 0.235F, v3); } } Physics.BoxCast (410 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.BoxCast(v1, v2, v3); } } Physics.SphereCast (380 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); RaycastHit result; for (int i = 0; i < 1000000; i++) { Physics.SphereCast(v1, 0.235F, v2, out result); } } Physics.SphereCastNonAlloc (350 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(1, 0, 0); RaycastHit[] result = new RaycastHit[4]; for (int i = 0; i < 1000000; i++) { Physics.SphereCastNonAlloc(v1, 0.235F, v2, result); } } Physics.CapsuleCastNonAlloc (320 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(1, 0, 0); RaycastHit[] rh1 = new RaycastHit[4]; for (int i = 0; i < 1000000; i++) { Physics.CapsuleCastNonAlloc(v1, v2, 0.235F, v3, rh1); } } Physics.OverlapCapsuleNonAlloc (310 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Collider[] results = new Collider[4]; for (int i = 0; i < 1000000; i++) { Physics.OverlapCapsuleNonAlloc(v1, v2, 0.235F, results); } } Vector3.MoveTowards (280 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.MoveTowards(v1, v2, 0.235F); } } Physics.BoxCastNonAlloc (280 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(1, 0, 0); RaycastHit[] rh1 = new RaycastHit[4]; for (int i = 0; i < 1000000; i++) { Physics.BoxCastNonAlloc(v1, v2, v3, rh1); } } Vector3.ProjectOnPlance (280 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.ProjectOnPlane(v1, v2); } } Physics.CheckCapsule (270 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.CheckCapsule(v1, v2, 0.235F); } } Vetcor3.ClampMagnitude (250 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); for(int i = 0; i < 1000000; i++) { Vector3.ClampMagnitude(v1, 100); } } Physics.Raycast (240 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.Raycast(v1, v2); } } GameObject.Find (240 ms) bei einer Szene mit 1 GameObject void Update () { for (int i = 0; i < 1000000; i++) { GameObject.Find("SomePepper"); } } Physics.OverlapBoxNonAlloc (230 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Quaternion q1 = new Quaternion(123, 456, 789, 1.0F); Collider[] results = new Collider[4]; for (int i = 0; i < 1000000; i++) { Physics.OverlapBoxNonAlloc(v1, v2, results, q1); } } Physics.Linecast (230 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.Linecast(v1, v2); } } Physics.RaycastNonAlloc (210 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); RaycastHit[] result = new RaycastHit[4]; for (int i = 0; i < 1000000; i++) { Physics.RaycastNonAlloc(v1, v2, result); } } Physics.CheckBox (210 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(123, 456, 789); Vector3 v3 = new Vector3(1, 0, 0); Quaternion q1 = new Quaternion(123, 456, 789, 1.0F); for (int i = 0; i < 1000000; i++) { Physics.CheckBox(v1, v2, q1); } } Vector3.Project (210 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Project(v1, v2); } } GameObject.FindGameObjectWithTag (200 ms) bei einer Szene mit 200 GameObects void Update () { for (int i = 0; i < 1000000; i++) { GameObject.FindGameObjectWithTag("SomePepper"); } } Vector3.RotateTowards (200 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.RotateTowards(v1, v2, 0.235F, 0.356F); } } Physics.OverlapSphereNonAlloc (200 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Collider[] result = new Collider[4]; for (int i = 0; i < 1000000; i++) { Physics.OverlapSphereNonAlloc(v1, 0.235F, result); } } Physics.CheckSphere (180 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Physics.CheckSphere(v1, 0.235F); } } Vector3.Slerp / Vector3.SlerpUnclamped (180 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Slerp(v1, v2, 0.235F); } } Vector3.Normalize (150 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Vector3.Normalize(v1); } } Vector3.Reflect (140 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Reflect(v1, v2); } } Vector3.Max / Vector3.Min (130 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Max(v1, v2); } } Vector3.Distance (90 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for(int i = 0; i < 10000000; i++) { Vector3.Distance(v1, v2); } } Vector3.Lerp (90 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Lerp(v1, v2, 0.235F); } } Vector3.Cross (60 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Cross(v1, v2); } } Vector3.Scale (50 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Scale(v1, v2); } } Vector3.Dot (40 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); Vector3 v2 = new Vector3(987, 654, 321); for (int i = 0; i < 1000000; i++) { Vector3.Dot(v1, v2); } } Vector3.SqrMagnitude (30 ms) void Update () { Vector3 v1 = new Vector3(123, 456, 789); for (int i = 0; i < 1000000; i++) { Vector3.SqrMagnitude(v1); } } ------------------------------------------------------------------------------------------------------------------------------------------------------ WICHTIG!: Die CPU-Zeiten gelten ausschließlich für meine Testbedingungen. Die Angaben dienen nur als Vergleich (und sind nicht auf 10ms genau zu nehmen) damit (vor allem Anfänger) Performanceprobleme schneller finden und beheben können. Ich werde diese Liste noch erweitern wenn ich die Zeit dazu finde Rangliste 24.05.2017.xlsx
  21. Hey, willkommen im Forum Um direkt mal deine Frage zu beantworten: Versuche dich erstmal mit Unity3D selbst vertraut zu machen bevor du dich an andere Assets wagst. Playmaker mag ja ganz schön und gut sein aber du solltest auch wissen, wie Unity tickt und die Programmierung auch selbst in Hand nehmen können. Ich kenne mich mit Playmaker zwar nicht so aus, weil ich lieber alles selbst schreibe, aber ich kann mir vorstellen, dass sich mit Playmaker auch nicht alles umsetzen lässt was man mit normalen Scripts lösen kann. Denn auch ohne jegliche Assets bietet Unity für einen Anfänger eine Menge.
  22. Helishcoffe

    Farty The Owl

    Ich werde es mir später auch mal ziehen. Hört sich wirklich sehr interessant an
  23. So macht der Code auch überhaupt keinen Sinn. Deine Schleife wird direkt beim 1. Durchlauf abgebrochen wegen dem "return". Sollte jedoch die Schleife gar nicht erst durchlaufen werden, so wird auch nichts zurückgegeben, weil dein einziges Return innerhalb der Schleife steht. Ich denke mal du hast einfach nur schlecht gecopy-pasted Pack mal die vorletzte Klammer direkt nach deiner Switch-Case klammer hin. Denke mal, dass die Klammer einfach nur falsch gesetzt ist
  24. Hört sich interessant an. Ist optisch auch mal eine Abwechslung. Werde es mal ausprobieren
  25. Wow sieht echt Hammermäßig aus!
×
×
  • Neu erstellen...