unity3d 3d数学基础 视频都包含哪些

1.&&数学(点乘/叉乘)/unity3d的数学辅助类
2.&&坐标系统(本地/世界/屏幕)
3.&&Unity3d执行流程
4.&&计算角色和目标点的夹角。旋转角色朝向目标点,然后移动角色(样例)
5.&&Gizmos/inspector/地图编辑
6.&&脚本文件间的数据交互
7.&&Yield return/协同线程/事件
8.&&Socket
9.&&Unity3D调用c++DLL
---------------------------------------------------------------
---------------------------------------------------------------
一.&&Unity3d中须要的基础数学知识(vector/matrix/transform)
& & & &看到这几个单词,我想在游戏引擎里面都挺常见的,unity3d里面也不例外!尽管unity给我们封装的这么好。会用就能够了,可是知其然。还是对自己比較有帮助的。由于以后要是该用其它的引擎了呢?不想一辈子都被这些工具牵制的话。就必须理解这些可能会比較枯燥的数学知识了。当然这里面不会去讨论太过复杂的数学知识。当然有兴趣,能够多看点,可是不用花费他多的时间(除了想当数学家的除外),不明确的时候看一看就ok了。有了这些知识,再去看那些unity3d给我的数学辅助类,就用起来就清爽非常多了!
1.&&向量(vector)
向量有两个重要的属性长度和方向,举样例吧!在空间里面物体移动要知道物体移动的方向和距离用向量这个数学工具就很方便描写叙述。还有摄像机的观察方向、光线的走向等。
在不包括位置信息,所以它能够独立于坐标系统。仅仅要向量长度和方向同样就能够觉得是相等的。引入坐标系统不会给向量加入额外的信息。所以向量的位置不会影响他的属性。在讨论位置和向量的时候,有一个非常easy混淆的概念,就的点和向量,在unity3d中有时候用vector类描写叙述一个点,由于vector里面有x、y、z三个float变量。Vector(x,y,z)是点还是向量,要细致斟酌。或者我理解有误,有知道的朋友希望告知。
&单位向量和向量的模这两个概念非常基础也非常重要。详细概念我就不反复了,可是要知道这两个向量有什么作用。单位向量能够用来表示方向。模能够用来表示距离。我门能够用这两个概念去计算物体往哪一个方向移动,移动距离是多少。至于物体旋转。要涉及到向量的计算,后面会提及到。
&向量运算包含:加法、减法、数乘、叉积,对于运算,就不提及数学计算和概念了。百度下都知道了。大家都是有文化的人,哈哈..开玩笑了!举样例吧!想象下你要去跟踪一个物体移动。你发现自己的跟踪方向有了偏差。你要怎么修正的方向呢?假设你说用眼睛,那能够,可是计算机是瞎的啊!你给计算机按个眼睛吧!计算机仅仅会数值计算,当然你要用数学模型去表述了。然后计算啦!这时候你能够用向量减法,画下向量减法的图像,是不是非常方便就能够攻克了!再举一个样例,你要去追击一个物体,他总是东拐西拐的。我要速度比他快,可是方向不正确的话是非常难去拦截他下来的。那我要怎么办呢?想象下向量加法的图形。依据两个人的速度,仅仅要我的速度比你快,用向量加法和数乘(数乘能够用来控制速度)。我就能够在路上给你按木桩,让你撞死,守株待兔还是前途的嘛。再举一个样例。假设我想知道目标物体,偏我的角度是多少。我可用点积,计算出我门的角度。样例还有非常多,懒得举了,不然就成举重冠军了,给个连接:
/view/f711cc79176a.html
&说完向量,我想提及一个小细节,非常有必要的细节。由于向量的x、y、x是float类型的。由于float的不精确。我门应该觉得两个浮点相等的能够存在一定的误差的。我门在看到一些游戏代码里面两个浮点数相等可能是这种:
Const float EPSILON=0.001f;//误差范围
bool Equal(float num1,float num2)
&//仅仅要num1和num2在误差范围内,就觉得相等放回真,否则放回假
& Return fabs(num1-num2)&EPSILON?true:
2.&&矩阵(matrix)与变换(transform)
矩阵这玩意是用来干嘛用的呢?大学老师没告诉过我们,至于为什么不告诉我们呢?就不加讨论了。反正教我的是业余的!毕竟老师没有告诉过我。错了希望要指正我啊!
矩阵在数学书上说是是由方程组的系数和常数组成的。从数学原理上, 矩阵代表了从一个线性空间到还有一个线性空间的变换.
通过一个教科书上的样例,简单的描写叙述下计算公式,预计是比較笨的原因。我不喜欢直接用数学符号描写叙述。仅仅喜欢看图。
矩阵说白了。个人理解就是让你“穿越”用的,让你的向量从一个空间转换到另外一个空间的向量。一个位置移动(或者旋转)到另外一个位置。至于空间有本地坐标系统,世界坐标系统,屏幕坐标系统等,以后会谈及。我门看下矩阵变换有几种:平移,旋转,缩放,这些unity3d都已经封装好了。想详细看下他们是怎么变换的。我懒得绘图板画了,去网络上找一个图片来!依照矩阵的算法,用向量乘以变换矩阵套下公式,比較下转换前后的值,就知道了!
每一种变换,都有相应的变换矩阵。用向量或坐标乘以变换矩阵,就可以对它们完毕变换。变换矩阵之间,也能够做乘法叠加,叠加的几何意义是把变换按叠加的先后顺序复合到一个矩阵中去。注意矩阵叠加不满足交换律。变换矩阵是一个4 x 4的矩阵,所以向量和坐标须要扩展到齐次空间中。
向量:(x, y, z, 0)
坐标:(x, y, z, 1)
他们的差别在于第四项。向量的第4项取0。能够使矩阵的平移变换失效,而不影响旋转和缩放运算。坐标第4项取1,使平移有效,而且平移变换的比例不会被变化。假设取2。则其平移的距离则是矩阵中定义的2倍。以此类推。注意,在变换后,有可能出现第4项非0/1 的情况。这个时候,我们必需要做一个映射动作,将它从齐次空间映射回3维空间。方法非常easy:
(x, y, z, w) --& (x/w, y/w, z/w, w/w) --& (x/w, y/w, z/w, 1) --& (x/w, y/w, z/w)
3.&&平面(plane)与射线(Ray)
n Dot P + d = X;
X&0,点P位于平面的背面,|X| 即点P到平面的距离
X&0。点P位于平面的正面,|X| 为点P到平面的距离
设起点为P0, 方向为u,t 为參数。t 属于 [0, 无穷大),当t 属于(-无穷大。+无穷大)时就表示直线。
p(t) = p0 + t * u
之所以要将他们一起放一起是他们两在实际的开发中,是常在一起使用的。至少我用的比較多,举个样例吧。
比方我们点击下2D的屏幕坐标,要确定游戏3D空间中位置。怎么确定呢?怎样用仅仅有x,y轴的二维鼠标。尽量精准的取得x,y,z三维空间的位置,是一个从三维出现就一直被讨论的主题。即使在图形技术如此发达的今天,三维空间的点击仍然仅仅能说&大概准确&。鼠标点击来确定三维空间的位置和摄像机的关系非常大。为什么要说和摄像机有非常大的关系呢?假设你熟悉Direcx3D里面的绘制流水的话,就知道摄像机把3d空间坐标转化为屏幕坐标起着非常关键的作用,如裁剪(clipping)。投影窗体(projection
window)。近裁减,远裁剪,投影平面等。写一个段unity的代码吧!(代码格式调不好,就随便看下吧)。
void Update ()
if(Input.GetMouseButtonDown(0))
RayControl();
if(flagMove)
if(Vector3.Distance(transform.position,mousePos)&1)
transform.Translate(transform.worldToLocalMatrix* ransform.forward* Time.deltaTime*5);//transform.forward是世界坐标,通过transform.worldToLocalMatrix转换矩阵转到本地坐标 然后在本地坐标运动,没有必要必须在本地坐标系运动 可是必须注意要统一起来。
void RayControl()
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//向屏幕发射一条射线(注意这个对象是主摄像机哦)
if(Physics.Raycast(ray,out hit,200))射线长度为200 和地面的碰撞盒做检測
GameObject targetPos=GameObject.CreatePrimitive(PrimitiveType.Sphere);//实例化一个Sphere
targetPos.transform.localScale=new Vector3(0.5f,0.5f,0.5f);
mousePos=hit.//获取碰撞点坐标
mousePos.y=transform.position.y;
targetPos.transform.position=mouseP//Sphere放到鼠标点击的地方
targetDir=mousePos-transform.//计算出朝向
Vector3 tempDir=Vector3.Cross(transform.forward,targetDir.normalized);//用叉乘推断两个向量 是否同方向
float dotValue=Vector3.Dot(transform.forward,targetDir.normalized);//点乘 计算两个向量的夹角,及角色和目标点的夹角
float angle=Mathf.Acos(dotValue)*Mathf.Rad2D
if(tempDir.y&0)//这块 说明两个向量方向相反。这个推断用来确定 假如两个之间夹角30度 究竟是顺时 还是逆时针旋转。
angle=angle*(-1);
print(tempDir.y);
print(&2:&+angle);
transform.RotateAround(transform.position,Vector3.up,angle);
注意事项:写完了才发现 原来不是必需这么麻烦,这样transform.forward=(mousePos-transform.position).normalized就能够直接让角色朝向目标点 RayControl函数 好多都能够省了
4.&&unity3d 数学辅助类
4.1&&&&&&Mathf提供数学计算的函数与常量,面有全部数学计算时须要用到的函数。Mathf对象没有构造函数,是一个固有的对象。并不像String那样是对象的类,因此没有构造函数 Math()。
4.2&&&&&&Matrix4x4一个标准的4x4变换矩阵一个变换矩阵能够运行随意的线形3D变换(比如。平移,旋转,缩放,切边等等)并且透视变换使用齐次坐标。脚本中非常少使用矩阵:最经常使用Vector3,Quaternion,并且Transform类的功能更简单。单纯的矩阵用于特殊情况,如设置非标准相机投影。
4.3&&&&&&Quaternion四元数用于表示旋转它们基于复数的并不easy被直观地理解。因此你没有必要訪问或改动单个Quaternion组件(x,y,z,w);通常你仅仅需把现有的旋转(比如,来自Transform)并使用它们来构造新的旋转(比如,在两个旋转间平滑地插值)。四元数函数你99%的时间你会使用它(其它函数仅额外使用)
4.4&&&&&&Ray射线是一个无穷的线,開始于并沿着方向
4.5&&&&&&Rect一个由x、y位置和width、height大小定义的二维矩形,Rect结构主要用于2D操作。UnityGUI系统非常普遍的使用它。以及在屏幕上定位摄像机
4.6&&&&&&Vector2/vector3/vector4 表示向量和点, 结构用于在Unity传递3D位置和方向。它也包括做些普通向量运算的函数,如角度。模,单位向量,叉乘,点乘,向前向左向右向上。插值。投影,反射,转向……..
4.7& &最后一个大总管,transform物体的位置、旋转和缩放,场景中的每个物体都有一个Transform。用于储存并操控物体的位置、旋转和缩放。每个Transform能够有一个父级,同意你分层次应用位置、旋转和缩放。能够在Hierarchy面板查看层次关系。他们也支持计数器(enumerator)。因此你能够使用循环遍历子物体。
版权声明:本文博客原创文章,博客,未经同意,不得转载。
阅读(...) 评论()Unity之3D数学基础知识精讲视频课程 - 蛮牛教育 - 国内最大的Unity在线学习平台|Unity培训|Unity3d培训|Unity视频学习|Unity教程 Unreal 虚幻 AR VR - Powered By EduSoho
3D数学在游戏开发中占据着重要的地位,在3D世界里,正是由于有了数学的支撑,才能给用户带来更逼真的体验,3D数学决定了游戏引擎如何计算和模拟出用户看到的每一帧画面。掌握3D数学知识可以帮助用户对游戏引擎产生更深刻的了解,本门课程将会讲解一些基本的3D数学概念及其在Unity中的应用。
课时1 3D坐标系
课时2 世界坐标与局部坐标实例
课时3 向量的概念及运算
课时4 向量运用
课时5 向量运用缓动效果
课时6 矩阵的概念
课时7 齐次坐标
课时8 四元数的概念
课时9 四元数的实例
学会3D数学概念和在Unity中的运用
有基本的Unity知识和操作基础的人群
Unity游戏开发在线教育
收藏了课程
学完了课时
开始学习课时
学完了课时
开始学习课时扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 913|回复: 16
Unity3D 数学基础图形与与游戏开发
本帖为抢楼帖,欢迎抢楼!&
136/50排名<font color="#FF昨日变化15主题帖子积分
注册看看, 积分 36, 距离下一级还需 14 积分
注册看看, 积分 36, 距离下一级还需 14 积分
蛮牛币1981
在线时间13 小时
我是初学者购买这套教程看完这套教程之后对我帮助非常大。
好东西是要拿出来分享的可是呢我也是花钱买的希望大家谅解
数学;unity3d要数学
本帖子中包含更多资源
才可以下载或查看,没有帐号?
每日推荐:
3186/300排名<font color="#FF昨日变化13主题帖子积分
偶尔光临, 积分 186, 距离下一级还需 114 积分
偶尔光临, 积分 186, 距离下一级还需 114 积分
在线时间49 小时
每日推荐:
272/150排名<font color="#FF昨日变化7主题帖子积分
初来乍到, 积分 72, 距离下一级还需 78 积分
初来乍到, 积分 72, 距离下一级还需 78 积分
在线时间17 小时
没那么多钱下载
每日推荐:
274/150排名<font color="#FF昨日变化9主题帖子积分
初来乍到, 积分 74, 距离下一级还需 76 积分
初来乍到, 积分 74, 距离下一级还需 76 积分
在线时间21 小时
要求太多金币啦!!
每日推荐:
72681/5000排名97昨日变化主题帖子积分
日久生情, 积分 2681, 距离下一级还需 2319 积分
日久生情, 积分 2681, 距离下一级还需 2319 积分
蛮牛币6964
在线时间748 小时
真实下载,真实可靠,确实是视频教程,不是书。没问题。
每日推荐:
3209/300排名<font color="#FF昨日变化5主题帖子积分
偶尔光临, 积分 209, 距离下一级还需 91 积分
偶尔光临, 积分 209, 距离下一级还需 91 积分
在线时间56 小时
想要,但是币不够啊,,,,
每日推荐:
278/150排名<font color="#FF昨日变化48主题帖子积分
初来乍到, 积分 78, 距离下一级还需 72 积分
初来乍到, 积分 78, 距离下一级还需 72 积分
在线时间41 小时
是那个书吗?
每日推荐:
287/150排名<font color="#FF昨日变化48主题帖子积分
初来乍到, 积分 87, 距离下一级还需 63 积分
初来乍到, 积分 87, 距离下一级还需 63 积分
在线时间18 小时
希望可以帮到自己,提高自己。
每日推荐:
5685/1000排名<font color="#FF昨日变化21主题帖子积分
熟悉之中, 积分 685, 距离下一级还需 315 积分
熟悉之中, 积分 685, 距离下一级还需 315 积分
在线时间151 小时
thanks for share
每日推荐:
136/50排名<font color="#FF昨日变化15主题帖子积分
注册看看, 积分 36, 距离下一级还需 14 积分
注册看看, 积分 36, 距离下一级还需 14 积分
蛮牛币1981
在线时间13 小时
这是视频教程吗,如果是那个同名的书的话,网上一大堆现成的pdf下载,还要50蛮牛币。。。 ...
是的兄弟 绝对真实视频教程&&我从来不搞坑蒙拐骗的事情
每日推荐:
136/50排名<font color="#FF昨日变化15主题帖子积分
注册看看, 积分 36, 距离下一级还需 14 积分
注册看看, 积分 36, 距离下一级还需 14 积分
蛮牛币1981
在线时间13 小时
无图怎么相信你,怎么知道内容值不值。
信不信由你了兄弟 我只是把好东西分享一下
[]: 宏伟 捡了钱没交公 蛮牛币 降了 3
每日推荐:
136/50排名<font color="#FF昨日变化15主题帖子积分
注册看看, 积分 36, 距离下一级还需 14 积分
注册看看, 积分 36, 距离下一级还需 14 积分
蛮牛币1981
在线时间13 小时
信不信由你们& &我分享的是百度云链接&&我没事干了是吧骗你们
每日推荐:
61039/1500排名<font color="#FF昨日变化2主题帖子积分
蛮牛粉丝, 积分 1039, 距离下一级还需 461 积分
蛮牛粉丝, 积分 1039, 距离下一级还需 461 积分
蛮牛币1223
在线时间275 小时
无图怎么相信你,怎么知道内容值不值。
每日推荐:
61380/1500排名<font color="#FF昨日变化1主题帖子积分
蛮牛粉丝, 积分 1380, 距离下一级还需 120 积分
蛮牛粉丝, 积分 1380, 距离下一级还需 120 积分
蛮牛币2101
在线时间405 小时
无图无真想啊....
每日推荐:
5555/1000排名<font color="#FF昨日变化19主题帖子积分
熟悉之中, 积分 555, 距离下一级还需 445 积分
熟悉之中, 积分 555, 距离下一级还需 445 积分
在线时间431 小时
这是视频教程吗,如果是那个同名的书的话,网上一大堆现成的pdf下载,还要50蛮牛币。。。
每日推荐:老G 的BLOG
用户名:老G
文章数:125
评论数:366
访问量:1134925
注册日期:
阅读量:1083
阅读量:3143
阅读量:425898
阅读量:1114282
51CTO推荐博文
今天带来的是系列最新视频,关于向量的内容本次视频,主要讲解一下向量的基本概念。国内网盘:苹果iTunes U注册代码:1班:EFP-ALT-RRA(已满)2班:EHX-XSW-BTBYouTube本作品采用进行许可。不足支持,还请雅正,回复或者email来信都可。欢迎捐助,支付宝帐号:下一次视频预告,《3D数学基础》1.2向量的模本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)游戏开发(5)
1.数学(点乘/叉乘)/unity3d的数学辅助类
2.坐标系统(本地/世界/屏幕)
3.Unity3d运行流程
4.计算角色和目标点的夹角,旋转角色朝向目标点,然后移动角色(例子)
5.Gizmos/inspector/地图编辑
6.脚本文件间的数据交互
return/协同线程/事件
9.Unity3D调用c&#43;&#43;DLL
---------------------------------------------------------------
---------------------------------------------------------------
一.Unity3d中需要的基础数学知识(vector/matrix/transform)
& & & &看到这几个单词,我想在游戏引擎里面都挺常见的,unity3d里面也不例外!虽然unity给我们封装的这么好,会用就可以了,但是知其然,还是对自己比较有帮助的。因为以后要是该用其他的引擎了呢?不想一辈子都被这些工具牵制的话,就必须理解这些可能会比较枯燥的数学知识了。当然这里面不会去讨论太过复杂的数学知识,当然有兴趣,可以多看点,但是不用花费他多的时间(除了想当数学家的除外),不明白的时候看一看就ok了!有了这些知识,再去看那些unity3d给我的数学辅助类,就用起来就清爽很多了!
1.向量(vector)
向量有两个重要的属性长度和方向,举例子吧!在空间里面物体移动要知道物体移动的方向和距离用向量这个数学工具就非常方便描述,还有摄像机的观察方向、光线的走向等。
在不包含位置信息,所以它可以独立于坐标系统。只要向量长度和方向相同就可以认为是相等的。引入坐标系统不会给向量添加额外的信息。所以向量的位置不会影响他的属性。在讨论位置和向量的时候,有一个很容易混淆的概念,就的点和向量,在unity3d中有时候用vector类描述一个点,因为vector里面有x、y、z三个float变量。Vector(x,y,z)是点还是向量,要仔细斟酌。或者我理解有误,有知道的朋友希望告知。
&单位向量和向量的模这两个概念很基础也很重要。具体概念我就不重复了,但是要知道这两个向量有什么作用。单位向量可以用来表示方向,模可以用来表示距离。我门可以用这两个概念去计算物体往哪一个方向移动,移动距离是多少。至于物体旋转,要涉及到向量的计算,后面会提及到。
&向量运算包括:加法、减法、数乘、叉积,对于运算,就不提及数学计算和概念了。百度下都知道了,大家都是有文化的人,哈哈..开玩笑了!举例子吧!想象下你要去跟踪一个物体移动,你发现自己的跟踪方向有了偏差,你要怎么修正的方向呢?如果你说用&#30524;睛,那可以,但是计算机是瞎的啊!你给计算机按个&#30524;睛吧!计算机只会数&#20540;计算,当然你要用数学模型去表述了,然后计算啦!这时候你可以用向量减法,画下向量减法的图像,是不是很方便就可以解决了!再举一个例子,你要去追击一个物体,他总是东拐西拐的,我要速度比他快,但是方向不对的话是很难去拦截他下来的,那我要怎么办呢?想象下向量加法的图形,根据两个人的速度,只要我的速度比你快,用向量加法和数乘(数乘可以用来控制速度),我就可以在路上给你按木桩,让你撞死,守株待兔还是前途的嘛。再举一个例子,如果我想知道目标物体,偏我的角度是多少,我可用点积,计算出我门的角度。例子还有很多,懒得举了,不然就成举重冠军了,给个连接:
/view/f711cc79176a.html
&说完向量,我想提及一个小细节,很有必要的细节。因为向量的x、y、x是float类型的。由于float的不精确,我门应该认为两个浮点相等的可以存在一定的误差的。我门在看到一些游戏代码里面两个浮点数相等可能是这样的:
Const float EPSILON=0.001f;//误差范围
bool Equal(float num1,float num2)
&//只要num1和num2在误差范围内,就认为相等放回真,否则放回假
&&Return fabs(num1-num2)&EPSILON?true:
2.矩阵(matrix)与变换(transform)
矩阵这玩意是用来干嘛用的呢?大学老师没告诉过我们,至于为什么不告诉我们呢?就不加讨论了,反正教我的是业余的!毕竟老师没有告诉过我,错了希望要指正我啊!
矩阵在数学书上说是是由方程组的系数和常数组成的。从数学原理上,&矩阵代表了从一个线性空间到另一个线性空间的变换.
通过一个教科书上的例子,简单的描述下计算公式,估计是比较笨的原因,我不喜欢直接用数学符号描述,只喜欢看图。
矩阵说白了,个人理解就是让你“穿越”用的,让你的向量从一个空间转换到另外一个空间的向量,一个位置移动(或者旋转)到另外一个位置。至于空间有本地坐标系统,世界坐标系统,屏幕坐标系统等,以后会谈及!我门看下矩阵变换有几种:平移,旋转,缩放,这些unity3d都已经封装好了。想具体看下他们是怎么变换的,我懒得画图板画了,去网络上找一个图片来!按照矩阵的算法,用向量乘以变换矩阵套下公式,比较下转换前后的&#20540;,就知道了!
每一种变换,都有对应的变换矩阵,用向量或坐标乘以变换矩阵,即可对它们完成变换。变换矩阵之间,也可以做乘法叠加,叠加的几何意义是把变换按叠加的先后顺序复合到一个矩阵中去,注意矩阵叠加不满足交换律。变换矩阵是一个4 x 4的矩阵,所以向量和坐标需要扩展到齐次空间中。
向量:(x, y, z, 0)
坐标:(x, y, z, 1)&
他们的区别在于第四项,向量的第4项取0,可以使矩阵的平移变换失效,而不影响旋转和缩放运算。坐标第4项取1,使平移有效,并且平移变换的比例不会被变化。如果取2,则其平移的距离则是矩阵中定义的2倍。以此类推。注意,在变换后,有可能出现第4项非0/1&的情况,这个时候,我们必须要做一个映射动作,将它从齐次空间映射回3维空间,方法很简单:
(x, y, z, w) --& (x/w, y/w, z/w, w/w) --& (x/w, y/w, z/w, 1) --& (x/w, y/w, z/w)
3.平面(plane)与射线(Ray)
n Dot P &#43; d = X;
X&0,点P位于平面的背面,|X|&即点P到平面的距离
X&0,点P位于平面的正面,|X|&为点P到平面的距离
设起点为P0,&方向为u,t&为参数,t&属于&[0,&无穷大),当t&属于(-无穷大,&#43;无穷大)时就表示直线。
p(t) = p0 &#43; t * u
之所以要将他们一起放一起是他们两在实际的开发中,是常在一起使用的。至少我用的比较多,举个例子吧!
比如我们点击下2D的屏幕坐标,要确定游戏3D空间中位置,怎么确定呢?如何用只有x,y轴的二维鼠标,尽量精准的取得x,y,z三维空间的位置,是一个从三维出现就一直被讨论的主题。即使在图形技术如此发达的今天,三维空间的点击仍然只能说&大概准确&。鼠标点击来确定三维空间的位置和摄像机的关系非常大,为什么要说和摄像机有很大的关系呢?如果你熟悉Direcx3D里面的绘制流水的话,就知道摄像机把3d空间坐标转化为屏幕坐标起着很关键的作用,如裁剪(clipping),投影窗口(projection
window),近裁减,远裁剪,投影平面等。写一个段unity的代码吧!(代码&#26684;式调不好,就随便看下吧)。
void Update ()
if(Input.GetMouseButtonDown(0))
RayControl();
if(flagMove)
if(Vector3.Distance(transform.position,mousePos)&1)
transform.Translate(transform.worldToLocalMatrix* ransform.forward* Time.deltaTime*5);//transform.forward是世界坐标,通过transform.worldToLocalMatrix转换矩阵转到本地坐标
然后在本地坐标运动,没有必要必须在本地坐标系运动 但是必须注意要统一起来。
void RayControl()
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);//向屏幕发射一条射线(注意这个对象是主摄像机哦)
if(Physics.Raycast(ray,out hit,200))射线长度为200&和地面的碰撞盒做检测
GameObject targetPos=GameObject.CreatePrimitive(PrimitiveType.Sphere);//实例化一个Sphere
targetPos.transform.localScale=new Vector3(0.5f,0.5f,0.5f);
mousePos=hit.//获取碰撞点坐标
mousePos.y=transform.position.y;
targetPos.transform.position=mouseP//Sphere放到鼠标点击的地方
targetDir=mousePos-transform.//计算出朝向
Vector3 tempDir=Vector3.Cross(transform.forward,targetDir.normalized);//用叉乘判断两个向量 是否同方向
float dotValue=Vector3.Dot(transform.forward,targetDir.normalized);//点乘 计算两个向量的夹角,及角色和目标点的夹角
float angle=Mathf.Acos(dotValue)*Mathf.Rad2D
if(tempDir.y&0)//这块 说明两个向量方向相反,这个判断用来确定 假如两个之间夹角30度
到底是顺时 还是逆时针旋转。
angle=angle*(-1);
print(tempDir.y);
print(&2:&&#43;angle);
transform.RotateAround(transform.position,Vector3.up,angle);
注意事项:写完了才发现 原来没必要这么麻烦,这样transform.forward=(mousePos-transform.position).normalized就可以直接让角色朝向目标点RayControl函数
好多都可以省了
4.unity3d&数学辅助类
4.1Mathf提供数学计算的函数与常量,面有所有数学计算时需要用到的函数。Mathf对象没有构造函数,是一个固有的对象,并不像String那样是对象的类,因此没有构造函数&Math()。
4.2Matrix4x4一个标准的4x4变换矩阵一个变换矩阵可以执行任意的线形3D变换(例如,平移,旋转,缩放,切边等等)并且透视变换使用齐次坐标。脚本中很少使用矩阵:最常用Vector3,Quaternion,而且Transform类的功能更简单。单纯的矩阵用于特殊情况,如设置非标准相机投影。
4.3Quaternion四元数用于表示旋转它们基于复数的并不容易被直观地理解,因此你没有必要访问或修改单个Quaternion组件(x,y,z,w);通常你只需把现有的旋转(例如,来自Transform)并使用它们来构造新的旋转(例如,在两个旋转间平滑地插&#20540;)。四元数函数你99%的时间你会使用它(其他函数仅额外使用)
4.4Ray射线是一个无穷的线,开始于并沿着方向
4.5Rect一个由x、y位置和width、height大小定义的二维矩形,Rect结构主要用于2D操作。UnityGUI系统很普遍的使用它,以及在屏幕上定位摄像机
4.6Vector2/vector3/vector4&表示向量和点,&结构用于在Unity传递3D位置和方向。它也包含做些普通向量运算的函数,如角度,模,单位向量,叉乘,点乘,向前向左向右向上,插&#20540;,投影,反射,转向……..
4.7&&&最后一个大总管,transform物体的位置、旋转和缩放,场景中的每一个物体都有一个Transform。用于储存并操控物体的位置、旋转和缩放。每一个Transform可以有一个父级,允许你分层次应用位置、旋转和缩放。可以在Hierarchy面板查看层次关系。他们也支持计数器(enumerator),因此你可以使用循环遍历子物体。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:599197次
积分:6313
积分:6313
排名:第3545名
原创:71篇
转载:206篇
评论:27条
(1)(1)(3)(1)(2)(5)(18)(7)(5)(6)(5)(24)(22)(2)(7)(8)(2)(1)(2)(1)(1)(3)(1)(1)(4)(2)(18)(13)(16)(8)(10)(14)(29)(19)(5)(6)(6)(12)(21)(20)}

我要回帖

更多关于 3d游戏数学基础 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信