安卓 觸屏旋轉、縮放、拖拽

公共函數,不放入任何模型上
using UnityEngine;
using System.Collections;

public class Globe : MonoBehaviour {
	
	public static int AugmentationObjectState = 0;//增強物體的狀態:0表示沒有檢測到識別圖; 1表示在識別圖之上;2表示脫離識別圖,但仍存在。
	// Use this for initialization
	void Start () {
		
	}
	
	// Update is called once per frame
	void Update () {
		
	}
}

放在需要旋轉、縮放、拖拽的模型上

using UnityEngine;
using System.Collections;

public class GetModelScale : MonoBehaviour {
	
	public Vector3 go_modelDefaultScale;
	
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
			go_modelDefaultScale = this.transform.localScale;
	}
}
放在需要旋轉、縮放、拖拽的模型上

using UnityEngine;
using System.Collections;

public class TouchToRotateAndScaleModel : MonoBehaviour {
	public GameObject go_model;
	private Vector3 go_modelCurScale;
	private Vector3 go_modelDefaultScale;  
	private float curScale = 1.0f; 
	private float olddis = 0.0f;
	private float newdis = 0.0f;
    private float RoatedSpeed = 100.0F;
    public float y;
    public float z;
	private Transform pickedObject = null;
    // Use this for initialization
    void Start()
    {
        y = 90;
    }
    // Update is called once per frame
    void Update()
    {
		//旋轉功能
		if (Input.touchCount==1)
        {
			if(Input.touches[0].phase == TouchPhase.Moved)//手指移動
			{ 
				y += Input.GetAxis("Mouse X") * Time.deltaTime * RoatedSpeed;
				z += Input.GetAxis("Mouse Y") * Time.deltaTime * RoatedSpeed;
				if (z <= -90)
				{
					z = Mathf.Ceil(-90);
				}
				if (z >= 90)
				{
					z = Mathf.Ceil(90);
				}
				transform.eulerAngles = new Vector3(0, y, -z);
			}
           
        }
		//縮放功能
		if(Input.touchCount == 2)
		{				
			if (go_modelDefaultScale != go_model.GetComponent<GetModelScale>().go_modelDefaultScale)                          
			{                                                                 
				go_modelDefaultScale = go_modelCurScale = go_model.GetComponent<GetModelScale>().go_modelDefaultScale;       
			}

			if(Input.GetTouch(0).phase==TouchPhase.Moved||Input.GetTouch(1).phase==TouchPhase.Moved)
			{
				var pos1=Input.GetTouch(0).position;
				var pos2=Input.GetTouch(1).position;
				newdis=Vector2.Distance(pos1,pos2);
				curScale = go_modelCurScale.x / go_modelDefaultScale.x;  

				if(newdis < olddis)
				{
					go_model.transform.localScale -= go_modelDefaultScale * Time.deltaTime;		
				}
				if(newdis>olddis) 
				{
					go_model.transform.localScale += go_modelDefaultScale * Time.deltaTime;
				}

				go_modelCurScale = go_model.transform.localScale;  
				olddis=newdis;
			}
		}
		//拖動功能
		if(Input.touchCount == 3)
		{
			if(Globe.AugmentationObjectState == 2 )
			{
				foreach (Touch touch in Input.touches) 
				{
					Debug.Log("Touching at: " + touch.position);

					if (touch.phase == TouchPhase.Began) 
					{
						Debug.Log("Touch phase began at: " + touch.position);

						pickedObject = go_model.transform;
					} 
					else if (touch.phase == TouchPhase.Moved) 
					{
						Debug.Log("Touch phase Moved");

						if (pickedObject != null) 
						{
							Vector2 screenDelta = touch.deltaPosition;

							float halfScreenWidth = 0.5f * Screen.width;
							float halfScreenHeight = 0.5f * Screen.height;

							float dx = screenDelta.x / halfScreenWidth;
							float dy = screenDelta.y / halfScreenHeight;

							Vector3 objectToCamera = pickedObject.transform.position - Camera.main.transform.position;
							float distance = objectToCamera.magnitude;

							float fovRad = Camera.main.fieldOfView * Mathf.Deg2Rad;
							float motionScale = distance * Mathf.Tan(fovRad/2);

							Vector3 translationInCameraRef = new Vector3(motionScale * dx, motionScale * dy, 0);

							Vector3 translationInWorldRef =Camera.main.transform.TransformDirection(translationInCameraRef);

							pickedObject.position += translationInWorldRef;
						}
					} 
					else if (touch.phase == TouchPhase.Ended) 
					{
						Debug.Log("Touch phase Ended");

						pickedObject = null;
					}
				}
			}
		}
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章