2016-05-23 6 views
0

Dies ist ziemlich bizarr; und ich habe keine Ahnung, wie ich das beheben kann.Einheit geht über einen als Grenzwert festgelegten Wert hinaus, wenn das Scrollrad verwendet wird

Ich benutze einen Satz von Limit (Min und Max), um zu wissen, wie stark das Scrollrad eine Kamera hinein- oder herauszoomen kann. Das Problem ist, dass die Kamera stecken bleibt, weil ich festlege, dass der Zoom nur dann stattfinden soll, wenn die y-Position zwischen min und max liegt.

Einheit immer überschwingen, wenn das Mausrad verwendet wird; wenn ich 1.0f setze, und blättern; das Endergebnis endet bei 0,92; und dasselbe gilt, wenn ich ein Maximum von 5.0f einstelle und mit dem Scrollrad über 5.1 hinausschiebe.

Dies führt dazu, dass die Kamera hängen bleibt, weil jetzt der Kamera-Y-Wert über die Grenzen hinaus eingestellt ist, so dass er sich offensichtlich nicht bewegt.

Wie vermeiden Sie eigentlich, dass Unity über die tatsächlichen Grenzen hinausgeht? Diese

ist, was ich benutze

float mouse = Input.GetAxis("Mouse ScrollWheel"); 
float zoom_speed = 1.0f; 
if (transform.position.y <= 3f && transform.position.y >= 1f) 
    transform.Translate(0, -mouse * zoom_speed, mouse * zoom_speed, Space.World); 
+0

Was genau möchten Sie begrenzen? Wie weit bewegt sich die Kamera beim Rollen des Scrollrads? – Programmer

+0

Korrekt; also wird es nicht durch Dinge schneiden. Ich habe eine minimale und maximale Höhe, damit ich kontrollieren kann, wie nah oder wie weit die Kamera ist. –

+0

Ich bin gerade zurückgekommen. Hat Nikas Antwort funktioniert? Ich möchte wissen, ob ich eine Antwort geben muss oder nicht. – Programmer

Antwort

0

eine Lösung gefunden.

Grundsätzlich, wenn ich unter oder über dem Grenzwert gehe; Ich habe das Limit nur per Hand festgelegt. Nicht elegant, aber mit 4 Zeilen Code bekomme ich, was ich brauche.

Ich habe auch geändert, wie ich den Zoom handhabe; da ich nicht auf beide Y- und Z-Achse bewegen müssen, ich senke nur die Kamera auf dem Y-Achse, die

float mouse = Input.GetAxis("Mouse ScrollWheel"); 
float zoom_speed = 1.0f; 

if (transform.position.y <= 3f && transform.position.y >= 1f) 
    transform.Translate(0, -mouse * zoom_speed, 0); 
    if (transform.position.y < 1f) 
     transform.position = new Vector3(transform.position.x, 1f, transform.position.z) 
    if (transform.position.y > 3f) 
     transform.position = new Vector3(transform.position.x, 3f, transform.position.z) 

Damit für mein Szenario besser funktioniert, erhält der Wert so schnell gezwickt, wie es geändert wird Es passiert so schnell, dass die Kamera nicht zittert oder sich nur leicht bewegt. Ziemlich sicher, es gibt bessere Möglichkeiten, dies zu tun, aber das scheint für jetzt zu arbeiten.

0

Also, dieser Code Ihre Reise zwischen minZoomPos und maxZoomPos in der Weltraumtransformation macht. Der currentZoom ist der normalisierte Wert, der bestimmt, wie nahe sich verwandeln zu minZoomPos und wie var von maxZoomPos:

Vector3 minZoomPos = new Vector3(0, 1f, -3f); //transform's position when zoomed in all the way 
Vector3 maxZoomPos = new Vector3(0, 3f, -1f); //position when zoomed out 
float currentZoom = 0f; //this is normalized value >> 0 means it's zoomed all the way in, 1 means it's on all the way out 

float zoom_speed = 1.0f; //if you keep these declarations in Update() function it will give you unnecessary overhead on garbage collection 

void Update(){ 
    currentZoom += Input.GetAxis("Mouse ScrollWheel") * zoom_speed; 
    currentZoom = Mathf.Clamp01(currentZoom); 

    //get point between minZoomPos and maxZoomPos depending on currentZoom 
    transform.position = Vector3.Lerp (minZoomPos, maxZoomPos, currentZoom); 
} 
+0

Dies ist wahrscheinlich nützlich, aber können Sie einige Informationen hinzufügen, um zu erklären, was Sie geändert haben und warum es hilft? – Martin

+0

was ich getan habe, war zu versuchen, die Transformation egal was zu übersetzen und dann y-und z-Werte zwischen 1 und 3. –

+0

Verwenden Sie dies in Update()? Ich bekomme den Bildschirm ständig blinkend; versuchen, zwischen Min- und Max-Wert zu wechseln, wenn dieser Code in Update ausgeführt wird. Entfernen Sie die Klammer an Z entfernen Sie das Blinken, aber die Kamera bewegt sich nicht gerade beim Zoomen in und aus –

Verwandte Themen