位置: 编程技术 - 正文

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)

  • 出口货物退(免)税管理办法
  • 税金及附加需要计提吗
  • 增值税发票记账联和抵扣联都丢了怎么办
  • 什么是涉税信息
  • 车辆购置税怎么交网上缴费
  • 买车哪些费用不该交
  • 免税蔬菜税额用什么表示
  • 出售无形资产计入资产处置损益
  • 经营性文化事业单位有哪些
  • 土地增值税税收优惠
  • 公司收承兑贴现的会计分录
  • 购买产品没开发票支付宝支付
  • 车辆报废补贴多久到账
  • 地产公司土地分摊方案
  • 企业网银电子商务收入是什么
  • 股权转让溢价部分怎么做分录
  • 公司清算关闭程序
  • 房租转租怎么处理合法
  • 预缴工程税的帐务处理如何做?
  • 服务费可以不退吗
  • 危废处置费用怎么开票
  • 税局会例行检查吗
  • 保安公司开具的发票
  • 税务局领普通发票需要多少钱
  • 差额征税发票的图片
  • 小型微利企业所得税优惠政策
  • 外地出差的餐费住宿费是不是都计入差旅费
  • 转出未交增值税在借方是什么意思
  • 增值税多交可以在下一期直接抵吗
  • 企业所得税减免政策2023
  • 第三方派遣劳务不续签补偿金哪边出
  • 油漆的消费税
  • 佳能2900打印机加碳粉教程
  • window11系统怎么用
  • 旅游公司开具的考察费怎么入账
  • 物业公司的水电工工作职责
  • quickdcf.exe - quickdcf是什么进程 作用是什么
  • linux系统的
  • mac版chrome浏览器无法上网
  • 停工损失会计准则
  • 无法启用网络发展
  • macos big sur操作
  • 如何搭建chatGPT
  • 车辆开具发票后会计分录?
  • 增值税进项税转出文件
  • Chat GPT实用案例——VUE+Chat GPT实现聊天功能教程
  • 非城市公交企业管理办法
  • 债务重组收益的计算
  • 完美解决win10间歇性掉线
  • js数组方法filter
  • php文件怎么浏览
  • 一次性收取一年租金增值税怎么计算
  • 增值税发票跨月可以作废吗
  • 简易计税怎么算增值税
  • 买方的现金折扣会计分录
  • 不良品怎么入账
  • 支付宝可以对公账户转账吗怎么转
  • 企业如何优化管理
  • 建筑企业包工包料业务的发票开具和涉税处理
  • 企业退休职工取暖费
  • 劳务费如何计提
  • 员工报销签字流程
  • 结账时怎样根据日期填写
  • 监控系统文件
  • mysql5.7免安装版配置
  • freebsd版本
  • dcom进程
  • win7声卡怎么升级
  • linux删除大量文件方法
  • win8 开机
  • ubuntu 9.04 X3100 显卡开启3D特效
  • 内核版本能升级吗
  • win8.1系统怎么样
  • mysql删除key
  • java word操作
  • javascript制作
  • 编写javascript代码
  • 国家税务总局网站登录入口官网
  • 税收筹划与避税的性质相同
  • 辽宁朝阳丧葬费标准2022
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设