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

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

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

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

具体案例:

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



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

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(dis<StartDis)
				{
					if(distance <130)//远近距离大小
					{
						distance += Time.deltaTime*7;
					}
				}
				else  if(dis>StartDis)
				{
					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);
	}
	
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值