Jump to content
Unity Insider Forum

Edit: Bewegungsgeschwindigkeit unabhängig von der Auflösung


Stole

Recommended Posts

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. 

Snake2DWorld.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...