实现Unity编辑器模式下的旋转
最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿。在观察unity编辑器下的旋转之后,发现编辑器下的旋转非常流畅。仔细观察之后发现unity编辑器下的旋转运算模式如下图所示,红色箭头方向为触控滑动方向,黑色箭头为模型旋转的轴。

了解原理之后就是实现相关功能,具体实现还是粘代码吧。代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems; //脚本挂在Modelshow GameObject下
public class ModelViewControl : MonoBehaviour {
private bool isClick = false;
private Vector3 startPos; //点下开始位置
private Vector3 endPos; //点下终点位置
private float Move_X; //x方向上的移动距离
private float Move_Y; //Y方向上的移动距离 //回调间距
float interval = 0.01f;
float clickBeginTime = 0.0f;
//模型引用
private Transform model; //模型根节点
void Start () {
model = transform; }
// Update is called once per frame
void Update () {
#if UNITY_STANDALONE_WIN
if (Input.GetMouseButtonDown())
#elif UNITY_ANDROID
if(Input.touchCount > && !isClick)
#endif
{
isClick = true;
#if UNITY_STANDALONE_WIN
startPos = Input.mousePosition;
#elif UNITY_ANDROID
startPos = Input.touches[].position;
#endif
clickBeginTime = Time.time;
}
#if UNITY_STANDALONE_WIN
if (Input.GetMouseButtonUp())
#elif UNITY_ANDROID
if (Input.touchCount == && isClick)
#endif
{
isClick = false;
}
if (isClick && (Time.time - clickBeginTime) > interval)
{
#if UNITY_STANDALONE_WIN
endPos = Input.mousePosition;
#elif UNITY_ANDROID
endPos = Input.touches[].position;
#endif
if ((endPos - startPos).magnitude < )
{
return;
}
if(Mathf.Abs(endPos.x - startPos.x) < )
{
endPos.x = startPos.x;
}
if (Mathf.Abs(endPos.y - startPos.y) < )
{
endPos.y = startPos.y;
}
RotateModel(startPos,endPos);
startPos = endPos;
}
}
void RotateModel(Vector3 startPos , Vector3 endPos)
{
Vector3 direction = endPos - startPos;
Vector3 world_axis = Vector3.Cross(direction, Vector3.forward);
model.Rotate(world_axis.normalized, direction.magnitude * 0.3f, Space.World);
}
}
因为这个项目是PC,但是我是做手机游戏的,写个什么程序都想在手机上跑一跑,因此有比较乱的平台编译宏,主要实现为获得滑动的方向,就相当于在世界坐标下的xoy面的上的一个向量,求direction与z轴所成的面的法向量,求得的法向量就是本次旋转的轴。再根据滑动的距离来设置相应的角度。项目传到了github。有需要的小伙伴自取https://github.com/gaoxu1994/RotateForUnity
实现Unity编辑器模式下的旋转的更多相关文章
- UNITY编辑器模式下static变量的坑
在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...
- Recovery和Charger模式下屏幕旋转180度
转自:http://www.etwiki.cn/android/1267.html 如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在boo ...
- Recovery和Charger模式下屏幕旋转180度[转]
如何让Recovery (系统固件升级),charger(关机充电动画)时屏幕旋转180度 解决方法: 1.在bootable\recovery\minui\Graphics.c 文件找到gr_fli ...
- 二、Unity Editor模式下,操作选中对象
使用Unity提供的工具类 UnityEditor.Selection public static GameObject activeGameObject public static UnityEng ...
- 编辑器模式下如何实例化Prefab
当我们在EditMode下需要用脚本批量添加prefab时,可以用 PrefabUtility.InstantiatePrefab(prefab) as GameObject; 注意:如果用GameO ...
- unity editor模式下读取文件夹资源
string path = EditorUtility.OpenFolderPanel("Load png Textures", "", "" ...
- Lua------------------改善Unity编辑器对Lua文件的支持
原创 2017年03月10日 18:44:22 标签: Unity / lua / 编辑器 952 当前版本的Unity(截至Unity5.5.x)中TextAsset类不支持后缀为lua的文件,将l ...
- Unity编辑器 - 编辑器控制特效播放
编辑器控制特效播放 Unity的动画编辑器不能预览粒子系统的播放,为了方便预览特效,设想制作一个预览特效的工具,通常一个特效有三种组件: - Animation - Animator - Partic ...
- Unity非运行模式下实现动画播放/回退工具
实现效果 核心功能 支持选定模型(带Animator)在非运行模式下,播放/暂停/停止动作. 支持动作单帧前进,单帧回退(帧时间默认0.05f,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...
随机推荐
- 【求Java工程师/专家】大型互联网公司急招
互联网行业排名Top公司,目前项目扩张阶段,需求数量较多的JAVA中高端后台开发人员,需要有分布式系统开发经验,年后有找工作的同学可以联系我了. 工作地点:杭州 岗位要求: 1.精通Java SE和J ...
- ArcGIS制图技巧系列(1)还原真实的植被
ArcGIS制图技巧系列(1)还原真实的植被 by 李远祥 在GIS数据中,植被一般都是面装要素的形式存在.很多人在使用植被渲染的时候,一般会采用填充符号去渲染.而在ArcGIS中,填充符号要么就是纯 ...
- 微信小程序 引用其他js里的方法
微信小程序中,在微信官方开发文档我们可以知道 小程序的目录结构 . 一个小程序页面由四个文件组成,一个小程序页面的四个文件具有相同路径与文件名,由此我们可知一个小程序页面对应着一个跟页面同名的js文件 ...
- 【easyui】之treegrid的分页
easyui官网给的treegrid的分页是相当的复杂,我们来简化一下! 首先treegrid 分页和 datagrid一样需要设置一系列参数! 如下: depTreeGrid=$("#de ...
- asyncio
一.简介 asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持. asyncio的编程模型就是一个消息循环.我们从asyncio模块中直接获取一个EventLoop的引用, ...
- Struts2系列笔记(7)---Struts2类型转换
Struts2类型转换 struts2中内置了大量的类型转换器用来完成数据类型转换的问题,这篇随笔主要通过两个方面来写Struts类型转换 1:Struts2内置的类型转换器 2:如何自定义 ...
- Python之文件与目录操作及压缩模块(os、shutil、zipfile、tarfile)
Python中可以用于对文件和目录进行操作的内置模块包括: 模块/函数名称 功能描述 open()函数 文件读取或写入 os.path模块 文件路径操作 os模块 文件和目录简单操作 zipfile模 ...
- BZOJ 2424: [HAOI2010]订货(费用流)
裸的费用流了= =从源点向每个点连费用为di,从汇点向每个点连流量为ui,每个点向下一个点连费用为m,流量为s的边就行了 CODE: #include<cstdio>#include< ...
- click延时300ms的故事
这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题 ...
- 部分linux系统命令(shell 命令)和hadoop命令
linux系统命令(shell 命令): ls : 只列出文件/目录 ls -l : 会显示文件的详情,如大小等 ls -lh : 会显示文件的详情,但大小以k或者M为单位 ls ../ : ...