位置: 编程技术 - 正文

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

  • 城市维护建设税怎么做分录
  • 减免增值税计入
  • 小规模增值税免征额
  • 子公司注销母公司投资损失企业所得税
  • 跨年度进项税额转出怎么申报
  • 实缴注册资本交税吗
  • 劳务 劳务报酬所得
  • 利润表中财务费用是负数怎么算营业利润
  • 退土增税后账务处理
  • 存货跌价准备转销会影响当期损益吗
  • 业务员出差借款,用途写什么
  • 对方电子承兑发出多长时间可以到账
  • 材料盘亏税前扣除怎么算
  • 材料成本差异分配率
  • 微信交电费怎么退款
  • 电费收入印花税如何计算
  • 关于工资薪金的情况说明
  • 自然人借款给企业的涉税风险
  • 固定资产怎么填报
  • boss直聘收费怎么这么贵
  • 土地使用权摊销账务处理
  • 对公账户短信服务费怎么取消
  • 装修公司购装修材料入什么科目?
  • win11开机后
  • 待摊费用和预提费用的区别
  • 多计提的房产税怎么做分录
  • PACKAGER.EXE - PACKAGER是什么进程 有什么用
  • php字符串赋值
  • php字符串赋值
  • 如何更改windows11管理员账户名称
  • ChatGLM-6B (介绍相关概念、基础环境搭建及部署)
  • 员工提前预支工资借条
  • 堪察加半岛上的汉族人
  • php文件上传后只显示了路径怎么办啊
  • thinkphp连接查询少数据
  • 小规模纳税人的企业所得税怎么算
  • 人工智能导论课后题答案
  • inotify_event
  • 出口收汇手续费做什么科目
  • 以厂房入股会计怎么做账
  • 公司与公司往来账表格怎么制作
  • mongodb基础
  • cgroup限制内存
  • 织梦模板改成帝国模板
  • 新企业职工工资怎么算
  • 筹建期间的费用计入什么费用
  • 税务登记后要马上报税吗
  • 出口货物用途
  • 运输费计入什么科目分录
  • 医院药品进销差价会计核算
  • 广告费应归于什么费用
  • 个人账户转公司账户附言写什么
  • 企业过桥贷款违法吗
  • 购买生产原料的支出
  • 季度盈利弥补以前年度亏损的账务处理
  • 未使用的固定资产计提折旧应当计入
  • 社保费申报是当月的
  • 生产企业下单就做收入没交货怎么做账
  • mysql的crud
  • sql servers
  • mysql 5.7.17 winx64安装配置教程
  • win8系统手机
  • xbox无法连接无线网络
  • win7总是弹出windows激活
  • linux mv命令详解
  • win10 自带
  • win8系统怎么取消屏保
  • windows显示缩略图
  • win7系统每次开机都要选择用户
  • 怎样修改linux用户名和密码
  • 自动备份文件并发送到Gmail (适用G级数据的备份)
  • 每日一个linux命令
  • android天气预报开发极简
  • android 中 EditText加入图标 更改边框颜色 设置透明
  • python简明
  • unity3d unreal
  • js状态管理
  • 广东省电子职业技术学院
  • 个人所得税代扣代缴手续费返还政策
  • 广东税务查询系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设