【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放
推荐阅读
- CSDN主页
- GitHub开源地址
- Unity3D插件分享
- 简书地址
- 我的个人博客
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
Unity3D中实现控制物体的旋转、移动、缩放。
效果图:
二、实现
(1)新建脚本命名为MouseControlModel.cs,双击打开脚本编辑代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class MouseControlModel : MonoBehaviour
{//旋转最大角度public int yMinLimit = -20;public int yMaxLimit = 80;//旋转速度public float xSpeed = 250.0f;public float ySpeed = 120.0f;//旋转角度private float x = 0.0f;private float y = 0.0f;void Update(){if (Input.GetMouseButton(0)){//将屏幕坐标转化为世界坐标 ScreenToWorldPoint函数的z轴不能为0,不然返回摄像机的位置,而Input.mousePosition的z轴为0//z轴设成10的原因是摄像机坐标是(0,0,-10),而物体的坐标是(0,0,0),所以加上10,正好是转化后物体跟摄像机的距离Vector3 temp = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10));transform.position = temp;}else if (Input.GetMouseButton(1)){//Input.GetAxis("MouseX")获取鼠标移动的X轴的距离x += Input.GetAxis("Mouse X") * xSpeed * 0.02f;y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;y = ClampAngle(y, yMinLimit, yMaxLimit);//欧拉角转化为四元数Quaternion rotation = Quaternion.Euler(y, x, 0);transform.rotation = rotation;}else if (Input.GetAxis("Mouse ScrollWheel") != 0){//鼠标滚动滑轮 值就会变化if (Input.GetAxis("Mouse ScrollWheel") < 0){//范围值限定if (Camera.main.fieldOfView <= 100)Camera.main.fieldOfView += 2;if (Camera.main.orthographicSize <= 20)Camera.main.orthographicSize += 0.5F;}//Zoom in if (Input.GetAxis("Mouse ScrollWheel") > 0){//范围值限定if (Camera.main.fieldOfView > 2)Camera.main.fieldOfView -= 2;if (Camera.main.orthographicSize >= 1)Camera.main.orthographicSize -= 0.5F;}}}//角度范围值限定static float ClampAngle(float angle, float min, float max){if (angle < -360)angle += 360;if (angle > 360)angle -= 360;return Mathf.Clamp(angle, min, max);}
}
(2)将这个脚本附加到需要旋转、移动、缩放的模型对象上。
效果图:
代码中知识点:
Input.GetMouseButton(0);//获取鼠标输入,参数为一个int值为0的时候获取的是左键
Input.GetMouseButton(1);//为1的时候获取的是右键
Input.GetMouseButton(2);//为2的时候获取的是中键(就是那个滑轮)
Input.GetMouseButton;//鼠标按压
Input.GetMouseButtonUp;//鼠标点击
Input.GetMouseButtonDown;//鼠标松开
Camera.main.ScreenToWorldPoint;//屏幕坐标转化为世界坐标
Quaternion rotation = Quaternion.Euler(0, 0, 0);//欧拉角转化为四元数
三、后记
这段代码需要注意的地方:
(1)模型的移动,是根据鼠标的坐标值进行移动的,也就是鼠标在那模型在那
(2)模型的旋转,是根据鼠标的输入量来旋转的
(3)模型的放大、缩小,是控制摄像机的远近来实现的
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |
【虚拟仿真】Unity3D中实现控制物体的旋转、移动、缩放相关推荐
- 002-实现Unity3d中触摸屏幕控制物体的旋转和缩放 代码实现
1.直接帮到物体的身上就可以了 using UnityEngine; using System.Collections; using System.IO; public class hehe : Mo ...
- Unity3d中最简单物体的旋转移动
void Awake (){ } //初始化函数,在游戏开始时系统自动调用.一般用来创建变量之类的东西. void Start(){ } //初始化函数,在所有Awake函数运行完之后(一般是这样,但 ...
- android matrix 实现点击旋转,Android中利用matrix 控制图片的旋转、缩放、移动
本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码: /** * 使用矩阵控制图片移动.缩放.旋转 */ public class CommonImgEffectVi ...
- shader编程-二维空间中使用矩阵实现物体的旋转、缩放、平移变换(WebGL-Shader开发基础03)
shader编程-二维空间中使用矩阵实现物体的旋转.缩放.平移变换 1. 变换前物体的绘制 2. 物体旋转的实现 3. 物体缩放的实现 4. 物体平移的实现 5. 平移与缩放另外一种实现方式 6. 所 ...
- Unity实现安卓端手势控制摄像机的旋转和缩放
说明 上一篇记录了PC端鼠标控制摄像机的移动和缩放,这一篇写的是在安卓机上实现手势控制摄像机围绕一个物体进行旋转和缩放,两篇的代码逻辑基本一样只是输入检测有区别,这里我是分开记录,没有整合[Uni ...
- Android matrix 控制图片的旋转、缩放、移动
本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码: /** * 使用矩阵控制图片移动.缩放.旋转 * @author 张进 */ public class Comm ...
- WebGL入门(三十四)-三维空间中鼠标控制物体旋转,用鼠标控制立方体的旋转
用鼠标控制立方体的旋转 1. demo效果 2. 实现要点 2.1 注册鼠标事件 2.1.1 注册鼠标事件函数的声明 2.1.2 注册鼠标事件函数的调用 2.2 纹理图片加载 2.3 图形绘制 3. ...
- Unity3D研究院之控制模型移动旋转与碰撞(七)
这一篇不错,解决了我一个一直忽略的问题 上一章介绍了模型的旋转与平移,本章介绍一些好玩的,通过按钮来控制模型的移动与镜头的跟随,脚本参数的传递.个人觉得Unity3D 这套游戏引擎真的很棒,它可以为开 ...
- 在Unity3D中使用uGUI实现3D旋转特效
各位朋友大家好,欢迎大家关注我的博客,我是Payne,我的博客地址是http://qinyuanpei.com.最近一位朋友问我,如何在Unity引擎中实现类似<英雄联盟>中选择皮肤时 ...
最新文章
- mysql rpc_使用XML-RPC和MySQL处理中文字符
- Windows7 下Ubuntu VM 中Docker连接不上的问题及解决方案
- Innosetup(pascal)标签控件label换行
- 解决Android 加载大图片OOM
- 马斯克遭“天劫”:40颗星链卫星葬身地磁风暴,数千万美元打了水漂
- python print 输出到txt_Python的print()输出形式
- 基于ArcEngine实现分组统计面积的功能
- 面试题目_数据分析SQL面试题目9套汇总
- PHP钩子的简单介绍
- 2021.12.13(第一周) 实习周记lzhuan
- javascript中的二维数组定义
- 怎么一台手机多人签到_人脸识别来啦!志愿汇APP最新改版!支持一个手机多个账号同时签到签退!...
- Openbravo体验
- openerp换mysql_OpenERP 源码变更后数据库升级
- 计算机网络拓扑图的描述,计算机网络拓扑结构 以下关于星型网络拓扑结构的描述正确的是______。 (多选题 )...
- 基于ABP的应用执行Update-Database出现异常的解决办法
- linux 下线程池
- 致远oa服务器端口怎么修改,致远oa服务器设置
- Atom终端命令行插件
- 笔记本因网络重置导致网络连接中WLAN消失而无法连接无线网络的解决办法