位置: 编程技术 - 正文

我对Unity中Quaternion * Vector3的理解(unity quaternion.angle)

编辑:rootadmin

推荐整理分享我对Unity中Quaternion * Vector3的理解(unity quaternion.angle),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity相关问题,unity的,unity的,unity的quaternion,unity的ngui,unity的ngui,unity的quad,unity的quad,内容如对您有帮助,希望把文章链接给更多的朋友!

Quaternion * Vector3就是Vector3进行一次Quaternion 旋转。理论总是枯燥的,下面以实际项目代码为例,这是简化之后的部分项目代码:(c#)

代码的目的就是计算出当前帧人物应该移动的方向。提一下这是一个FPS项目,即第一人称射击类,当玩家按住向右移动时,人物的旋转是不变的,只是移动

方向相对于玩家是向右,理解这一点很重要。

那么为什么movingDirection就是当前帧人物应该移动的方向呢?

我们不妨假设directionVector=(1,0,1);这就表示玩家想让人物向右移动的同时向前移动,且移动量相同。

至于具体的移动量没有意义,我们随便加一个系数就可以调节移动快慢。

我们再假设transform.rotation对应的欧拉角度为(0,0,0);如图:(transform.rotation是Quateration类型,很抽象,对应的欧拉角度则非常直观)

这时,人物相对于世界坐标系没有任何旋转,再由假设的directionVector=(1,0,1);即当玩家同时按下向前和向右移动的按键时,人物移动的方向向量将是(1,0,1);

又我们已经假设transform.rotation对应的欧拉角度为(0,0,0);即没有旋转,

我对Unity中Quaternion * Vector3的理解(unity quaternion.angle)

则transform.rotation*directionVector得到的结果还是(1,0,1);

这是最简单的情形,接下来,我们假设transform.rotation对应的欧拉角度为(0,,0);即当前人物相对于世界坐标系是有一个度旋转量的,

由假设的directionVector=(1,0,1);即当玩家同时按下向前和向右移动的按键时,人物将向正右前方向移动,显然我们直观判断人物移动的方向向量应该是(1,0,0);

那么怎么计算呢?由我们假设的transform.rotation对应的欧拉角度为(0,,0);

所以ransform.rotation*directionVector就是让directionVector绕Y轴旋转度,(1,0,1)绕Y轴旋转度不就是(1,0,0)吗?

由这两个特殊的角度,现在大家应该可以理解ransform.rotation*directionVector就是当前帧人物应该移动的方向了吧。

最后,之所以说这是简化代码,实际项目中代码不可能是这么写的,

Vector3 directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

Vector3 movingDirection = transform.rotation * directionVector;

大家可能想到了还应该有速度调节系数,此外,由于directionVector与GetAxis是线性关系,那么效果会很生硬,玩家只要一按下方向键人物就会移动,

这种方式用来对付CF这种网游还可以(网游要的是灵敏,不是真实),而玩过孤岛惊魂,使命召唤等的伙伴们就知道,人物移动有一个很明显的加速过程,

这个过程要求directionVector与GetAxis呈类&#;Y=X*X这样的幂次关系,如:

Vector3 directionVector = new Vector3(Input.GetAxis("Horizontal")*Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")*Input.GetAxis("Vertical"));

当然实际项目中还有其他细节需要丰富,再次只是抛砖引玉,给小伙伴们提供借鉴和灵感。

unity 2D 透明遮罩 简单实现 大致需要用到的东西:shader材质深度摄像机unity实现2D遮罩找了许多的解决方法,这个是我采取的一种方法,比较便捷,但不一定是最好的主要想实现的

【Unity】A*算法的GUI实现 前言A*算法是常用的游戏算法之一,也是初学者比较难掌握的一个算法。本文在Unity中以GUI的方式形象的再现了A*算法的详细步骤,包括地图的搜索、FGH

【Unity】Mesh网格编程(一)正二十面体 前言Mesh类是Unity用脚本创建和修改3D模型的重要脚本类。本文以自定义编译器菜单的方式,实现了Unity创建正二十面体的功能扩展。博文首发:

标签: unity quaternion.angle

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

上一篇:unity3d android 插件

下一篇:unity 2D 透明遮罩 简单实现(unity平面透明)

  • 个体户要交什么税,怎样收
  • 劳务派遣公司需要给员工缴纳社保吗
  • 上月多计提增值税
  • 增值税应纳税额是什么意思
  • 设备转产需要停止折旧吗
  • 技术服务收入属于劳务报酬所得吗
  • 企业接受捐赠固定资产计入什么科目
  • 固定资产的税费可抵扣吗
  • 盈余公积是否必要交税
  • 新准则金融资产科目名称
  • 税控盘如何统计开票金额
  • 公司名称变更在哪个网站
  • 房地产企业增值税管理办法
  • 利润表中的本期金额栏内各项数字一般根据什么填列
  • 商铺售后返租的会计分录
  • 银行结算方式包括哪些内容
  • 购买户外用品的app
  • 税收预测表怎么填写
  • 关于增值税专用发票
  • 分包开普通发票还是增值税专用发票?
  • 汽车折旧计算方法按照公里
  • 车票进项税可以跨年抵扣吗
  • 分支机构增值税汇总纳税怎么申报?
  • 上级拨入资金计入什么科目
  • 怎样保持ppt在所有电脑上不变
  • 小微企业财务报表报送时间
  • 未分配利润亏损怎么做分录
  • windows 11怎么用
  • 税额差异会计分录
  • 关于员工被辞退经济赔偿
  • Thinkphp5+PHPExcel实现批量上传表格数据功能
  • php环境中可毒
  • 苹果取消macbook
  • PHP:oci_free_statement()的用法_Oracle函数
  • Vue3 入门笔记 ---- 利用Element Plus对页面进行布局划分以及实现左侧公共菜单
  • PHP:is_executable()的用法_Filesystem函数
  • 微信 php sdk
  • 物流费属于什么税目
  • 如何查询数据库表空间
  • web用户管理系统报告
  • php多线程编程
  • 花生油加工厂的手续好办吗
  • 进项加计抵减会计分录怎么做
  • 销售货物免税
  • 参展费可以抵扣吗
  • 原材料盘盈会计处理
  • 小规模申报表填写模板
  • 增值税留抵有时间限制吗
  • 营业成本和生产费用一样吗
  • 总账与总账之间的核对
  • 资金退回怎么记账
  • 经营租赁属于什么收入
  • 网银转账退回来是怎么回事
  • 应交税金为负数应该填在资产负债表哪一栏
  • 制造费用折旧费编码
  • 期末调汇汇兑损益科目
  • 电梯广告租赁属于什么服务
  • 普通发票作废要去税局吗
  • 一次性收入怎么计税
  • redhat图形化界面启动
  • windows7开始菜单不见了
  • Windows update更新服务启动被拒绝访问
  • 升级windows8
  • linux命令su-
  • w8系统文件夹怎么设置密码
  • win10如何将我的电脑添加到桌面
  • win10升级后怎么还原
  • 用python编写程序
  • android集成chromiumview
  • 笔记本等待网络准备好
  • unity点击播放声音
  • 三消游戏规则
  • python找出n个数里最小的k个
  • jquery基础教程详解
  • python libnum
  • 国家税务局吉林省税务局官网app
  • 营业执照三证合一图片
  • 湖北国税网上办税大厅官网
  • 监察室主任岗位职责
  • 如何理解新时代新征程党的使命任务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设