位置: 编程技术 - 正文

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

  • 个人注册电子税务局
  • 二手商铺买卖税率大约百分比
  • 清算组的性质
  • 金蝶结转销售成本
  • 工会费个税税前扣除标准
  • 其它综合收益影响因素
  • 税款状态已缴款未入库
  • 交通违章罚款可以在手机上交吗
  • 生产企业固定资产折旧
  • 建造期间不可抗力因素入成本么
  • 盈余公积转增资本有限制吗
  • 增值税的税负率就是用应缴纳的增值税总额
  • 外购的货物用于集体福利进项税额可以抵扣吗
  • 申报清单怎么写
  • 营业额500万以上税率
  • 小微企业减免所得税
  • 金蝶采购发票怎么红冲
  • 个体工商户要交附加税吗
  • 季报小微企业不包括哪些
  • 借主营业务成本表示什么
  • 借用别人的公司经营
  • 库存商品入库的会计科目
  • 快递公司账务处理流程及方法
  • 实收资本是认缴出资吗
  • uefiu盘安装系统步骤win10
  • php教程100
  • cpu版本的pytorch可以运行LSgan嘛
  • 母公司收取子公司管理费的税率
  • php中的pdo
  • php 图片
  • 非征期不能抄报
  • 写字楼买卖办手续
  • yolov5画框重复、大框包小框问题解决,c++、python代码调用onnx
  • redissessiondao
  • jquery+thinkphp实现跨域抓取数据的方法
  • 商贸公司用什么名字最好
  • 前端动画库
  • 马踏棋盘游戏规则
  • 个体户开票额度超了
  • 发票备注栏必须写吗
  • 偷税行为如何处理
  • sql2008还原
  • 归还股东投资款本息怎么做账
  • 收到员工交来的宿舍费
  • 工会经费记在什么科目
  • 政府代建项目计划方案
  • 筹资费用和财务费用一样吗
  • 培训费发票属于哪个税目
  • 出资注意事项有哪些内容
  • 跨月凭证出错如何调整
  • 收到供应商赠送原材料
  • 应收账款的账户余额
  • Mysql使用or如何优化
  • win8.1资源管理器频繁假死
  • repair.exe是什么软件
  • 360 sesvc.exe
  • armcc.exe
  • win8怎么打开系统设置
  • linux文本模式无法打字
  • win7系统播放器在哪
  • win7系统怎么更改默认浏览器
  • 电脑出现win 7 界面 然后就不动了
  • win10系统自带的浏览器叫什么
  • Unity-Shader Sublime 自制shader提示插件
  • 单线程语言有哪些
  • shell脚本字符串换行
  • cocos2dx openGL
  • jquery validation
  • emacs win10
  • 测试驱动开发的基本过程
  • javascript data
  • jquery关闭当前页面
  • 基于Android的人脸门禁系统
  • jquery有自定义选择器吗
  • 胡世军简历年龄多大
  • 车价36万保险一般多少钱
  • 票折与票扣的区别在哪里
  • 企业租赁房屋需要预缴增值税吗
  • 人均可支配收入是到手工资吗
  • 留抵税额退税政策2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设