位置: 编程技术 - 正文

C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型(c#的程序集)

编辑:rootadmin
&#;&#;

推荐整理分享C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型(c#的程序集),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c#编写程序,c#整理代码,c#程序代码大全,c#程序例子,c#的程序集,c#的程序集,c#编写程序,c#程序例子,内容如对您有帮助,希望把文章链接给更多的朋友!

遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透。故再次系统学习之—第三次学习3D数学.

本次,希望实现的功能很简单:

如在小地图中,希望可以动态画出Player当前的位置、z的朝向:用3条线、z轴正向、°旋转、-°旋转。

问题是:0点可以获得,P1点? P2点是未知的。

我尝试了2个小时,结果不竟如人意,少于沮丧。

不得不,再次花点时间系统的学习3D数学:

1 位移–向量和点: 点: 点和向量在数学上是一致的,实际生活中点的概念比较好理解,坐标点来定位–南二环、北二环。 【点用(3,4,5)圆括号来标示,简称P】 向量:“俗称增量”,有大小和方向,如”往前1步走。 左转度”. 往前走,直到碰到墙,你才会停下来—在这之前,你无法准确获得碰到墙的点的坐标或者你和墙的距离。 【向量用<3,4,5>尖括号来标示,简称V】在U3D中,统一用Vector3对象来表达向量和点,这个也是导致新手晕头转向的一个很重要的原因; 一个技巧,凡是在API中用position、Point的,V3肯定代表是点;凡是Vector、direction的是向量;多看官方的API手册,写得很明白。

做个游戏,列表出你用过的Vector3的API,分析分析用到的Vector3是向量(V)还是点(P)

需求

API

向量(V)

点(P)

备注

平滑位移

Vector3 MoveTowards(Vector3 current, Vector3 target, float maxDistanceDelta);

P

平滑位移

Vector3 Slerp(Vector3 from, Vector3 to, float t)

P

新的坐标点

this.m_transform.position = pos;

P

符合常规思维

变动一次坐标

m_transform.Translate(new Vector3(rx, 0, -m_Speed * Time.deltaTime));

V

可认为是增量

求方向

Vector3 relativePos = this.m_transform.position – m_Player.position;

V

向量减法,较难理解

设置新坐标点

lineRenderer.SetPosition(0,this.gameObject.transform.position);

m_NavAgent.SetDestination(this.m_Player.transform.position);

P

符合常规思维

新的位置

pointer.transform.position = hitInfo.point &#; (transform.position – hitInfo.point) * 0.f;

P、V

力的叠加?

求距离

float dis = Vector3.Distance(v1, v2);

float f1 = (v1 – v2).sqrMagnitude;

float f3 = (v1 – v2).magnitude;

P、V

Distance用点即可

向量减法也可以

缩放正向

Vector3 v3 = this.m_transform.forward * f;

V

V的数乘

射线检测

Ray r = new Ray(source, dest);

Physics.Raycast(r, out hit, , m_ShootMask)

V、P

Source:P

Dest:V

加一个力

rigidbody.AddForce (0, , 0);

V

依据这个游戏,可以整理出目前用到的有4个组件(含Vector 3)会发生位移:

位移常用的4个组件和Vector3:

组件

函数

Unity 圣典的API说明

是否

用过

transform组件

translate函数

向某方向移动物体多少距离【默认local坐标系】

或者相对某物体移动

yes

Position属性

在世界空间坐标transform的位置

Yes

RigidBody组件

C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型(c#的程序集)

[FixedUpdate函数]

Velocity属性

刚体的速度向量

Unity 官方demo Done用的很酷

Yes

AddForce函数

添加一个力到刚体。作为结果刚体将开始移动。

yes

MovePosition函数

移动刚体到position

NavMeshAgent组件

SetDestination函数

设置自动Path目标点

yes

CharacterController

组件

Move函数

一个更加复杂的运动函数,每次都绝对运动

yes

SimpleMove函数

以一定的速度移动角色

Vector3向量

Lerp函数

两个向量之间的线性插&#;。

“像弹簧一个跟随目标物体”

Slerp函数

球形插&#;在两个向量之间

“在日出和日落之间动画弧线”

MoveToward函数

当前的地点移向目标

和Vector3.Lerp相同,maxDistanceDelta限速

SmoothDamp 函数

随着时间的推移,逐渐改变一个向量朝向预期的目标。

我的几个向量相关的问题:

如何判断A向量和B向量是否同方向? 如何判断A向量和B向量前、后、左、右? 如何判断A向量和B向量的夹角? 向量的减法貌&#;比加法更有用一些? Vector.Forward和this.transform.Forward都表达local坐标系,那么数&#;为什么不一样呢?

2 旋转–Quaternion、eulerAngles、Quaternion.Euler

旋转在3D中是比较复杂的,在Unity 3D中一般用Quaternion来进行旋转, 旋转仅涉及向量的概念(向量的方向),请思考对于坐标点或者零向量旋转有无意义?

而按照Unity 3D API官方的说法,仅有约7个方法或者操作符比较常用,且占%的概率,我截止目前还没有用到这么多,我用到的Quaterniong约有4个函数。

旋转常用7个API:

Quaternion API

Unity 圣典的API说明

是否

用过

Quaternion.LookRotation

创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向y轴朝向up。 常用的是transform.LookAt

yes

Quaternion.Angle

返回a和b两者之间的角度。

Quaternion.Euler

返回一个旋转角度,绕z轴旋转z度,绕x轴旋转x度,绕y轴旋转y度(像这样的顺序)。

yes

Quaternion.Slerp

球形插&#;,通过t&#;from向to之间插&#;。

Quaternion.FromToRotation

从fromDirection到toDirection创建一个旋转。

Quaternion.identity

返回恒等式旋转(只读)。这个四元数对于“无旋转”:这个物体完全对齐于世界或父轴。

yes

Quaternion.operator *

由另一个四元数来旋转一个旋转角度,或由一个旋转角度来旋转一个向量

yes

我的几个旋转相关的问题:

1 Quaternion.LookRotation和Vector3.RotateTowards的区别?

2 Quaternion.Angle和Vector3.Angle的区别?

3 Quaternion.LookRotation和transform.LookAt的区别?

[官方回答: 大多数时间你可以使用transform.LookAt代替

Quaternion.LookRotation]

4 如何实现2个GameObject face to face,即Z轴相对?

磨刀不误砍柴工: 经过一周的复习、反复验证,果然在系统学习3D 数学后,要实现的功能可以了,如下:

参考博客:

坐标系的简介:C#程序员整理的Unity 3D笔记(八):Unity 3D坐标系介绍

宣雨松的博客: 3D程序员是自学的,大多数是看看书、实战视频、源码分析;而科班出生的同学会有3D数学这门核心课–估计占一个学期、会有作业等。为了赶上科班同学的水平,花点时间,补补数学知识,会使得自己少走一些弯路。一句话:”3D数学模型很关键。“

unity学习日志 1直接在unity中接sdk渠道

C# Thread中函数如何设置参数 publicvoidStartServer(stringip,intport){m_socketThread=newThread(()={StartAccept(ip,port);});m_socketThread.Start();}publicvoidStartAccept(stringip,intport){IPEndPointipEndPoint=newIPEndPoint(IPAddres

[置顶] unity加载与链表 今天来给大家分享一下unity加载与链表,由于上一讲已经把加载说过了,所以这次我们就来说一下关于链表的问题,主要还是分享一下源代码,如果大家

标签: c#的程序集

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

上一篇:TNet Tasharen Networking 学习总结

下一篇:unity学习日志(unity learn)

  • 无偿使用房产需要交哪些税
  • 计提维保费
  • 税金及附加要扣除吗
  • 哪些占用土地的行为不征收耕地占用税?
  • 工资与社保的关系怎么写
  • 应付职工薪酬应发数
  • 红冲以后怎么做账
  • 水电费专用发票税率
  • 法人股东分红交什么税
  • 农业免税企业账户怎么查
  • 发票代签怎么处理
  • 未投入使用房屋怎么处理
  • 免税产品的销项税
  • 公司买车赠与员工
  • 政府项目的代建方案
  • 周转材料低值易耗品摊销
  • 销售包装物的会计处理
  • 用银行汇票付款的会计分录
  • 金融债券利息收入免企业所得税吗
  • 查税是按基本账户吗
  • 企业如果亏损应该计提缴纳所得税吗
  • 个体工商户上月开发票超额了 ,定额改查账征收了
  • 物业公司收小区物业费吗
  • 报销油费属于什么类型
  • 房产税从价计征的计税依据
  • 长期零申报有什么影响
  • 稿费算税
  • 固定资产摊销怎么做
  • 年底买车险会便宜吗
  • 鸿蒙系统怎么开启开发者权限
  • windows 安装
  • 出差人员差旅费作细的说明叫什么
  • 支付宝安全控件是什么
  • Laravel 5.4中migrate报错: Specified key was too long error的解决
  • 苹果14pro max价格
  • 在php中,字符串有哪些表示形式
  • PHP:connection_status()的用法_misc函数
  • 无偿转让股权如何做账
  • call for conference paper
  • laravel 5.3中自定义加密服务的方案详解
  • 给工程项目买保险是选哪个保险公司
  • 你知道怎么训练
  • 交易性金融资产的入账价值
  • vue错误提示
  • audit install success
  • 可供出售债权投资
  • 域名续费多久生效
  • 企业所得税的调增调减怎么理解
  • 小规模纳税人减免增值税会计处理
  • 购买工程物资是什么费用
  • 培训属于什么服务
  • 小企业会计准则调整以前年度费用分录
  • 预计资产负债表和预计利润表构成了整个财务预算
  • 费用多报销了,但已经给了,怎么办
  • 利润表中本月数,本期金额指什么
  • 以前年度少记税怎么办
  • 什么是受托支付和非受托支付
  • 出口转内销怎么做
  • 业务招待费能计入项目成本吗
  • 铁路运费印花税谁承担
  • 调整其他应付款作为收入
  • 旅游服务住宿费可以抵扣吗
  • 土地作为无形资产还是固定资产
  • sqlserver日期范围
  • win7复制文件
  • ubuntu dde
  • macbook pro右上角按键
  • w10运行命令在哪
  • linux显示日期格式命令是
  • win7免费升级永久win8
  • win7开始菜单中的应用程序图标隐藏了
  • js跨域8种解决方案
  • python三角形角度
  • u3d unity3d
  • jquery从左到右渐渐显示
  • unityui渲染顺序
  • android root 原理
  • 湖南国家电子税务局手机版
  • 支付境外服务费需要缴纳哪些税费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设