私のパースペクティブカメラはx軸で回転します。私はスクロールホイールでズームを実装し、それは素晴らしい作品です。Unity3Dでカメラを前後に動かすベクトル
私はズームを制限しようとしています。今私の解決策は、transform.forward
のyとz成分の相対的なスケールを取って、Mathf.Clamp
を使ってminZoom
とmaxZoom
浮動小数点数に対応するtransform.forward
コンポーネントを掛けて、カメラのyとzの位置を固定することです。それはy軸を制限することを除いてうまくいきます。私が周りを翻訳するとき、私のクランプは理想的にはズームのみに影響を与えることが意図されているため、与えられたyより下に行くことはできません。
カメラの前後の動きをクランプする方法はありますか?私はどこからでも見てきましたが、事を見つけることはできません。
ありがとうございました。
編集
ここでは、関連するコード(私の締め付けがLateUpdateで発生)です:
public class ClickManager : MonoBehaviour
{
public float dragSpeed = 2;
public float minZoom = 0.5f;
public float maxZoom = 5.0f;
private Vector3 dragOrigin;
private float lerpPercentBack = 0; // value between 0 and 1 representing percentage of lerp
private float lerpPercentForward = 0;
private bool isLerpingBack = false;
private bool isLerpingForward = false;
void Update()
{
float scroll = Input.GetAxis("Mouse ScrollWheel");
if (Input.GetMouseButtonDown(1))
{
dragOrigin = Input.mousePosition;
return;
}
if (scroll > 0)
{
isLerpingForward = true;
lerpPercentForward = 0;
}
if (scroll < 0)
{
isLerpingBack = true;
lerpPercentBack = 0;
}
if (isLerpingBack)
{
scrollLerperBack();
lerpPercentBack += 0.05f;
if (lerpPercentBack >= 1.0f)
{
lerpPercentBack = 0;
isLerpingBack = false;
}
}
if (isLerpingForward)
{
scrollLerperForward();
lerpPercentForward += 0.05f;
if (lerpPercentForward >= 1.0f)
{
lerpPercentForward = 0;
isLerpingForward = false;
}
}
//Debug.Log(lerpPercent);
/*if (!Input.GetMouseButton(1)) return;
Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
Vector3 move = new Vector3(pos.x * dragSpeed, pos.y * dragSpeed, 0);
transform.Translate(move, Space.World);
Debug.Log(scroll);*/
}
void scrollLerperBack()
{
transform.position -= Vector3.Lerp(transform.forward, Vector3.zero, lerpPercentBack);
}
void scrollLerperForward()
{
transform.position += Vector3.Lerp(transform.forward, Vector3.zero, lerpPercentForward);
}
void LateUpdate()
{
Vector3 pos = transform.position;
pos.y = Mathf.Clamp(pos.y, minZoom * transform.forward.y,
maxZoom * transform.forward.y);
pos.z = Mathf.Clamp(pos.z, minZoom * transform.forward.z,
maxZoom * transform.forward.z);
transform.localPosition = pos;
}
}
代わりの段落で、あなたのコードを説明するが、その質問を投稿する方が良いプログラミング言語は英語ではなくわかりやすいです:) –
もちろん、コードを追加します。 – duncster94