位置: 编程技术 - 正文

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

  • 税款抵扣会计分录
  • 餐饮费入什么科目
  • 利息收入交税税率
  • 公司没有账目违法吗
  • 房地产定金及预收款
  • 不验旧可以领新车吗
  • 税控服务费减免政策
  • 市场运营部门工作职责
  • 开办药品企业的要求
  • 长期待摊费用摊销计入什么会计科目
  • 折扣金额发票
  • 让渡资产使用权收入计入什么科目
  • 出差出了事故怎么处理
  • 政府补助的失业金发放准时吗
  • 银行电子回单号码什么意思
  • 企业认购普通股100万股作为交易性金融资产管理
  • 本年度应收账款是否应该加起初
  • 职工福利增值税的处理
  • 印花税按什么税率
  • 租赁到期日 英语
  • 技术转让所得减半征收计算
  • 人工费开专票最多能开几个点的
  • 增值税即征即退操作流程
  • 公司注销过了公示期不去有问题
  • 服务类的公司有哪些
  • 劳务人员奖金如何纳税
  • 计提增值税的账务处理小规模
  • 作废代开发票,是否退还已纳税款?
  • 已认证的发票对公司影响
  • 苹果电脑安装中国银行控件用不了
  • 税收是财政政策传导机制中重要的媒介之一
  • 网线插上还是显示红叉
  • php 代码
  • 酒店代销合同范本
  • PHP:mcrypt_get_key_size()的用法_Mcrypt函数
  • PHP:mcrypt_get_cipher_name()的用法_Mcrypt函数
  • php框架yii
  • php模板引擎原理
  • springmvc执行流程简单
  • 人工智能助力中国创新发展
  • html+php
  • 顶账用什么东西顶好
  • 留底税额怎么入账
  • 企业员工年终奖仲裁
  • 高新企业奖励要交企业所得税吗
  • 运输公司税务筹划
  • 销售产品的运输费会计分录
  • 公司为员工报销怎么做账
  • 2021新旧会计准则
  • 企业所得税计算题及答案解析
  • 长期股权投资被投资方实现净利润
  • 不动产进项税额抵扣从什么时候开始
  • 对公转账个人垫付怎么写
  • 在建工程转固定资产是什么意思?
  • 留抵税额在账上没有,怎么办
  • 没有报关单可以出口吗
  • 如何确定开票内容
  • 残保金怎么办理
  • sql报错22018
  • win2008远程桌面闪退
  • 通过注册表修改office默认字体
  • win8关机后自动重启怎么办
  • 装xp系统鼠标键盘没有驱动
  • centos查看某个端口
  • 苹果官网
  • windows 10 mobile apk
  • win8自启动在哪儿设置
  • linux的移植
  • renderjs echarts
  • nodejs rbac
  • linux命令shell脚本
  • 在动画制作中一般默认帧数选择为
  • vue组件的使用步骤
  • centos6安装python
  • ubuntu创建虚拟网卡
  • 滴滴发票怎么查行程
  • 财政拨款是否需交税
  • 地址变更去税务局办理
  • 仓储用地和物流用地划分
  • 阿勒泰捡石头的地方在哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设