实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿。在观察unity编辑器下的旋转之后,发现编辑器下的旋转非常流畅。仔细观察之后发现unity编辑器下的旋转运算模式如下图所示,红色箭头方向为触控滑动方向,黑色箭头为模型旋转的轴。
了解原理之后就是实现相关功能,具体实现还是粘代码吧。代码如下
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using UnityEngine.UI; 5 using UnityEngine.EventSystems; 6 7 //脚本挂在Modelshow GameObject下 8 public class ModelViewControl : MonoBehaviour { 9 private bool isClick = false; 10 private Vector3 startPos; //点下开始位置 11 private Vector3 endPos; //点下终点位置 12 private float Move_X; //x方向上的移动距离 13 private float Move_Y; //Y方向上的移动距离 14 15 //回调间距 16 float interval = 0.01f; 17 float clickBeginTime = 0.0f; 18 //模型引用 19 private Transform model; //模型根节点 20 void Start () { 21 model = transform; 22 23 } 24 // Update is called once per frame 25 void Update () { 26 #if UNITY_STANDALONE_WIN 27 if (Input.GetMouseButtonDown(0)) 28 #elif UNITY_ANDROID 29 if(Input.touchCount > 0 && !isClick) 30 #endif 31 { 32 isClick = true; 33 #if UNITY_STANDALONE_WIN 34 startPos = Input.mousePosition; 35 #elif UNITY_ANDROID 36 startPos = Input.touches[0].position; 37 #endif 38 clickBeginTime = Time.time; 39 } 40 #if UNITY_STANDALONE_WIN 41 if (Input.GetMouseButtonUp(0)) 42 #elif UNITY_ANDROID 43 if (Input.touchCount == 0 && isClick) 44 #endif 45 { 46 isClick = false; 47 } 48 if (isClick && (Time.time - clickBeginTime) > interval) 49 { 50 #if UNITY_STANDALONE_WIN 51 endPos = Input.mousePosition; 52 #elif UNITY_ANDROID 53 endPos = Input.touches[0].position; 54 #endif 55 if ((endPos - startPos).magnitude < 5) 56 { 57 return; 58 } 59 if(Mathf.Abs(endPos.x - startPos.x) < 5) 60 { 61 endPos.x = startPos.x; 62 } 63 if (Mathf.Abs(endPos.y - startPos.y) < 5) 64 { 65 endPos.y = startPos.y; 66 } 67 RotateModel(startPos,endPos); 68 startPos = endPos; 69 } 70 } 71 void RotateModel(Vector3 startPos , Vector3 endPos) 72 { 73 Vector3 direction = endPos - startPos; 74 Vector3 world_axis = Vector3.Cross(direction, Vector3.forward); 75 model.Rotate(world_axis.normalized, direction.magnitude * 0.3f, Space.World); 76 } 77 }
因为这个项目是PC,但是我是做手机游戏的,写个什么程序都想在手机上跑一跑,因此有比较乱的平台编译宏,主要实现为获得滑动的方向,就相当于在世界坐标下的xoy面的上的一个向量,求direction与z轴所成的面的法向量,求得的法向量就是本次旋转的轴。再根据滑动的距离来设置相应的角度。项目传到了github。有需要的小伙伴自取https://github.com/gaoxu1994/RotateForUnity
转载于:https://www.cnblogs.com/gaoxu-1994/p/6600512.html
实现Unity编辑器模式下的旋转相关推荐
- UNITY编辑器模式下static变量的坑
UNITY编辑器模式下static变量的坑 在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包 ...
- Unity动作表情工具(编辑器模式下一边播动作一边播表情)
一直忙于学习技术和工作好久没写博客 这次分享一下我写的一个动作表情工具 先说一下需求:美术把一帧帧表情图导出来,一张张排好序号,然后放到编辑器里面打开一个工具界面可以选动作,同时切换对应的表情,在编辑 ...
- android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转
Android recovery 模式下屏幕显示旋转 大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的.难道你们只旋转正常模式下的屏幕方向,不管reco ...
- Unity 编辑器环境下加载任意处资源 Resources.LoadAssetAtPath方法
1.Resources.LoadAssetAtPath 在Unity3D中如何实现动态加载资源的方法,就是把资源放在Resources目录下,使用Resources.Load方法即可动态加载资源. 但 ...
- Android recovery 模式下屏幕显示旋转
Android recovery 模式下屏幕显示旋转 大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的.难道你们只旋转正常模式下的屏幕方向,不管reco ...
- Unity Editor - 在编辑器模式下执行exe程序、打开文件、定位脚本行
执行exe程序.打开文件 当我们想在Unity 编辑器下 通过exe程序打开指定脚本时我们可以调用以下API 这里我是通过vscode 打开 lua 脚本 并定位到具体某一行. static void ...
- Unity Playing模式下鼠标点击放置预制体
Playing模式下鼠标点击事件需要在MonoBehaviour::Update里处理 预制体需要放在Resource目录下,通过Resource::Load加载,再通过GameObject::Ins ...
- Unity运行模式下修改代码保存后报错
原因可能是,Unity偏好设置常规这里选择了第1个,推荐选择第2个,等编辑器停止运行后再重新编译 三个选项的含义: 重新编译并继续播放: 在完成播放后重新编译: 停止播放并重新编译:
- unity edit模式下停止运行
EditorApplication.isPaused = true;,编辑器暂停,很方便.
最新文章
- 扎心!“我学了六个月 Python,怎么还是会找不到工作”
- 设备I/O之OVERLAPPED
- python读取文件中的内容_python 读取文件夹中的文件内容
- 位、字,字节与KB的关系
- 信息 按顺序打印commit_提高效率的 10 个 Git 小技巧
- 孩子忽悠家长充值?腾讯游戏在人脸识别中加入语音提醒
- 《华林科纳-半导体工艺》PVA 刷擦洗
- 跟着小马哥学系列之 Spring AOP(Spring 事务(源码分析)上)
- 微信小程序服务通知开发
- mini_c编译器的简单代码逻辑
- Java实现支付功能代码
- 大白菜U盘制作工具V3.0教程
- TCP局域网服务器简易搭建(eps-01s)
- 未成年人勿进 谨以献给1980~1990出生的人(四)
- Python-玩转数据-python网络编程
- JMeter 扩展开发:扩展 TCP 取样器
- python自动化框架:pywinauto实现博客之星自动化评论
- Follow your heart (189)---那些正话反说,反话正说的方向
- 〖ChatGPT实践指南 - 零基础扫盲篇⑥〗- OpenAI API 报错An error occurred during your request
- 联想ThinkSystem融合架构简介 - ThinkAgile SX for Nutanix
热门文章
- Linux:运行级别,root密码重置,救援模式,安装图形化界面
- 《从零开始学Swift》学习笔记(Day 6)——哎呀常量和变量都该什么时候用啊?...
- quick cocos2dx 3.x 配置win32工程
- 在centos 下安装配置基于gitosis 的git 服务
- Castle ActiveRecord学习实践(1):快速入门指南
- PMP考试的形式和试题分布
- Django H2 文档查看
- 【dmp文件还原到oralce数据库】
- 写代码如坐禅:你是哪一类程序员?
- 微云存照片会变模糊吗_保存照片的最佳方式是网盘、硬盘、SSD还是光盘?