Stole Geschrieben 25. Juli 2017 Melden Share Geschrieben 25. Juli 2017 Hallo zusammen, ich versuche mich gerade in Unity einzulernen. Als erstes Projekt dachte ich an einen ganz simplen 2D Snake-Klon, am liebsten für mobile Endgeräte. Dafür habe ich in einem Canvas vier Panels (Breite 1px) per RectTransform und Anchors als Wände positioniert und in die Mitte ein 5x5px Image als Snake-Kopf gesetzt. Das sieht soweit auch ganz gut aus (Siehe Screenshot). Jetzt zum Problem: Wenn ich das Game-Fenster vergrößere oder die Auflösung ändere, vergrößert/verkleinert sich die Spieltwelt, aber der Snake-Kopf bleibt gleich groß. D.h. die Anzahl der World Units wäre abhängig vom Display. Stattdessen sollten sich die einzelnen Units vergerößern/verkleinern, damit die Anzahl und damit das Spielfeld gleich bleibt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 25. Juli 2017 Melden Share Geschrieben 25. Juli 2017 Das sollte eigentlich mit dem Canvas Scaler "steuerbar" sein ("UI Scale Mode" = "Scale With Screen Size" / "Match" = 0.5). Richtig eingestellt, passt sich der Canvas und die Canvaselemente an die Größe des jeweiligen Displays an und damit bleibt die GUI (d.h. auch der Snakeknopf) in Relation gleich groß.https://docs.unity3d.com/Manual/script-CanvasScaler.html Für das Image solltest du ggf. noch "Preserve Aspect" aktivieren. Nähere Infos:https://docs.unity3d.com/Manual/HOWTO-UIMultiResolution.html Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Stole Geschrieben 26. Juli 2017 Autor Melden Share Geschrieben 26. Juli 2017 Danke! Das hat mir geholfen. Update: Jetzt habe ich ein neues Problem :-). Mit dem Canvas Scaler und "Scale with Screen" sind jetzt zwar die Wände und der Snake-Pixel immer richtig proportioniert, aber mein Movement-Script verursacht unterschiedliche Geschwindigkeiten bei unterschiedlichen Auflösungen. Genauer gesagt, um so größer die Auflösung, um so langsamer die Snake. Wünschenswert wäre eine gleiche Geschwindigkeit, unabhängig von der Auflösung. Hier mein Script: public class SnakeController : MonoBehaviour { private Vector2 currentDirection; void Start () { currentDirection = Vector2.right; InvokeRepeating("Move", 0.1f, 0.1f); } void Update () { if (Input.GetKey(KeyCode.RightArrow)) currentDirection = Vector2.right; else if (Input.GetKey(KeyCode.DownArrow)) currentDirection = Vector2.down; else if (Input.GetKey(KeyCode.LeftArrow)) currentDirection = Vector2.left; else if (Input.GetKey(KeyCode.UpArrow)) currentDirection = Vector2.up; } void Move() { transform.Translate (currentDirection); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.