Alex88 Geschrieben 9. November 2012 Melden Share Geschrieben 9. November 2012 Hallo zusammen, ich arbeite im Moment an einer Echtzeit-Strategie-Spiel Kamera wie z.B. bei C&C. Im Moment stehe ich allerdings noch ganz am Anfang und versuche folgendes um zu setzen: Mit den Pfeiltasten oder WASD soll sich die Kamera vorwärts, rückwärts, links und rechts bewegen lassen. Bei gedrückter mittlerer Maustaste soll man die Kamera um sich selber drehen können. Da die Kamera allerdings nicht gerade von oben auf das Geschehen drauf schaut, sonder im 30 Grad Winkel ist, fällt es mir etwas schwer, dass die Kamera sich nicht in Blickrichtung, sondern in die Drehrichtung bewegt. Ich habe das ganze wie folgt gelöst und obwohl es zwar funktioniert, bin ich mit der Lösung noch nicht glücklich. Habt ihr ein paar Tipps für mich? function FixedUpdate() { mainCamera.transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * scrollSpeed * Time.deltaTime); mainCamera.transform.position.y = 5; if (Input.GetButton("Fire3")) { //mainCamera.transform.eulerAngles.y += Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime; mainCamera.transform.Rotate(0, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime, 0, Space.World); } } P.S. Welche Form ist bei der Rotation mit der mittleren Maustaste eleganter? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 10. November 2012 Melden Share Geschrieben 10. November 2012 Ich mach das immer über Objekthierarchien. Oberstes Objekt: ViewTarget (da schaut die Kamera hin, das Ding rollt über den Bode und wird um die Y-Achse gedreht) Dadrunter: CameraParent (Sorgt für die Neigung der Kamera, dreht sich also um seine lokale X-Achse) Und zum Schluss: Die Kamera (Wird auf dessen lokaler Z-Achse verschoben, um die Kamera weiter weg oder näher dran zu schieben) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alex88 Geschrieben 12. November 2012 Autor Melden Share Geschrieben 12. November 2012 Hey Sascha, danke für deine Hilfe, aber wirklich viel besser klingt deine Lösung leider auch nicht. Ich habe den Script jetzt mal etwas verfeinert. Jetzt muss noch eine Beschränkung beim Zoomen rein und dass die Kamera sich bei Berührungen des Bildschirmrandes bewegt. Mal gucken ob ich mich mit meiner Lösung doch noch irgendwie anfreunden kann. function FixedUpdate() { var cameraHigh : float = mainCamera.transform.position.y; // Zwischenspeicher fuer die Kamerahoehe mainCamera.transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * scrollSpeed * Time.deltaTime); mainCamera.transform.position.y = cameraHigh; if (Input.GetButton("Fire3")) { mainCamera.transform.Rotate(0, Input.GetAxis("Mouse X") * rotateSpeed * Time.deltaTime, 0, Space.World); } if (Input.GetAxis("Mouse ScrollWheel")) { mainCamera.transform.Translate(new Vector3(0, 0, Input.GetAxis("Mouse ScrollWheel")) * zoomSpeed * Time.deltaTime); cameraHigh = mainCamera.transform.position.y; // Neue Kamerahoehe zwischenspeichern } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. November 2012 Melden Share Geschrieben 13. November 2012 Was genau stört dich an der Lösung? Sie nutzt die für 3D-Grafik gängige Methode, Matrizen-Kettenmultiplikation für komplexere Transformationen anzuwenden... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Alex88 Geschrieben 13. November 2012 Autor Melden Share Geschrieben 13. November 2012 Eigentlich stören mich nur diese zwei Zeilen: mainCamera.transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")) * scrollSpeed * Time.deltaTime); mainCamera.transform.position.y = cameraHigh; Ich setze die Bewegung der Kamera über transform.Translate um, muss dann aber quasi manuell die Kamerahöhe wieder zurücksetzen, da sich die Kamera sonst durch die 30 Grad Neigung nach unten bewegen würde. Das empfinde ich halt als unsauber. Mit dem Rest bin ich eigentlich zufrieden. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. November 2012 Melden Share Geschrieben 13. November 2012 Hast du die Kamera mal auf 90° gedreht und geschaut, wie gut deine Zeile dann noch funkioniert? Hau als letzten Parameter für Translate noch ein Space.World rein. Dann geht zwar die Drehung um die y-Achse erst einmal flöten, dafür kann man die Kamera relativ zur Welt, also unabhängig von der eigenen Neigung bewegen. 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.