unity在安卓设备上滑动旋转场景实现

在PC端unity通过鼠标拖动来旋转观看场景的方法非常简单,但是在安卓设备上无法很好的使用。

下面方法可以实现在安卓设备上手指滑动屏幕就可以旋转观看场景,还可以通过两个或多个手指来对场景放大缩小。

实现思路和在pc端的一样,把一个物体作为目标物体,然后相机围绕整个物体旋转!

具体案例:

在下面场景里我放置了一个plane一个cube和一个相机,cube就是目标物体,只需要在相机上挂一个脚本move就可以实现;

unity在安卓设备上滑动旋转场景实现_第1张图片


此方法里核心功能我都在代码里给了注释

Move代码:

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour 
{
	public Transform box;

	public float distance=10.0f;//相机距离目标物体默认距离大小

	public float xSpeed=250.0f;//X(左右旋转速度)
	public float ySpeed=120.0f;//(上下旋转速度)
	public float yMinLimit=-20;//旋转上下角度最小限制
	public float yMaxLimit=80;

	float X=0.0f;
	float Y=0.0f;
	float StartDis;

	float XChange;//旋转灵敏度

	void Start () 
	{
		Vector3 angles=transform.eulerAngles;
		X =angles.y;
		Y =angles.x;
	}
	
	void Update ()
	{		

		if(Input.touchCount==1)
		{
			X-=Input.GetTouch(0).deltaPosition.x*xSpeed*Time.deltaTime/60;//+和-决定从左向右旋转还是从右向左转
			Y+=Input.GetTouch(0).deltaPosition.y*ySpeed*Time.deltaTime/60;	//+和-决定从上向下旋转还是从下而上转
			if(Input.GetTouch(0).phase==TouchPhase.Ended)
			{
				if(Input.GetTouch(0).deltaPosition.x>5)
				{
					XChange=5;
				}
				else if(Input.GetTouch(0).deltaPosition.x<-5)
				{
					XChange=-5;
				}
				else
				{
					XChange=Input.GetTouch(0).deltaPosition.x;
				}
			}
		}

		X+=XChange;
		if(XChange>0)
		{
			XChange-=Time.deltaTime*5;
		}
		else if(XChange<0)
		{
			XChange+=Time.deltaTime*5;
		}

		if(Input.touchCount >1)
		{
			if(Input.GetTouch(0).phase==TouchPhase.Began||Input.GetTouch(1).phase==TouchPhase.Began)  
			{
				 StartDis=Vector2.Distance(Input.GetTouch(0).position,Input.GetTouch(1).position);
			}

			if(Input.GetTouch(0).phase==TouchPhase.Moved ||Input.GetTouch(1).phase==TouchPhase.Moved)  
			{
				Vector2 tempPosition1= Input.GetTouch(0).position;  
				Vector2 tempPosition2= Input.GetTouch(1).position;  

				float dis=Vector2.Distance(tempPosition1,tempPosition2);
				if(disStartDis)
				{
					if(distance >3)
					{
						distance -= Time.deltaTime*7;
					}  
				}  
			}  
		}  
	}

	void LateUpdate()
	{
		if(box)
		{
			if(Y<-90)//这里控制着上下旋转角度
			{
				Y=-90;
			}
			if(Y>180)//这里控制着上下旋转角度
            {
				Y=180;
			}
			Y=ClampAngle(Y,yMinLimit,yMaxLimit);
			transform.rotation=Quaternion.Euler(Y,X,0);
			transform.position=transform.rotation*new Vector3(0,0,-distance)+box.position;
		}
	}
	
	static float ClampAngle(float angle,float min,float max)
	{
		if(angle<-360)
			angle+=360;
		if(angle>360)
			angle-=360;
		return Mathf.Clamp(angle,min,max);
	}
	
}


你可能感兴趣的:(unity3D)