Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Past hour
  2. moveToPosition wird nirgendwo aufgerufen.
  3. Today
  4. Da kann mehreres Problematisch sein. Dein Speed könnte z.B. zu gering sein und es sieht einfach so aus, als würde er nichts tun. Oder aber die >1 ist zu hoch gewählt bei: if(Vector3.Distance(transform.position, position)>1) Kann ja sein, dass dein Ziel immer weniger entfernt ist als dieser eine Meter.
  5. Ich würde mir da jetzt keinen großen Kopf machen. So wie es der Kerle da im Video gesagt hat, erzeugt jeder Animator eine Grundlast, egal ob gerade auch wirklich ein UI Element animiert wird oder nicht. Diese Grundlast ist meiner Erfahrung nach nicht besonders hoch, summiert sich aber natürlich, wenn viele UI Elemente einen Animator haben. Ein Mainmenu ist in der Regel eine eigene Szene, wo die ganzen vielen Elemente drin sind. Dort ist es meiner Meinung nach total egal, ob da eine hohe Grundlast auftritt, denn da passiert ja sonst nichts! Innerhalb des Spiels könnte es schon sein, das ein oder zwei Frames für die UI drauf gehen, "wenn" da viele Dinge animiert werden, die vielleicht besser ins Game investiert wären. Joah... kann man natürlich optimieren. Ich sehe da aber trotzdem keinen Grund, sich die dollsten Coroutinen oder Tween zu bauen, wenn ich das mit ner Animation in kurzer Zeit lösen kann. Außerdem kann man ohne Weiteres auch mehrere Elemente mit einem einzigen Animator steuern, wenn sieh in der Hierachie unter dem Objekt mit dem Animator sind. Just my two cents!
  6. Hallo zusammen. Bin neu hier im Forum, sowie Neuling in sachen Spiele entwicklung. Bin gerade dabei mich in Unity einzuarbeiten und schaue auch fleißig Tutorials um zu Lernen. Jetzt hänge ich aber fest. Ich wollte meinen Spieler mittels Mausklick sich bewegen lassen (Diablo Style). Das Script gibt keine Fehler aus. Im Log sehe ich die Coordinaten wo ich hinklicke, aber mein Player bewegt sich leider nicht. Hier meine Code: using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClickToMove : MonoBehaviour { public float speed; public CharacterController controller; private Vector3 position; void Start() { position = transform.position; } void Update() { if(Input.GetMouseButton(0)) { locatePosition(); } } void locatePosition() { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if(Physics.Raycast(ray, out hit, 1000)) { position = new Vector3(hit.point.x, hit.point.y, hit.point.z); Debug.Log(position); } } void moveToPosition() { if(Vector3.Distance(transform.position, position)>1) { Quaternion newRotation = Quaternion.LookRotation(position-transform.position, Vector3.forward); newRotation.x = 0f; newRotation.z = 0f; transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.deltaTime * 10); controller.SimpleMove(transform.forward * speed); } } } Ich benutze Unity 2018 falls das wichtig ist. Vielen dank für eure Hilfe und einen schönen Tag wünsche ich noch.
  7. Ja schon klar. Mich beschäftigt nur gerade die Frage, was da so viel Leistung frisst. Es geht bei mir z.B. ja nur um das Ausblenden, von sagen wir 10 Grafiken in ein bis zwei Sekunden. Davon dürfte das Spiel bzw. die Performance doch eigentlich nichts mitbekommen. Frag mich, was genau das so an der Performance zieht. Denke heute oder morgen mache ich mal einen Test, mal sehen ob es signifikante Unterschiede gibt.
  8. Da hast du Recht. 😉 Das ist bei mir aber nicht der Fall. Ich mache das nur um allgemein Sachen nicht öfters laufen zu lassen als nötig. Wenn so etwas meine FPS runter ziehen würde, dann würde ich das mit dem C# Job System machen, denn das ist genau für solche Sachen gemacht. Immer wieder das gleiche machen in hoher Anzahl. 😊
  9. Wenn du jeden 5. Frame alle Checks machst, weil deine Framerate ansonsten spürbar runterginge, dann ist ja trotzdem jeder 5. Frame länger als die anderen. Dann hast du eine insgesamt höhere Framerate, aber die ist dafür dann nicht mehr gleichbleibend... das finde ich als Spieler ehrlich gesagt immer noch schlimmer
  10. Also ich mache solche wiederkehrenden Distanzmessungen immer so das ich die nur alle X Frames überprüfen. Wie oft das hängt vom Spiel ab und wie schnell das erfolgen muss. In dem Beispiel wird nur bei jedem 5. Frame gemessen. private int distanceCheckInterval = 5 private void Update() { if (Time.frameCount % distanceCheckInterval == 0) { // Distanz messen // Gegner anzeigen bei entsprechender Distanz } }
  11. Yesterday
  12. Ach so... Da ist aber der einfachste Weg, nicht Rotate zu benutzen, sondern den Winkel selber zu mainteinen und ihn dann nur zu setzen. private float angle = 0; private float min = -10; private float max = 20; private void Update() { angle += Whatever(); angle = Mathf.Clamp(angle, min, max); var eulerAngles = transform.eulerAngles; eulerAngles.x = angle; transform.eulerAngles = eulerAngles; }
  13. Du, ich sag ja nicht dass du keinesfalls Mecanim für UI benutzen solltest. Nur, dass dir bewusst sein muss, dass du damit nicht endlos weit kommst.
  14. Danke euch drei! So wie es aussieht, benutzt ihr eifrig die Properties. Hatte da immer einen Bogen drum gemacht.
  15. mhm nun also der screenshot ist schon aus einem terrain das ich codiert in ein terrain/splatprototyp geladen habe.... pixel für pixel. Das funktioniert an sich so, wie ich das will. Am Ende ist diese 512x512 Textur jedoch dann "eine".
  16. Ok, gelöst: public float rotCorrect = 5; // for smoothness keep between 5-10 // to low will be watered out by collision resolution // to high will jitter, or jump public float correctAt = 30; // should not ever exceed 90, and in some cases // should never exceed 45 depending. // keeps the player upright by performing sutle corrections to the rotation if((transform.eulerAngles.x>=correctAt)&&(transform.eulerAngles.x<180)){ transform.Rotate(-rotCorrect,0,0); } if((transform.eulerAngles.x<=(360-correctAt))&&(transform.eulerAngles.x>=180)){ transform.Rotate(rotCorrect,0,0); } if((transform.eulerAngles.z>=correctAt)&&(transform.eulerAngles.z<180)){ transform.Rotate(0,0,-rotCorrect); } if((transform.eulerAngles.z<=(360-correctAt))&&(transform.eulerAngles.z>=180)){ transform.Rotate(0,0,rotCorrect); }
  17. mhhh ich glaube ich habe mich falsch ausgedrückt....es geht mir nicht um ein Rad oder um ähnliches. Ich will einfach per eulerAngle den maximwinkel einschränken...
  18. Also eher doch wie auf alt hergebrachte Art und Weise über Coroutine und Canvas Group ausblenden. Überleg mir gerade auch das ganze ausblenden wieder auszubauen. Ist eigentlich wenig wichtig und bläht den Code nur auf. Wenn man wüsste, wie man´s richtig macht. *grübel* Malzbie hat schon recht, der User will vorran kommen und mach ich im Main-Menue Blendeffekte, muss ich das auch im Game-Menue machen, sonst wirkts unprofessionell. Einmal Blenden, einmal nicht.
  19. Mach halt ein GameObject für die Radaufhängung, das sich um die vertikale Achse dreht. Dem ordnest du dein Rad unter, das sich ausschließlich um seine lokale horizontale Achse dreht.
  20. Hi Leute, ich hab heute schon wieder zuviel Code im Hirn, das ich vor lauter Bäume den Wald nicht mehr sehe. Ist Zustand: - 1 Auto - 1 Rigibody Das Auto fährt, 2 Reifen berühren einen Gegenstand und das Auto fährt ewig auf 2 Reifen davon. Gut..... transform.rotation.eulerAngle brauch ich also. Mein Problem ist, meine Werte schwanken (aufgrund der Federn und des Geländes) von 355, 356, 360...bis zu 2.... wo das Auto "gerade" wirkt. Wie bewerkstellige ich also so einen Bereich als Max-Limit wenn ich bspw. nicht über einen Winkel von sagen wir 35° nicht überschreiten will, egal ob links oder rechts seitlich. Ich weiß die Antwort ist so einfach danke für den Hint
  21. Du kannst Mecamin auf dein gesamtes UI loslassen. Dazu sei aber gesagt, dass das in Sachen Performance zwei der eher problematischen Systeme sind, die Unity so anbietet. Das kann in der Kombination schnell nach hinten losgehen. Und wenn jemand wie ich, der sonst alle Hände damit voll hat, Leuten zu sagen, sie sollen sich mal nicht wegen Performance in's Hemd machen, dann weißt du, dass es ernst ist Hier hast du dazu ein Video mit Timestamp:
  22. Danke erst ma für die ausführliche Antwort. 🙂 Meine Scenen-Einblendung habe ich auch über ein Image gemacht, ihm einen Animator verpasst und einfach den Alpha-Regler verschoben. Das ist nur ein Animator und eine Codezeile, die an den Animator gerichtet ist. Frage von mir wäre, könnte man das selbe mit einem ganzen Menü machen, mit Hintergründen, Buttons und sonst was, müsste das nicht auch einfacher und sparsamer sein? Denn nun habe ich zwar eine Canvas-Group, wo ich den Regler verschiebe, jedoch brauch ich erst mal eine Methode, mit der ich eine Coroutine aufrufe und die Coroutine wiederrum blendet aus, da ich ja die Wait-Befehle aus der Coroutine brauche. So dann brauch ich also: Eine Methode + Coroutine von Main-Menue zum Charakter-Menue Eine Methode + Coroutine von Main-Menue zum Settings-Menue Eine Methode + Coroutine von Main-Menue zum Load-Menue Das gesamte dann noch ma in umgekehrter Reihenfolge. Sind dann sechs Methoden + Coroutinen, kann ich auch leider nicht kürzen, weil ich ja auch den Raycast-Block an- und abschalten muss. Einfacher wäre das mit zwei Zeilen. Raycast-Block und Animator aufruf. Wäre es möglich so was über den Animator zu realisieren?
  23. Allerdings muss man noch darauf achten, dass hier nun auch etwas ausgeführt wird, wenn sich der State nicht wirklich ändert. Man kann das aber auch einfach umgehen, wenn man möchte. public UnityEvent playerStateChanged; //mit so einem event können sich dann auch mehrere daran registrieren, um auf eine Änderung zu reagieren private Playerstate currentPlayerState; public Playerstate CurrentPlayerState { get { return currentPlayerState; } set { if(currentPlayerState != value) { currentPlayerState = value; if(playerStateChanged != null) { playerStateChanged.Invoke(); } } } }
  24. Last week
  25. Hier sind ein paar gelistet: https://de.wikipedia.org/wiki/Kürzester_Pfad Der üblichste Algorithmus für dein Problem ist der Dijkstra-Algorithmus. Der ist auch vergleichweise noch recht einfach zu implementieren.
  26. Cool danke.Ja genau zurzeit sind meine Waypoints alles GameObjects. Wo finde ich denn so einen Pathfinding Algorithmus?
  27. Nehmen wir mal an, deine Wegpunkte sind GameObjects mit je einer "Waypoint"-Komponente dran. Dann kannst du der Klasse eine Array-Feld geben, in dem alle Wegpunkte drinstehen, zu dem der Character von dort aus kann: public Waypoint[] connectedWaypoints; Da kannst du dann andere Wegpunkte einfach im Inspektor reinziehen. Dann kannst du noch eine hübsche OnDrawGizmos-Methode basteln, die dir visualisiert, wie die Punkte verbunden sind: private void OnDrawGizmos() { // Nur sicherheitshalber... if (connectedWaypoints == null) return; Gizmos.color = Color.blue; foreach (var waypoint in connectedWaypoints) { Gizmos.DrawLine(transform.position, waypoint.transform.position); } } Und jetzt kannst du einen beliebigen Pathfinding-Algorithmus über alle deine Waypoints drüberlaufen lassen und brauchst nie wieder deinen Code erweitern, egal wie groß das Netz wird.
  28. Jepp das mach ich leider gerade so. Die Verbindung besteht nur in Arrays.Zum Beispiel das Object bei WP1 hat ein patharray welches so lautet[WP5,WP3,WP2,WP1].Wenn die Figur zum Beispiel bei WP8 steht überprüfe ich welcher Punkt vom Hauptpfad(5,3,2,1) am nächsten ist. Dann schicke ich die Figur erst zum diesem Punkt hin und gucke dann an welcher stelle des patharray sich die Figur gerade befindet und lasse sie dann die restlichen Punkte ablaufen.Seeeehr umständlich alles ^^
  1. Load more activity

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...