位置: 编程技术 - 正文

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)

  • 未交增值税和应交增值税科目怎么调整
  • 半年奖个人所得税怎么算的
  • 农业企业免哪些税款
  • 增值税出口退税计入什么科目
  • 进口增值税如何入账
  • 收到的税费返还应在支付的税费项目中扣除判断题
  • 组成计税价格公式消费税
  • 长期股权投资的账面价值怎么计算
  • 公司替个人交的水电费计入哪里了
  • 往期企业所得税申报记录怎么查
  • 工业总产值收入法
  • 税务局开专票作废重开及退税流程
  • 销售货物分期付款怎么确认收入
  • 给职工发奖金有什么规定吗
  • 预算控制方法主要包括
  • 以前年度社保计提出错了怎么调整
  • 厂家给经销商的搭赠政策
  • 不动产税征收标准
  • 固定资产出售增值税税率
  • 结转已完工产品会计分录
  • 监控设备的维修保养
  • 湖北省教育费附加和地方教育费附加减免
  • 利得一定会影响利润吗
  • 劳保用品计入福利费嘛
  • 信用减值损失编码
  • 付款时收到应收票据会计分录怎么做?
  • 差额税和增值税怎么算
  • 个人补缴公积金需要什么手续
  • 企业开业装修费用分录
  • hp tpn-c120笔记本
  • 个人所得税和企业所得税都要交吗
  • 异常发票怎么处理
  • 商业会计结转成本
  • 电脑开机弹出很多广告窗口怎么办win10
  • 德比郡在哪
  • 普尔曼多少钱
  • 城建税教育费附加会计分录
  • vue中v-model
  • php-xml
  • smart 变量表
  • vue框架是什么样子的
  • 一站式自动化测试平台如何滑动
  • 经典动画动漫
  • 购买电脑做什么分录
  • mysql主键和索引
  • mongodb启动命令 linux
  • 劳务公司社保手续办理
  • 印花税按什么的比例缴纳
  • 应交税费的明细账怎么登记
  • 合并报表存货的计税基础
  • 无形资产分期付款入账价值如何核算?
  • 收到设计费属于什么业务类型
  • 企业购买房产缴纳房产税
  • 电脑配件入账
  • 如何理解会计的本质
  • 房屋租赁合同印花税的税率
  • 财政拨付注册资金怎么填
  • 根据企业会计准则第4号固定资产,企业可选用的折旧方法
  • 工程未竣工可以出竣工报告吗
  • 应付账款怎么记账
  • sql数据库修改数据语句
  • mysql 5.7.5 m15 winx64安装配置图文教程
  • extra backup
  • xp系统中文语言包
  • 虚拟机vmx
  • linux中locate命令的作用
  • centos命令行乱码
  • win8怎么打开系统设置
  • centos直接安装
  • WIN10系统更新文件在哪里
  • linux常见服务
  • cocos2dx游戏有哪些
  • cocos资源释放
  • opengl es3.0metal
  • 字符串转enum
  • node写自动化脚本
  • jquery mobile 图片滑动
  • android进阶书籍
  • 电池涂料消费税问题
  • 差额征税全额开票是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设