位置: 编程技术 - 正文

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

  • 资源税的计税依据为应税产品的开采量
  • 一般纳税人开普票税率是多少
  • 提前买礼物
  • 分公司产生的费用怎么报销
  • 企业购车发票怎么查询
  • 销货退回的税务处理
  • 其他应付款包括哪些内容口诀
  • 专用发票抬头一定要打完整吗
  • 所有者权益变动表图片
  • 企业购车支付购置税流程
  • 汇算清缴职工福利支出
  • 软件 退税
  • 个体工商户生产经营所得税率
  • 其他人挂靠公司交社保会计处理怎么做?
  • 销售单位收入和支出要怎么做账?
  • 小规模纳税人开专票税率是1%还是3%
  • 虚开发票可以做进项税额转出分录吗?
  • 关于发票入账的会计分录
  • 党建展板排版样式
  • 购销合同印花税税率
  • 分期收款什么是分期还款
  • 收到租金税率
  • 使窗口最小化的快捷键
  • 员工的罚款计入什么科目
  • rancher2教程
  • win7缓存设置方法
  • 公司购买预付卡送礼怎么入账
  • uniapp中的onload
  • watch os2.1支持机型
  • dll进程
  • php for break
  • php字段
  • win7纯净版系统 9代
  • driver-e
  • 利息收入的含义
  • 直接转销法账务处理
  • php网站实例
  • 运动目标检测算法
  • 兰斯洛特
  • 施工企业如何开发票
  • 跆拳道馆怎么盈利
  • 无票收入怎么计算1%税率
  • vue3+ts+vite
  • 公司客户招待费用标准
  • 先收票后收货
  • es6的class类如何实现继承
  • session用处
  • 服务业销售收入
  • python中datetime用法
  • 增值税一般纳税人可以开普票吗
  • python中如何创建一个新文件
  • 中国源码亲测网
  • mongodb数据库的作用
  • sql中的聚合函数
  • 单位内部食堂怎么收费
  • 原材料用于在建工程要进项转出吗
  • 应付账款不用付了怎么做账
  • 子公司注销前资金怎么办
  • 17增值税发票怎么抵扣
  • 营业收入就是开票的不含税金额吗
  • 固定资产处置有净值怎么处理
  • MySQL PXC构建一个新节点只需IST传输的方法(推荐)
  • win8系统蓝屏后无法修复
  • ubuntu怎么用
  • 黑苹果驱动说明
  • 怎么用手机号查快递
  • fedora最新版本
  • win版本微信
  • Ubuntu如何安装软件
  • 怎么安装最新显卡驱动
  • win8应用商店废了
  • android内存优化 简书
  • re engine引擎
  • oculus dk2
  • linux shell函数
  • 测试驱动开发的基本过程
  • javascript常见的数据类型
  • getelementbyid isnotafunction
  • javascript日常用途有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设