eSo Geschrieben 1. Mai 2017 Melden Share Geschrieben 1. Mai 2017 Ich bin ganz neu hier im Forum und ich versuche Schritt für Schritt eins Unity rein zu arbeiten. Aktuell habe ich ein Thema bei dem ich gerade nicht weiter komme. Ich möchte eine Kamerasteuerung wie beispielsweise in Spielen wie Anno. Also: Mauszeiger am Bildschirmrand verschiebt die Kamera Mausrad zoomt rein und raus Ich kenn mich beim Programmieren noch nicht so gut aus. Mir fehlen grad die Programmteile wie zum Beispiel ein Befehl für den Bildschirmrand, wie man die Kamera per Code bewegt usw. Hat jemand zufällig schon eine funktionierende Skript? Ich freu mich über jede Hilfe und jeden Tipp. Viele Grüße eSo Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FileStriker Geschrieben 1. Mai 2017 Melden Share Geschrieben 1. Mai 2017 Ich denk mal die Befehle bzw. Variablen, die du suchst sind diese: Input.mousePosition; Screen.width; Screen.height; Jetzt kannst du z.B. überprüfen ob die Mausposition X größer als Screen.width - 50 ist , dann soll sich die Kamera nach rechts bewegen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Katumba Geschrieben 1. Mai 2017 Melden Share Geschrieben 1. Mai 2017 Hier ein Beispiel Code (einfach dieses Script auf die Main Camera legen): using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseMovement : MonoBehaviour { public float zoomZpeed = 2; public float scrollSpeed = 110; public Vector2 zoomRange = new Vector2(40, 100); public float initialZoom = 40; private Vector2 _zoomAngleRange = new Vector2(20, 70); private float _zoomRotation = 1; private Vector3 _initialPosition; private Vector3 _initialRotation; void Start() { _initialPosition = transform.position; _initialRotation = transform.eulerAngles; } void Update() { if (Input.GetKey("w") || Input.mousePosition.y >= Screen.height * 1) { transform.position += Vector3.forward * scrollSpeed * Time.deltaTime; } else if (Input.GetKey("s") || Input.mousePosition.y <= Screen.height * 0) { transform.position += Vector3.forward * -scrollSpeed * Time.deltaTime; } if (Input.GetKey("a") || Input.mousePosition.x <= Screen.width * 0) { transform.position += Vector3.right * -scrollSpeed * Time.deltaTime; } else if (Input.GetKey("d") || Input.mousePosition.x >= Screen.width * 1) { transform.position += Vector3.right * scrollSpeed * Time.deltaTime; } initialZoom -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 1000 * zoomZpeed; initialZoom = Mathf.Clamp(initialZoom, zoomRange.x, zoomRange.y); transform.position = new Vector3(transform.position.x, transform.position.y - (transform.position.y - (_initialPosition.y + initialZoom)) * 0.1f, transform.position.z); float x = transform.eulerAngles.x - (transform.eulerAngles.x - (_initialRotation.x + initialZoom * _zoomRotation)) * 0.1f; x = Mathf.Clamp(x, _zoomAngleRange.x, _zoomAngleRange.y); transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 1. Mai 2017 Melden Share Geschrieben 1. Mai 2017 Input.mousePosition.y >= Screen.height * 1) Input.mousePosition.y <= Screen.height * 0) Darüber würde ich nochmal nachdenken wollen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Katumba Geschrieben 1. Mai 2017 Melden Share Geschrieben 1. Mai 2017 vor 35 Minuten schrieb Sascha: Input.mousePosition.y >= Screen.height * 1) Input.mousePosition.y <= Screen.height * 0) Darüber würde ich nochmal nachdenken wollen Stimmt natürlich, kann so ersetzt werden (ist nur noch übrig geblieben ) Screen.height * 1 = Screen.height Screen.height * 0 = 0 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 2. Mai 2017 Melden Share Geschrieben 2. Mai 2017 Das ist die eine Sache. Die andere ist, dass bei einem Fullscreen-Spiel auf einem Bildschirm eine der beiden Bedingungen nie wahr sein kann. Bei 1920 Pixeln geht's in der Breite von 0 bis 1919. Man muss also beim >=-Fall mindestens 1 auf der rechten Seite abziehen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Katumba Geschrieben 2. Mai 2017 Melden Share Geschrieben 2. Mai 2017 vor 5 Stunden schrieb Sascha: Das ist die eine Sache. Die andere ist, dass bei einem Fullscreen-Spiel auf einem Bildschirm eine der beiden Bedingungen nie wahr sein kann. Bei 1920 Pixeln geht's in der Breite von 0 bis 1919. Man muss also beim >=-Fall mindestens 1 auf der rechten Seite abziehen. Ok das werde ich mir heute nochmals ansehen, habe es noch nicht auf Fullscreen getestet. Vielen Dank für dein Tipp Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
eSo Geschrieben 2. Mai 2017 Autor Melden Share Geschrieben 2. Mai 2017 vor 11 Stunden schrieb Varhius: Hier ein Beispiel Code (einfach dieses Script auf die Main Camera legen): using System.Collections; using System.Collections.Generic; using UnityEngine; public class MouseMovement : MonoBehaviour { public float zoomZpeed = 2; public float scrollSpeed = 110; public Vector2 zoomRange = new Vector2(40, 100); public float initialZoom = 40; private Vector2 _zoomAngleRange = new Vector2(20, 70); private float _zoomRotation = 1; private Vector3 _initialPosition; private Vector3 _initialRotation; void Start() { _initialPosition = transform.position; _initialRotation = transform.eulerAngles; } void Update() { if (Input.GetKey("w") || Input.mousePosition.y >= Screen.height * 1) { transform.position += Vector3.forward * scrollSpeed * Time.deltaTime; } else if (Input.GetKey("s") || Input.mousePosition.y <= Screen.height * 0) { transform.position += Vector3.forward * -scrollSpeed * Time.deltaTime; } if (Input.GetKey("a") || Input.mousePosition.x <= Screen.width * 0) { transform.position += Vector3.right * -scrollSpeed * Time.deltaTime; } else if (Input.GetKey("d") || Input.mousePosition.x >= Screen.width * 1) { transform.position += Vector3.right * scrollSpeed * Time.deltaTime; } initialZoom -= Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 1000 * zoomZpeed; initialZoom = Mathf.Clamp(initialZoom, zoomRange.x, zoomRange.y); transform.position = new Vector3(transform.position.x, transform.position.y - (transform.position.y - (_initialPosition.y + initialZoom)) * 0.1f, transform.position.z); float x = transform.eulerAngles.x - (transform.eulerAngles.x - (_initialRotation.x + initialZoom * _zoomRotation)) * 0.1f; x = Mathf.Clamp(x, _zoomAngleRange.x, _zoomAngleRange.y); transform.eulerAngles = new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z); } } Vielen Dank für die schnelle Antwort und Hilfe, wenn ich zu Hause bin probiere ich es mal aus Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
eSo Geschrieben 2. Mai 2017 Autor Melden Share Geschrieben 2. Mai 2017 vor 1 Stunde schrieb Varhius: Ok das werde ich mir heute nochmals ansehen, habe es noch nicht auf Fullscreen getestet. Vielen Dank für dein Tipp Ich würde die mit 1919 umändern, wenn es nicht geht kann ich dich nochmal anschreiben? 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.