📷
【Unity】スクリプトでカメラのズームインアウトを実装する方法(PCとスマホ)
今回スマホとPCのスクロールによるズームの方法を紹介します。
PCのマウススクロールでズームインアウト
カメラのz軸をマウススクロールによって距離を変化させるスクリプト
float MouseZoomSpeed = 15.0f;
private Camera cam;
void Update()
{
CameraZoom();
}
void CameraZoom()
{
float scroll = Input.GetAxis("Mouse ScrollWheel");
Zoom(scroll, MouseZoomSpeed);
}
void Zoom(float deltaMagnitudeDiff, float speed)
{
float z = cam.transform.localPosition.z + deltaMagnitudeDiff * speed;
cam.transform.localPosition = new Vector3(cam.transform.localPosition.x, cam.transform.localPosition.y, z););
}
カメラのfield of view(拡大率)をマウススクロールによって変化させるスクリプト
float MouseZoomSpeed = 15.0f;
float ZoomMinBound = 0.1f;
float ZoomMaxBound = 179.9f;
private Camera cam;
void Update()
{
CameraZoom();
}
void CameraZoom()
{
float scroll = Input.GetAxis("Mouse ScrollWheel");
Zoom(scroll, MouseZoomSpeed);
}
void Zoom(float deltaMagnitudeDiff, float speed)
{
cam.fieldOfView += deltaMagnitudeDiff * speed;
cam.fieldOfView = Mathf.Clamp(cam.fieldOfView, ZoomMinBound, ZoomMaxBound);
}
スマホでピンチイン、ピンチアウト
またスマホでピンチイン、ピンチアウトを実装したい時は以下をCameraZoom()の部分を変更
void CameraZoom()
{
float scroll = Input.GetAxis("Mouse ScrollWheel");
Zoom(scroll, MouseZoomSpeed);
}
↓
void CameraZoom()
{
if (Input.touchCount == 2)
{
// get current touch positions
Touch tZero = Input.GetTouch(0);
Touch tOne = Input.GetTouch(1);
// get touch position from the previous frame
Vector2 tZeroPrevious = tZero.position - tZero.deltaPosition;
Vector2 tOnePrevious = tOne.position - tOne.deltaPosition;
float oldTouchDistance = Vector2.Distance(tZeroPrevious, tOnePrevious);
float currentTouchDistance = Vector2.Distance(tZero.position, tOne.position);
// get offset value
float deltaDistance = oldTouchDistance - currentTouchDistance;
Zoom(deltaDistance, TouchZoomSpeed);
}
}
記事は以上です。お疲れ様でした😌
Discussion