Unity实现 双指触摸放大缩小镜头 单指平移镜头
一、使用场景需要全场景观察模型和放大看模型局部细节的时候二、具体的脚本内容如下:/*** * Title三维可视化 项目 * 主题手势控制物体的旋转缩放 * Description * 功能 * 1、实现单指滑动左右移动镜头 * 2、双指缩放镜头 * Date2019 * Version0.1版本 * AuthorCoffee * Modify Recoder */ using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Control { public class GestureControl : MonoBehaviour { //摄像机距离 public float distance 8.0f; //缩放系数 public float scaleFactor 2f; public float maxDistance 20f; public float minDistance 2f; //记录上一次手机触摸位置判断用户是在左放大还是缩小手势 private Vector2 oldPosition1; private Vector2 oldPosition2; private Vector2 lastSingleTouchPosition; private Vector3 m_CameraOffset; private static Camera m_Camera; public bool useMouse true; public bool lookObj false; //定义摄像机可以活动的范围 public float xMin -100; public float xMax 100; public float zMin -100; public float zMax 100; //这个变量用来记录单指双指的变换 private bool m_IsSingleFinger; //初始化游戏信息设置 void Start() { m_Camera this.GetComponentCamera(); m_CameraOffset m_Camera.transform.position; } IEnumerator LookMoveObj() { yield return new WaitForSeconds(1f); if (moveObj!null) { CameraFllow.FollowObj(m_Camera.transform, moveObj.transform); } } void Update() { //判断触摸数量为单点触摸 if (Input.touchCount 1) { if (Input.GetTouch(0).phase TouchPhase.Began || !m_IsSingleFinger) { //在开始触摸或者从两字手指放开回来的时候记录一下触摸的位置 lastSingleTouchPosition Input.GetTouch(0).position; } if (Input.GetTouch(0).phase TouchPhase.Moved) { MoveCamera(Input.GetTouch(0).position); } m_IsSingleFinger true; } else if (Input.touchCount 1) { //当从单指触摸进入多指触摸的时候,记录一下触摸的位置 //保证计算缩放都是从两指手指触碰开始的 if (m_IsSingleFinger) { oldPosition1 Input.GetTouch(0).position; oldPosition2 Input.GetTouch(1).position; } if (Input.GetTouch(0).phase TouchPhase.Moved || Input.GetTouch(1).phase TouchPhase.Moved) { ScaleCamera(); } m_IsSingleFinger false; } //用鼠标的 if (useMouse) { distance - Input.GetAxis(Mouse ScrollWheel) * scaleFactor; distance Mathf.Clamp(distance, minDistance, maxDistance); if (Input.GetMouseButtonDown(0)) { lastSingleTouchPosition Input.mousePosition; //Debug.Log(GetMouseButtonDown: lastSingleTouchPosition); } if (Input.GetMouseButton(0)) { MoveCamera(Input.mousePosition); } } } /// summary /// 触摸缩放摄像头 /// /summary private void ScaleCamera() { //计算出当前两点触摸点的位置 var tempPosition1 Input.GetTouch(0).position; var tempPosition2 Input.GetTouch(1).position; float currentTouchDistance Vector3.Distance(tempPosition1, tempPosition2); float lastTouchDistance Vector3.Distance(oldPosition1, oldPosition2); //计算上次和这次双指触摸之间的距离差距 //然后去更改摄像机的距离 distance - (currentTouchDistance - lastTouchDistance) * scaleFactor * Time.deltaTime; //把距离限制住在min和max之间 distance Mathf.Clamp(distance, minDistance, maxDistance); //备份上一次触摸点的位置用于对比 oldPosition1 tempPosition1; oldPosition2 tempPosition2; } //Update方法一旦调用结束以后进入这里算出重置摄像机的位置 private void LateUpdate() { var position m_CameraOffset m_Camera.transform.forward * -distance; m_Camera.transform.position position } private void MoveCamera(Vector3 scenePos) { Vector3 lastTouchPostion m_Camera.ScreenToWorldPoint(new Vector3(lastSingleTouchPosition.x, lastSingleTouchPosition.y, -1)); Vector3 currentTouchPosition m_Camera.ScreenToWorldPoint(new Vector3(scenePos.x, scenePos.y, -1)); Vector3 v currentTouchPosition - lastTouchPostion; m_CameraOffset new Vector3(v.x, 0, v.z) * m_Camera.transform.position.y; //把摄像机的位置控制在范围内 m_CameraOffset new Vector3(Mathf.Clamp(m_CameraOffset.x, xMin, xMax), m_CameraOffset.y, Mathf.Clamp(m_CameraOffset.z, zMin, zMax)); //Debug.Log(lastTouchPostion | currentTouchPosition | v); lastSingleTouchPosition scenePos; } }//Class_end }

相关新闻

CZSC缠论插件:3步快速部署的终极通达信智能交易解决方案

CZSC缠论插件:3步快速部署的终极通达信智能交易解决方案

CZSC缠论插件:3步快速部署的终极通达信智能交易解决方案 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator CZSC缠论可视化交易插件是一款专为通达信软件设计的开源缠论分析工具,将复…

2026/7/28 15:15:22阅读更多 →
物联网安全:硬件安全元件SE050的应用与集成

物联网安全:硬件安全元件SE050的应用与集成

1. 物联网安全现状与硬件安全元件的必要性物联网设备的安全威胁正在呈现指数级增长态势。根据最新的行业安全报告,2023年全球物联网设备遭受的攻击次数同比增加了87%,其中针对工业控制系统的针对性攻击占比高达42%。传统基于软件的安全方案在面对物理侧信…

2026/7/28 15:15:22阅读更多 →
Google AI Overviews 43%覆盖率深度解析:AI搜索RAG系统架构、GEO生成式引擎优化与搜索引擎的范式革命

Google AI Overviews 43%覆盖率深度解析:AI搜索RAG系统架构、GEO生成式引擎优化与搜索引擎的范式革命

一、引言:AI搜索正在成为默认入口 2026年7月,Similarweb发布的最新数据显示,Google AI Overviews在搜索结果中的出现率从一年前的15%飙升至43%,AI Mode的月访问量从2025年6月的1.26亿增长到2026年5月的2.79亿,翻了一倍以上。这意味着AI搜索已经不再是可选的附加功能,而是…

2026/7/28 15:15:22阅读更多 →
ESP32-C6点灯报错全解析:从环境搭建到代码调试的完整排错指南

ESP32-C6点灯报错全解析:从环境搭建到代码调试的完整排错指南

1. 从“点灯”到“报错”:一个看似简单任务的复杂开局“点灯”,在嵌入式开发领域,几乎是所有开发者入门的第一课,其地位堪比编程界的“Hello World”。对于ESP32-C6这颗集成了Wi-Fi 6、蓝牙5.0和Zigbee 3.0的RISC-V新星来说&#…

2026/7/28 16:25:49阅读更多 →
VisualCppRedist AIO:一站式解决Windows DLL缺失错误的终极方案

VisualCppRedist AIO:一站式解决Windows DLL缺失错误的终极方案

VisualCppRedist AIO:一站式解决Windows DLL缺失错误的终极方案 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist VisualCppRedist AIO是一个开源工具&…

2026/7/28 16:25:49阅读更多 →
为什么你的AI副业总在加班?:4类时间伪勤奋诊断表+实时监控SOP,今晚就能启用

为什么你的AI副业总在加班?:4类时间伪勤奋诊断表+实时监控SOP,今晚就能启用

更多请点击: https://codechina.net 第一章:为什么你的AI副业总在加班? 当深夜的终端窗口还亮着,GPU显存占用率卡在98%,而你第7次重跑微调脚本时——问题可能不在模型,而在你默认的“副业工作流”本身。多…

2026/7/28 16:25:49阅读更多 →
卜若的代码笔记-android系列-插件:带图片的Spinner插件

卜若的代码笔记-android系列-插件:带图片的Spinner插件

1.该插件是我自己封装了一下,提高用户体验,具体解释请转以下: https://blog.csdn.net/Zaajuan1150/article/details/81704865 2.插件封装: package com.draw.depp.deeplearningdrawer.Plugins.ImageSpinnerPlugins;import andro…

2026/7/28 16:25:49阅读更多 →
Go入门:main包与main函数的特殊地位

Go入门:main包与main函数的特殊地位

Go入门:main包与main函数的特殊地位大家好,我是你们的Go语言向导。上一篇我们全面解析了Go源文件的基本结构。今天我们把焦点放在Go程序中最特殊也是最重要的组合——main包与main函数。每一个可运行的Go程序都离不开它们,但你真的完全理解它…

2026/7/28 16:25:49阅读更多 →
当监管机构开始调取你的模型偏差日志——1份符合NIST AI RMF 1.1标准的公平性文档模板(含21个强制字段)

当监管机构开始调取你的模型偏差日志——1份符合NIST AI RMF 1.1标准的公平性文档模板(含21个强制字段)

更多请点击: https://kaifayun.com 第一章:AI 偏见与公平性 AI 系统并非价值中立,其决策逻辑深度嵌入训练数据的分布特征、标注者的主观判断以及算法设计者的隐含假设。当历史数据中存在系统性社会偏见(如性别薪酬差距、种族信贷…

2026/7/28 16:23:45阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/27 16:57:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →