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); }
这次就是这么多,以后会继续补充,感谢大家观看
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器