2016-05-23 4 views
0

これはむしろ奇妙です。実際に修正する方法はわかりません。スクロールホイールを使用しているとき、Unityが限界値として設定された値を超えています

スクロールホイールがどれだけズームインまたはズームアウトすることができるかを知るために、リミット(最小値と最大値)のセットを使用します。問題は、y位置がminとmaxの間にある場合にのみズームが実行されるように指定しているため、カメラが動かなくなることです。

マウスのスクロールホイールを使用していると、ユニティは常にオーバーシュートします。 1.0fを設定してスクロールすると、最終結果は0.92となる。私は5.0fの最大値を設定し、スクロールホイールを使用すると、5.1にオーバーシュートします。

この結果、カメラのy値が限界を超えて設定されているため、カメラが動かなくなるので、明らかに動きません。

実際には、統一は実際の制限を超えてしまうことをどう避けますか?

これは私がそう

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

正確に何を制限しますか?スクロールホイールを回すときにカメラがどのくらい移動しますか? – Programmer

+0

修正;それはトラフの物をクリップしません。私は最小と最大の高さを持っているので、カメラの距離や距離を制御できます。 –

+0

ちょうど戻った。ニカの答えは機能しましたか?私は答えを提供する必要があるかどうかを知りたい。 – Programmer

答えて

0

解決策を見つけた:currentZoomはmaxZoomPosからvarがどれだけ近いかminZoomPosに変換され、どのように判断し正規化した値です。

基本的に私が限界を上回るか上回る場合、私は手で限界を設定しています。エレガントではありませんが、4行のコードで私は必要なものを手に入れます。

また、ズームの処理方法も変更しました。私は両方のYとZ軸方向に移動する必要がないので、私はちょうど、値はできるだけ早くそれが変更されたよう微調整します。これにより

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) 

私のシナリオのためのより良い作品Y軸上のカメラを、下げますそれは非常に速く起こり、カメラがジッタを感じたり、少し動くことさえありません。かなり良い方法があることは間違いありませんが、これは今のところうまくいくようです。

0

を使用しているもので、このコードは、あなたがワールド空間でminZoomPosと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

これはおそらく便利ですが、変更した内容とその理由を説明する情報を追加できますか? – Martin

+0

私がしたのは何があってもトランスフォームを変換しようとしていて、1と3の間でyとzの値をクランプしてみることでした。 –

+0

これはUpdate()で使用しますか?私は画面が連続的に点滅する。 Updateでこのコードを実行すると、最小値と最大値の間で変更しようとしています。 Zのクランプを外すと点滅は消えますが、カメラをズームインしてズームアウトするとすぐに移動しません –

関連する問題