Unity移动端(android)移动缩放旋转

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Unity移动端(android)移动缩放旋转⾸先判断两次的位置⼤⼩缩放代码如下
private Vector2 oldops1;
private Vector2 oldops2;
//⽐较两次的位置,⼤⼩,来进⾏放⼤还是缩⼩
bool isEnlargc(Vector2 op1, Vector2 op2, Vector2 np1, Vector2 np2)
{
float lcngth1 = Mathf.Sqrt((op1.x - op2.x) * (op1.x - op2.x) + (op1.y - op2.y) * (op1.y - op2.y));
float lcngth2 = Mathf.Sqrt((np1.x - np2.x) * (np1.x - np2.x) + (np1.y - np2.y) * (np1.y - np2.y));
if (lcngth1 < lcngth2)
{
return true;
}
else
{
return false;
}
}
void Update(){
//判断两根⼿指在屏幕上移动并且不再UI上
if (Input.touchCount >1 && !EventSystem.current.IsPointerOverGameObject())
{
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)
{
Vector2 tempos1 = Input.GetTouch(0).position;
Vector2 tempos2 = Input.GetTouch(1).position;
if (isEnlargc(oldops1, oldops2, tempos1, tempos2))
{ //放⼤
float oldScale = lubansuoobj.transform.localPosition .z;
float newScale = oldScale +1.025f;
if (lubansuoobj.transform.localPosition.z <-18f)
{
lubansuoobj.transform.localPosition = new Vector3(0, 0, newScale);
}
}
else
{
//缩⼩
float oldScale = lubansuoobj.transform.localPosition.z;
float newScale = oldScale -1.025f;
if (lubansuoobj.transform.localPosition.z >-40f)
{
lubansuoobj.transform.localPosition = new Vector3(0, 0, newScale);
}
}
oldops1 = tempos1;
oldops2 = tempos2;
}
}
}
移动旋转代码如下
float x, y;
float Speed = 5;
void Update()
{
//当前是否有任何⿏标按钮或键被按住
if (Input.anyKey)
{
//当只有⼀次触摸
if (Input.touchCount == 1)
{
//触摸类型,滑动
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
//移动拖拽
//获取x轴
x = Input.GetAxis("Mouse X") * Speed;
//获取y轴
y = Input.GetAxis("Mouse Y") * Speed;
this.transform.Translate(-x, y, 0);//*Time.deltaTime
//旋转
////获取x轴
//x = Input.GetAxis("Mouse X") * xSpeed;
////获取y轴
//y = Input.GetAxis("Mouse Y") * ySpeed;
////对模型进⾏上下左右旋转 Space.World世界坐标系,Space.Self ⾃⾝坐标系
//model.transform.Rotate(Vector3.up * x * Time.deltaTime, Space.World);
//model.transform.Rotate(Vector3.left * -y * Time.deltaTime, Space.World);
}
}
}
}
加⼊利⽤插值旋转,(亲测可⽤)
float x, y;
void Start(){
x = transform.eulerAngles.y;
y = transform.eulerAngles.x;
}
void Update()
{
// 判断触摸数量为单点触摸
if (Input.touchCount == 1)
{
if (Input.GetTouch(0).phase == TouchPhase.Moved)
{
x += Input.GetAxis("Mouse X") * 5* 0.02f ;
y -= Input.GetAxis("Mouse Y") * 5* 0.02f ;
y = ClampAngle(y, -90, 90);
Quaternion rotion = Quaternion.Euler(y, x, 0);
transform.rotation = Quaternion.Lerp(transform.rotation, rotion, Time.deltaTime * 3); }
}
}
//⾓度限制
static float ClampAngle(float angle, float min, float max)
{
if (angle < -90)
angle = -90;
if (angle > 90)
angle = 90;
return Mathf.Clamp(angle, min, max);
}
这次就是这么多,以后会继续补充,感谢⼤家观看。

相关文档
最新文档