实现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,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...
随机推荐
- UOJ #278. 【UTR #2】题目排列顺序(排序水题)
#278. [UTR #2]题目排列顺序 丢个传送门:http://uoj.ac/problem/278 描述 “又要出题了.” 宇宙出题中心主任 —— 吉米多出题斯基,坐在办公桌前策划即将到来的 U ...
- 法国总统放大招,用“分身术”竞选总统 全息3d 网
编辑:大熊 [摘要]法国总统采用全息技术实现"分身"演讲,可谓是一次演讲,全面覆盖! 全息3d网讯:众所周知,欧美国家的总统是通过公开竞选得到的,所以能更直接.更广泛的近距离接触民 ...
- 移动HTML5前端性能优化总结
概述 1. PC优化手段在Mobile侧同样适用 2. 在Mobile侧我们提出三秒种渲染完成首屏指标 3. 基于第二点,首屏加载3秒完成或使用Loading 4. 基于联通3G网络平均338KB/s ...
- 自己动手系列——实现一个简单的LinkedList
LinkedList与ArrayList都是List接口的具体实现类.LinkedList与ArrayList在功能上也是大体一致,但是因为两者具体的实现方式不一致,所以在进行一些相同操作的时候,其效 ...
- python 模块加载错误总结
在运行yum时提示如下错误 There was a problem importing one of the Python modules required to run yum. The error ...
- (C#)xml的简单理解创建和读取
xml知识点清理:一.文档规则 1.区分大小写. 2.属性值必须加引号(单引号.双引号都可以),一般情况下建议使用使用双引号. 3.所有标记必须有结束符号. 4.所有空标记必须关闭. 5.必须有且仅有 ...
- Dynamics CRM 2015-Custom Workflow Activity
CRM的Workflow给我们的流程处理带来不少便利,但是这种自带的Workflow并不是万能的,中间某一step不能支持,往往会牵一发而动全身,可能造成整个Workflow Steps的重新设计.幸 ...
- Zigbee折腾之旅:(一)CC2530最小系统
最近在倒腾Zigbee,准备参加物联网全国大赛,学校有给我们发Zigbee开发板,但是对于喜欢折腾的我来说,用开发板还是不过瘾,起码也得知道怎么去画一块板子.于是乎,在百度一番后就有了下面这篇文章. ...
- JMeter使用简单教程
去Apache JMeter官网下载最新的Windows下的zip安装包并解压 进入JMeter安装目录下的bin目录,双击jmeter.bat,运行JMeter程序 打开测试计划主界 ...
- php审核操作
注册页面zhuce.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...