位置: 编程技术 - 正文

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)

  • 营改增后房地产会计账务处理
  • 企业所得税纳税义务人
  • 出口退税是什么部门负责
  • 无形资产价值评估收费
  • 定期定额户个人所得税怎么申报
  • 董事费监事费个税计算
  • 期房购置税怎么算
  • 运输费用和保险费用会计分录
  • 集资建房出租收入如何缴纳个税
  • 高新企业职工教育经费扣除比例
  • 进口设备在海关处保存2年出售时 计算税怎么算
  • 免费送客户礼品的文案
  • 补偿性余额利息的计算公式
  • 租赁公司运输费计入什么科目
  • 保安公司开具的发票
  • 其他业务收入是什么意思
  • 行政事业单位会计基础工作规范
  • 人工工资应该计什么科目
  • 发票分割单可以抵扣吗
  • 政府补贴的银行卡注销了会怎么样
  • 私户给公户转账多久到账
  • 对数据文件操作,进行数据记录的交换都要经过
  • php判断查询是否有结果
  • 冲减其他应收款摘要怎么写
  • 代开专用发票缴纳增值税需要计提吗?
  • 苹果macOS 11开发者预览版发布
  • 股份有限公司变更法人的流程
  • icm是什么文件
  • 冲减应收账款的分录
  • php图片大小设置
  • php实现分页显示
  • php操作mysql数据库
  • ai图片生成矢量图
  • vue组件怎么使用
  • python dayup
  • 代收代付业务需要开发票吗
  • 一般纳税人没有开票怎么申报增值税
  • python send_from_directory
  • 原材料入库单价20000出库单价800000
  • 企业会计准则是属于什么
  • 小微企业所得税税收优惠政策2023年
  • 企业接管的方式有
  • 公司购买汽车的会计分录
  • 工程物资残料价值
  • 航天信息的发票以什么形式导入开票信息
  • 车辆使用费怎么算
  • 房屋租赁合同印花税怎么计算
  • 公司注销后原有未使用的包装还可以用吗怎么办
  • 贷款保险费能否抵扣个税
  • 新建厂房需要缴纳什么税
  • 城市配套费的账务处理
  • 投资性房地产在建
  • 多交增值税不能抵扣
  • 垫付的开办费怎么做账
  • 采取分期收款方式
  • 换工作时社保公积金怎么办
  • 公司如何注销营业执照
  • mysql5.7版本的服务的名字是
  • mysql使用正则表达式查询数据并另存为另一列
  • 安装win7系统后鼠标键盘不能用
  • win8怎么让我的电脑显示在桌面上
  • 以管理员的身份运行是什么意思win10
  • 蓝屏 win7
  • mac怎么多开
  • win8系统怎么搜索文件
  • cocos2dx游戏案例
  • js对象属性值
  • python中numpy.zeros(np.zeros)的使用方法
  • jquery多选
  • linux 进程监控
  • jquery获取点击元素
  • js 设计模式
  • android:exported 属性详解
  • 河北省国家税务局电子税务局
  • 安徽税务网上申报领取发票
  • 成都税务怎么查询社保缴费记录
  • 股东向公司借款合法吗
  • 出国海关申报单图片
  • 河北公示信息网
  • 福建电子税务局社保缴费操作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设