位置: 编程技术 - 正文

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)

  • 财税2012年15号文件作废
  • 租房代收水电费税率
  • 出口退税购入的商品进项税怎么处理
  • 月收入不足10万免增值税的账务处理
  • 成本类科目有哪些口诀
  • 工业固定资产折旧会计处理
  • 收资料费怎么入账科目
  • 过路过桥费抵扣2021新规定
  • 金税盘减免分录
  • 专用发票与普通发票代码区别
  • 营改增后一般纳税人动产租赁税率
  • 进项税额转出怎么填申报表
  • 已认证的发票对公司影响
  • 如何在Windows 11上卸载更新
  • 给员工购买的意外保险可以税前扣除
  • 总资产报酬率是怎么算出来的
  • 车船使用税进哪个会计科目
  • 商场收取租金要缴纳哪些税
  • 出差人员差旅费作细的说明叫什么
  • RAVMOND.exe - RAVMOND是什么进程.有什么作用
  • 进货的折扣该怎么算
  • 组策略阻止了这个程序0x800704ec
  • 一般纳税人购进农产品如何抵扣进项税额
  • phpstorm ftp
  • macOS Big Sur 11.2 公测版 beta 1怎么更新?
  • 栀子花叶子发黄是什么原因
  • 塞里雅兰瀑布图片高清
  • 福利费可以抵扣进项吗?
  • grad_cam
  • php快速排序原理
  • 设备租赁费属于设备费吗
  • 快速傅里叶变换matlab
  • openlayers6教程
  • 坏账的资产减值损失可以税前扣除吗
  • 补缴以前年度公积金账务处理
  • 原始凭证必要时可以涂改
  • 企业年度预算编制流程
  • 什么是指企业的所有部门彼此协调为顾客服务
  • 小微企业直接考察模式
  • 营业外收入汇算清缴时需要调增吗
  • 公司应知应会的内容是什么
  • 金蝶做账流程视频
  • 劳务公司已开票怎么入账
  • 企业不需要交残保金吗
  • 所得税的汇算清缴日在资产负债表日后期间
  • 购买其他权益工具投资公允大于我支付的价值
  • 电梯改造税率
  • 委托开发费用
  • 企业技术服务费比例
  • 劳务发票税额
  • 上月未记账
  • 结转周转材料成本
  • mysql 5.7.34安装
  • win10的java环境该怎么配置?java环境变量配置介绍
  • vista电脑密码忘了怎么解除
  • usbmmkbd.exe - usbmmkbd是什么进程
  • centos安装位置选择
  • win8.1怎么设置
  • ubuntu系统怎么安装微信
  • mac上safari
  • Win7 64位纯净版无法安装第三方主题的可行破解方法
  • linux系统入侵检测软件有哪些
  • linux userdel
  • opengl基础知识
  • opengl 三角形
  • javascript新手教程
  • node.js实战
  • dos rd命令
  • rgb颜色相加
  • Python生成随机数
  • nodejs跳转到指定页面
  • angularjs1.5
  • nodejs递归创建目录
  • great 搬运工
  • javascript例题
  • python 多线程处理
  • 简述javascript
  • 安康市税务局党玲玲
  • 江苏税务登录密码是几位
  • 我的电脑软件下载
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设