Tiwaz Geschrieben 8. Juni 2014 Melden Share Geschrieben 8. Juni 2014 Problem ist jetzt gelöst. Kann im Titel ggf. geändert werden. Moin moin, ich bastel grad an einem Script mit der ich die Kamera steuern kann, weil mir SmoothFollow, etc viel zu simpel ist. Außerdem ist es JavaScript und ich will es homogen in C# halten ^^ Das Problem ist, dass wenn ich scrolle die Kamera in einer Kurve nach oben weg bzw. nach unten zum Charakter hin scrollt. (Unten gibt's ne Skizze dazu in der Seitenansicht) if (Input.GetMouseButton(1)) { x += Input.GetAxis("Mouse X") * xSpeed * 0.02f; y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f; if (x > 360 || x < -360) { x = 0; } target.Rotate(0, Input.GetAxis("Mouse X") * xSpeed * 0.02f, 0); } y = ClampAngle(y, yMinLimit, yMaxLimit); Quaternion rotation = Quaternion.Euler(y, x, 0); Vector3 position = rotation * new Vector3(0.0f, 0.0f, -distance) + target.position; transform.position = position; transform.rotation = rotation; float wantedRotationAngle = target.eulerAngles.y; float wantedHeight = target.position.y + height; float currentRotationAngle = transform.eulerAngles.y; float currentHeight = transform.position.y; // Damp the rotation around the y-axis currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, damping * Time.deltaTime); // Convert the angle into a rotation Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0); // Set the position of the camera on the x-z plane to: // distance meters behind the target transform.position = target.position; transform.position -= currentRotation * Vector3.forward * distance; // Set the height of the camera transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z); currentDistance = Vector3.Distance(target.position, transform.position); if (Input.GetAxis("Mouse ScrollWheel") < 0) { if (distance < maxDistance) { distance += scrollSpeed; } } if (Input.GetAxis("Mouse ScrollWheel") > 0) { if (distance > minDistance) { distance -= scrollSpeed; } } transform.LookAt(new Vector3(target.position.x, target.position.y + height, target.position.z)); Ich hätt aber gern, dass die Kamera in einer graden Linie wegscrollt. Bin heute schon den halben Tag am Scripten und jetzt hab ich nich mehr genug Hirnschmalz beisammen, dass ich irgendwie drauf komm wo der Fehler liegt ^^ hab schon total viel ausprobiert aber es funktioniert nix. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. Juni 2014 Melden Share Geschrieben 8. Juni 2014 Ui, alles voller Vektormathematik. Dabei ist es so einfach, zwei, drei Objekte untereinander zu ordnen, zwei kleine Scripts zu schreiben, die jeweils nur drehen, neigen oder zoomen. Das sind dann jeweils Dreizeiler und wesentlich weniger Hirnkrampf. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 8. Juni 2014 Autor Melden Share Geschrieben 8. Juni 2014 @edit: Dachte ich hätte nen Lösungsansatz aber hab immer noch keinen Peil.. Vor allem wie man das Scrollen in nen 3 Zeiler packen soll ist mir nach wie vor ein Rätsel. (camera.fieldofview will ich nich benutzen) Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Juni 2014 Melden Share Geschrieben 9. Juni 2014 Wie wäre es mit Transform.localPosition? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 9. Juni 2014 Autor Melden Share Geschrieben 9. Juni 2014 Hab ich jetz mal mit ein paar Parametern und so versucht aber es kommt immer was falsches dabei raus :/ Kenn/kannte die Methode bislang aber auch noch nich und weiß jetz auch nich genau ob das so richtig funktioniert wenn die Kamera kein Parentobjekt hat ^^ Note: Es handelt sich um eine Kamera die den Charakter immer verfolgen soll, wenn sich der Charakter also dreht, soll die Kamera so positioniert werden, dass der Spieler auch weiterhin von hinten auf den charakter blickt. Außerdem soll sie, wenn man die rechte Maustaste gedrückt hält, frei bewegbar sein (mit Blick auf den Spieler) und sie darf/sollte kein Childobjekt sein, da ich später noch Elemente einbauen will wo ich die Kamera unabhängig vom Spieler wo anders Positionieren kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. Juni 2014 Melden Share Geschrieben 9. Juni 2014 Du machst einfach folgendes: Oberstes Objekt: Folge dem Spieler. Wiklich nur transform.position = target.position in LateUpdateDa die Kamera sich mitdrehen soll, auch noch transform.rotation = target.rotation Darunter: Objekt, dass sich per Input um die Y-Achse dreht. Aber mit localRotation, versteht sich Darunter: Objekt, dass sich per Input neigt, also um die x-Achse dreht Darunter: Die Kamera, mit einem Script, dass localPosition.z per Input ändert Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 9. Juni 2014 Autor Melden Share Geschrieben 9. Juni 2014 Okay, hab ich jetz gemacht und funktioniert echt super, vielen Dank @edit: Jetzt klappt alles einwandfrei, hatte immer nen Ruckler bei dem man nen Frame lang ne andere Kameraeinstellung sah, wenn ich während des Laufens die Kamera rotiert und wieder losgelassen habe (die soll dann nämlich wieder hinter den Charakter springen) Wird wohl daran gelegen haben, dass ich die Rotation des Spielers dabei ebenfalls veränder habe (damit er in die Richtung der Kamera läuft). Auf jeden Fall hab ich jetzt die Rotation beim Obersten Objekt rausgenommen und beim Objekt das für die Y-Achsen Drehung zuständig ist mit reingepackt, falls ich keine Tasten drücke und es geht ^^ Aber vielen Dank nochmal für den Denkanstoß 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.