27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityでピンチイン・ピンチアウトを実装する

Posted at

Unityでピンチイン・ピンチアウトの機能を実現するために作成しました。
今回は地図(GUITextureで作成したmapというオブジェクト)が拡大、縮小しているようにしていますが、実際はカメラの視角値を変えている方法をとっています。

#スクリプト

C#
using UnityEngine;
using System.Collections;

public class PinchInOut : MonoBehaviour {
	
	//public Camera camera;
	public GUITexture map;
	
	//カメラ視覚の範囲
	float viewMin = 20.0f;
	float viewMax = 60.0f;

	float vMin = 1.0f;
	float vMax = 5.0f;
	
	//直前の2点間の距離.
	private float backDist = 0.0f;
	//初期値
	float view = 60.0f;
	float v = 1.0f;
	
	// Update is called once per frame
	void Update () {
		// マルチタッチかどうか確認
		if (Input.touchCount >= 2)
		{
			// タッチしている2点を取得
			Touch t1 = Input.GetTouch (0);
			Touch t2 = Input.GetTouch (1);
			
			//2点タッチ開始時の距離を記憶
			if (t2.phase == TouchPhase.Began)
			{
				backDist = Vector2.Distance (t1.position, t2.position);
			}
			else if (t1.phase == TouchPhase.Moved && t2.phase == TouchPhase.Moved)
			{
				// タッチ位置の移動後、長さを再測し、前回の距離からの相対値を取る。
				float newDist = Vector2.Distance (t1.position, t2.position);
				view = view + (backDist - newDist) / 100.0f;
				v = v + (newDist - backDist) / 1000.0f;

				// 限界値をオーバーした際の処理
				if(v > vMax)
				{
					v = vMax;
				}
				else if(v < vMin)
				{
					v = vMin;
				}
				
				// 相対値が変更した場合、カメラに相対値を反映させる
				if(v != 0)
				{
					map.transform.localScale = new Vector3(v, v, 1.0f);
				}
			}
		}
	}
}

今回はカメラの視角値を調整していますが、オブジェクトの大きさを変更する方法もできるかと思います。
値の大きさや速度、変更するコンテンツなどは作成するアプリにより最適な方法をお取りください。

27
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?