实现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,可以代码设置). 支持滚动条拖拽,将动作调整到指定时间. ...
随机推荐
- Ubuntu 修改时区
1. 使用命令行 sudo tzselect 根据提示完成修改 2.修改~/.profile文件 添加: TZ='Asia/Shanghai'; export TZ 注销后重新登陆生效
- 《JAVASCRIPT高级程序设计》第五章(2)
一.Date类型 Date类型类型用于保存日期,有以下几种创建方式: //获取当前时间 var now = new Date(); //获取当前时间的毫秒数 var nowSecond = Date. ...
- 各类编译器 allocator 底层
我们在c++中创建数组通常使用new来分配我们需要的内存大小,之后通过delete进行释放内存 但是我们调用new的时候,通过调用的是operator new,二operator new调用的是mal ...
- 安装软件(基于redhat、centos发行版)
yum 命令的使用: yum local install package_name.rpm 安装本地rpm包yum list updates 列出所有可以更新的安装包yum update packag ...
- winform连接oracle时Oracle.DataAccess.dll版本问题
1.通用TestOracle.zip部署到iis上,或直接运行程序测试当前全局程序集 protected void Button1_Click(object sender, EventArgs e) ...
- python - bilibili(一)获取直播间标题
近几年,直播平台蛮火的.小时候,经过各种日漫的洗礼,在直播平台自然而然的就盯上了B站. 目前还是python菜鸟一枚,各位大佬请轻拍. 最终效果图: 闲话不说,我们来一步步解析B站的弹幕. 工具:py ...
- Java获取http和https协议返回的json数据
现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信 ...
- 丢掉Mask遮罩,更好的圆形Image组件[Unity]
写在前面 全文解析圆形Image组件的实现原理,取关键代码介绍算法细节,源码已经上传Github下载地址,欢迎下载试用. 一.Unity原生Image组件实现圆形图片的缺陷 Mask渲染消耗 许多游戏 ...
- 分别用C/C++实现栈
用C语言的方式实现栈: #include <stdio.h> #include<stdlib.h> #include<assert.h> struct Link { ...
- javascipt : reduce
$scope.totalPrice = function () { return $scope.addcartProduct.reduce(function (money, product) { re ...