位置: 编程技术 - 正文

Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示(Unity3D游戏开发培训课程大纲)

编辑:rootadmin

推荐整理分享Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示(Unity3D游戏开发培训课程大纲),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Unity3D游戏开发引擎,unity3D游戏开发,Unity3D游戏开发(第2版),Unity3D游戏开发引擎,Unity3D游戏开发pdf,Unity3D游戏开发(第2版),unity3D游戏开发,Unity3D游戏开发标准教程,内容如对您有帮助,希望把文章链接给更多的朋友!

各位朋友,大家好,我是秦元培,欢迎大家关注我的博主,我的博客地址是blog.csdn.net/qinyuanpei。最近博主重点研究了摄像机旋转、缩放等问题,那么今天为大家分享的是一个在3D展示中比较常用的功能,即通过鼠标右键实现旋转、鼠标滚轮实现缩放、鼠标中键实现平移。本文采用的方法依然是在[Unity3D]Unity3D游戏开发之自由视角下的角色控制这篇文章中所采用的方法,所以如果大家对于这部分内容不太了解的话,最好先去看看这篇文章。好了,下面我们将以一个具体的实例来讲解今天的内容。如图,是博主创建的一个简单地场景。我们希望实现通过鼠标右键实现对角色的旋转、鼠标滚轮实现对角色的缩放、鼠标中键实现对角色的平移。

好了,接下来我们来创建一个名为FreeView的脚本,该脚本依附在主相机上,下面我们来看它的实现过程:

[csharp] view plaincopyusing UnityEngine; using System.Collections; public class FreeView : MonoBehaviour { //观察目标 public Transform Target; //观察距离 public float Distance = 5F; //旋转速度 private float SpeedX=; private float SpeedY=; //角度限制 private float MinLimitY = -; private float MaxLimitY = ; //旋转角度 private float mX = 0.0F; private float mY = 0.0F; //鼠标缩放距离最&#; private float MaxDistance=; private float MinDistance=1.5F; //鼠标缩放速率 private float ZoomSpeed=2F; //是否启用差&#; public bool isNeedDamping=true; //速度 public float Damping=F; //存储角度的四元数 private Quaternion mRotation; //定义鼠标按键枚举 private enum MouseButton { //鼠标左键 MouseButton_Left=0, //鼠标右键 MouseButton_Right=1, //鼠标中键 MouseButton_Midle=2 } //相机移动速度 private float MoveSpeed=5.0F; //屏幕坐标 private Vector3 mScreenPoint; //坐标偏移 private Vector3 mOffset; void Start () { //初始化旋转角度 mX=transform.eulerAngles.x; mY=transform.eulerAngles.y; } void LateUpdate () { //鼠标右键旋转 if(Target!=null && Input.GetMouseButton((int)MouseButton.MouseButton_Right)) { //获取鼠标输入 mX &#;= Input.GetAxis("Mouse X") * SpeedX * 0.F; mY -= Input.GetAxis("Mouse Y") * SpeedY * 0.F; //范围限制 mY = ClampAngle(mY,MinLimitY,MaxLimitY); //计算旋转 mRotation = Quaternion.Euler(mY, mX, 0); //根据是否插&#;采取不同的角度计算方式 if(isNeedDamping){ transform.rotation = Quaternion.Lerp(transform.rotation,mRotation, Time.deltaTime*Damping); }else{ transform.rotation = mRotation; } } //鼠标中键平移 //鼠标滚轮缩放 Distance-=Input.GetAxis("Mouse ScrollWheel") * ZoomSpeed; Distance=Mathf.Clamp(Distance,MinDistance,MaxDistance); //重新计算位置 Vector3 mPosition = mRotation * new Vector3(0.0F, 0.0F, -Distance) &#; Target.position; //设置相机的位置 if(isNeedDamping){ transform.position = Vector3.Lerp(transform.position,mPosition, Time.deltaTime*Damping); }else{ transform.position = mPosition; } } //角度限制 private float ClampAngle (float angle,float min,float max) { if (angle < -) angle &#;= ; if (angle > ) angle -= ; return Mathf.Clamp (angle, min, max); } } 大家是不是觉得这部分代码很熟悉?不错,这里的原理都是一样的,大家只要掌握核心原理就可以了,即首先根据鼠标输入来计算旋转角、然后通过滚轮输入计算距离、最后通过四元数运算计算相机的角度和距离。好了,我们来看看最终的效果吧!

大家应该注意到博主没有实现按下鼠标中键平移的相关方法,因为这部分博主目前还没有彻底正确地写出来,如果大家知道的话,可以给博主留言,或者等博主什么时候想清楚了再来更新这篇博客吧。博主的博客会经常更新的,希望大家继续关注我的博客吧。好了,最后我们再来做一个迁移,我们将把这个功能移植到Android平台上,本来想把这部分作为Android手势控制单独写一篇文章的,可是感觉这里的代码都是相&#;的,再写一篇实在没有必要,所以,就直接给出代码吧!

[csharp] view plaincopyusing UnityEngine; using System.Collections; public class MobileInput : MonoBehaviour { //观察目标 public Transform Target; //观察距离 public float Distance = 2F; //距离最&#; public float MaxDistance=5F; public float MinDistance=0.5F; //缩放速率 private float ZoomSpeed=0.F; //旋转速度 private float SpeedX=; private float SpeedY=; //角度限制 private float MinLimitY = 5; private float MaxLimitY = ; //旋转角度 private float mX=0; private float mY=0; //当前手势 private Vector2 mPos; void Start () { //允许多点触控 Input.multiTouchEnabled=true; //初始化旋转 mX=Target.eulerAngles.x; mY=Target.eulerAngles.y; } void Update () { if(!Target) return; //单点触控 if(Input.touchCount==1) { //手指处于移动状态 if(Input.touches[0].phase==TouchPhase.Moved) { mX&#;=Input.GetAxis("Mouse X") * SpeedX * 0.F; mY-=Input.GetAxis("Mouse X") * SpeedY * 0.F; mY=ClampAngle(mY,MinLimitY,MaxLimitY); } } //多点触控 if(Input.touchCount>1) { //两只手指都处于移动状态 if(Input.touches[0].phase==TouchPhase.Moved || Input.touches[1].phase==TouchPhase.Moved) { //计算移动方向 Vector2 mDir=Input.touches[1].position-Input.touches[0].position; //根据向量的大小判断当前手势是放大还是缩小 if(mDir.sqrMagnitude>mPos.sqrMagnitude){ Distance-=ZoomSpeed; }else{ Distance&#;=ZoomSpeed; } //限制距离 Distance=Mathf.Clamp(Distance,MinDistance,MaxDistance); //更新当前手势 mPos=mDir; } } //计算相机的角度和位置 transform.rotation=Quaternion.Euler(new Vector3(mY,mX,0)); transform.position=transform.rotation * new Vector3(0,0,-Distance)&#;Target.position; } //角度限制 private float ClampAngle (float angle,float min,float max) { if (angle < -) angle &#;= ; if (angle > ) angle -= ; return Mathf.Clamp (angle, min, max); } }

下面是程序在手机上运行过程中的截图Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示(Unity3D游戏开发培训课程大纲)

今天的内容就是这样子啦,博主最近在捣鼓Unity与Android对接的一些东西,等博主研究好了就分享给大家,希望大家喜欢。最后送上:

喜欢我的博客请记住我的名字:秦元培,我博客地址是blog.csdn.net/qinyuanpei。 转载请注明出处,本文作者:秦元培,本文出处:

OnApplicationFocus 前两天用到ngui做拖拽效果,将一张图片拖拽到另一个固定的子里,看的是NGUI的一个demo做的,但是会有一个问题,就是在推拽过程中,如果切换应用程

unity项目之一飞机自由分行和发射子弹 unity飞机大战之一,场景的基本搭建,和飞机的自由飞行与与发射子弹;1.场景搭建先把资源包导入进来,然后在设计栏里面,建立几个文件夹,分别有R

Unity自动打包工具 原文链接:

标签: Unity3D游戏开发培训课程大纲

本文链接地址:https://www.jiuchutong.com/biancheng/375776.html 转载请保留说明!

上一篇:Unity3D游戏开发之回合制游戏原型的实现(Unity3D游戏开发(第2版))

下一篇:OnApplicationFocus

  • 计提并结转所得税分录
  • 机械租赁适用税率
  • 企业转出多交增值税吗
  • 偷逃税款是什么
  • 小规模纳税人出售使用过固定资产
  • 发票隔月作废怎么操作
  • 六税两费减半征收政策
  • 印花税按什么金额吗
  • 弃置费用的现值p/f
  • 公司向法人还回借款现金的分录
  • 开具银行资信证明
  • 中兴通抵扣官网
  • 劳务公司外地劳务是否需要预缴税款及会计处理
  • 别人帮开票钱要打给别人账户吗
  • 承接所有业务
  • 增值税普通发票几个点
  • 文化用品利润怎么样
  • 为何要简并增值税税率?
  • 金融保险业的行业规范及标准
  • 应交增值税是否影响企业利润
  • 在建工程转固定资产当月提折旧吗?
  • 住房公积金个人缴费比例
  • 验资报告办理一般需要多久时间
  • 收入税金摘要怎么写
  • 公司注销其他应收款怎么冲平
  • 个人出租房屋给公司可以开专票吗
  • 宣传用品发票包括哪些
  • 三个点的专票要交多少税
  • 2023增值税免税政策
  • 离职后绩效奖金应该按照整月发吗
  • 无法访问您可能没有权限使用资源
  • 定期存款是否属于受限资金
  • 应纳税所得税计算公式
  • 应收票据贴现的会计分录
  • php 邮件发送
  • element-ui tree
  • 解决城市内涝的题目
  • vue3技巧
  • return 重定向
  • 车间购买办公用品
  • mysql内连接查询使用汉语作为官方语言的所有国家
  • php显示当前时间
  • mongodb项目使用说明
  • 过路费报销计入什么科目
  • 记帐时借方是什么意思
  • 电子发票自己打印黑白有效吗
  • SQL Server通过重建方式还原master数据库
  • sql server临时表的生命周期
  • 以物抵债在法律上叫什么
  • 收客户货款怎么说话
  • 租赁的生产设备计入哪个科目
  • 违反会计法规定的行为有哪些
  • 新公司成立建账流程
  • sqlserver字符函数
  • innodb_index_stats导入备份数据时报错表主键冲突的解决方法
  • 强化系统设计
  • bios报警声
  • 打开win七
  • steam怎么sl
  • linux安装迅雷
  • centos 安装
  • mcshield.exe是什么进程
  • 系统自动保存文件在哪里
  • cocos2dx4.0教程
  • 贴吧热门评论
  • perl脚本函数
  • vue 父子组件通信
  • .net 迭代器
  • dos 输出重定向
  • 请问在javascript程序中
  • javascript获取值
  • jquery 异步请求
  • Javascript & DHTML 实例编程(教程)DOM基础和基本API
  • 华为领导班子成员名单
  • 印花税当期没有发生可以不用申报吗
  • 样板房费用属于开发成本的什么明细科目
  • 江苏省扬剧团演出的扬剧罗帕记
  • 中药生产与加工和中药制药技术区别
  • 税控ic卡就是税控盘吗
  • 税审工作流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设