Shaitan1805 Geschrieben 7. Juni 2016 Melden Share Geschrieben 7. Juni 2016 Hey Leute, ich arbeite aktuell an einem 2D-Game. Nun stehe ich vor einem Problem, an dem ich mich momentan schon viel zu lange aufhalte. Ich habe eine orthografische Kamera in meiner Szene, welche der Spieler bewegen kann. Per Pinch-to-zoom kann man auch das Sichtfeld beeinflussen, was in dem Fall über das Verändern des Wertes "orthographicSize" geschieht. Soweit so gut. Nun zum Problem. Ich möchte, dass die Kamera nur bis zu bestimmten Grenzen bewegt werden kann. Klar => Mathf.Clamp. Aber ich komm einfach nicht drauf, die Grenzwerte dynamisch zu berechnen. Je nach Kamerazoom sind die Werte anders. Zudem sind die Level unterschiedlich groß, aber immer ein Rechteck. Zusammenfassend suche ich also eine Möglichkeit die Grenzwerte abhängig von Levelgröße und Zoom zu berechnen. Kann mir da jemand helfen? Vielen Dank schonmal Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 7. Juni 2016 Melden Share Geschrieben 7. Juni 2016 Also die Orthographic Size hat ja über eine sehr einfache Formel Einfluss auf das Blickfeld. Die Höhe des Blickfeldes ist orthographicSize * 2. Die Breite richtet sich nach dem Seitenverhältnis, also Höhe * aspect. Bei einem 16:9-Bild und einer Orthographic Size von 5 deckst du also mit der Kamera eine Fläche ab von 17,77 * 10. Per Code kann man das so ermitteln: Vector2 GetFOV() { var height = cam.orthographicSize * 2; var width = height * cam.aspect; return new Vector2(width, height); } Jetzt kannst du die Höhe und Breite deiner Spielszene z.B. mit einem GameObject einstellen, das ein solches Skript hat: public class LevelBorder : MonoBehaviour { public static LevelBorder singleton; public Vector2 size = new Vector2(10, 10); void Awake() { singleton = this; } public Rect GetBorder() { var pos = transform.position; return new Rect(pos, size); } void OnDrawGizmos() { Gizmos.color = Color.red; var pos = transform.position; pos.z = 0; Gizmos.DrawWireCube(pos, size); } } Mit OnDrawGizmos wird der Rahmen im Editor sichtbar gemacht. Deine Kamera kann jetzt nach jeder Bewegung folgendes tun: var border = LevelBorder.singleton.GetBorder(); var halfFOV = GetFOV() / 2; border.xMin += halfFOV.x; border.yMin += halfFOV.y; border.xMax -= halfFOV.x; border.yMax -= halfFOV.y; //An dieser Stelle enthält Border den Levelrand, //der an jeder Kante um das halbe Sichtfeld der Kamera kleiner gemacht wurde. //Jetzt muss die Kameraposition nur noch in die Box geclampt werden var pos = transform.position; pos.x = Mathf.Clamp(pos.x, rect.xMin, rect.xMax); pos.y = Mathf.Clamp(pos.y, rect.yMin, rect.yMax); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Shaitan1805 Geschrieben 13. Juni 2016 Autor Melden Share Geschrieben 13. Juni 2016 Vielen Dank für Deine schnelle Antwort und entschuldige bitte meine verspätete. Habe momentan viel um die Ohren. Unser Team hat sich jetzt entschieden mit den Kamerascript noch zu warten, da es andere Prioritäten gibt. Daher hab ich Deine sachen noch nicht getestet, werde es aber noch tun. Vielen Dank nochmals 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.