Unity3D游戏开发之参考坐标系

合集下载

unity 坐标的转换原理

unity 坐标的转换原理

Unity中的坐标转换原理主要涉及四种坐标系:世界坐标(World Space)、屏幕坐标(Screen Space)、视口坐标(Viewport Space)和GUI坐标。

世界坐标(World Space): 这是一个3D坐标,表示游戏物体在创造世界中的位置。

物体的位置通过transform.position获得,该值表示物体相对于世界坐标的位置。

而transform.localPosition则表示物体相对于父物体坐标的位置。

模型Mesh 保存的顶点坐标也是基于局部坐标系下的坐标。

屏幕坐标(Screen Space): 屏幕坐标是以像素来定义的,并与分辨率相关。

例如,分辨率为1280*720的屏幕的Screen.width为1280,Screen.height为720。

在Unity中,屏幕坐标的原点在屏幕的左下角,x轴从左到右增加,y轴从下到上增加。

视口坐标(Viewport Space): 视口坐标系实际上是将屏幕坐标系单位化。

视口坐标的原点在视口的左下角,x轴从左到右增加,y轴从下到上增加。

z轴坐标是相机的世界坐标中z轴的负值。

这种坐标系主要用于制作分屏游戏。

GUI坐标: Unity的GUI系统使用的是自己的坐标系,其原点在屏幕的左上角,x轴从左到右增加,y轴从上到下增加。

在进行坐标转换时,需要根据具体需求选择合适的坐标系,并根据需要进行适当的转换。

例如,如果要将物体的世界坐标转换为屏幕坐标,可能需要先通过相机的投影矩阵将世界坐标转换为相机坐标,然后再通过相机的视图矩阵将相机坐标转换为屏幕坐标。

Unity3D数学基础知识

Unity3D数学基础知识

Unity3D数学基础知识1、3D坐标系(3D Coordinate System)3D坐标系是3D游戏开发中的基础概念。

一般而言3D软件都是采用笛卡尔坐标系来描述物体的坐标信息。

笛卡尔坐标系分为左手坐标系和右手坐标系,左手坐标系是Y轴指向上方,X轴指向右方,而Z轴指向前方;左、右手坐标系X、Y轴向相同,而Z轴是相反的。

在Unity中使用的是左手坐标系,其中X轴代表水平方向,Y轴代表垂直方向,而Z轴代表深度,Unity中游戏对象的坐标信息是放在一堆括号中,依次按X、Y、Z轴顺序的格式来写的,例如(1,2,1)。

在游戏开发中,经常会用到不同的坐标系来描述控件中的位置,常用的坐标系有如下几种。

1) 全局坐标系全局坐标系是用于描述游戏场景内所有物体位置和方向的基准,也称为世界坐标系。

在Unity场景中创建的物体都是以全局坐标系中的坐标原点(0,0,0)来确定各自的位置的。

新建一个Cube立方体,在Hierarchy视图中设置Position属性为(1,2,1),表示它距离全局坐标系原点在X轴方向上有1个单位的长度,在Y轴方向上有2个单位的长度,Z轴方向上有1个单位的长度。

2) 局部坐标系每个物体都有其独立的物体坐标系,并且随物体进行相同的移动或者旋转,也称模型坐标系或物体坐标系。

模型mesh保存的顶点坐标均为局部坐标系下的坐标。

在Unity中,可以在Hierarachy视图中将一个游戏对象拖动到另一个对象上来建立父子关系(Parenting),这样就使得被拖动的游戏对象称为目标对象的子物体,父子物体的坐标系是关联的,此时子物体会以父物体的坐标点为自身的坐标原点。

3) 相机坐标系根据观察位置和方向建立的坐标系。

使用此坐标系可以方便地判断物体是否在相机前方以及物体之间的先后遮挡顺序等。

4) 屏幕坐标系建立在屏幕上的二维坐标系,用来描述像素在屏幕上的位置。

在Unity中,Transform 组件的Transform.TransformPoint 方法可以将坐标点从局部坐标系转换到全局坐标系。

模型从3dmax导入到unity中坐标系的问题

模型从3dmax导入到unity中坐标系的问题

模型从3dmax导入到unity中坐标系的问题作者:Nono 北京2016-5-25今天白天使用3DMax2012导出法线发转球体模型导入到Unity 5(Mac版)中出现坐标不匹配问题,需要将x轴旋转-90度后,方可正常显示360度全景,晚上换成3DMax2017导出模型并导入到Unity 5.3.4.f1(Windows版),发现一切正常了,经分析可能是Mac版Unity 的问题。

虽然问题解决但也希望各位同学明白其原理,具体如下:在3DMAX中使用的是右手坐标系,但是Unity则使用的左手坐标系,所以导出Fbx的时候需要改一下3D模型的轴向。

那什么是右手坐标系与左手坐标系呢?在空间直角坐标系中,让右手拇指指向x轴的正方向,食指指向y轴的正方向,如果中指能指向z轴的正方向,则称这个坐标系为右手直角坐标系.同理左手直角坐标系。

(来自百度百科)基本知识与概念与大家讲解完之后,言归正传,介绍3DMAX导出.fbx文件是注意事项。

其实3DMAX导出时的注意事项就是:“没有注意事项”(有没有被愚弄的感觉,呵呵~~)但大家还是要注意其中关键环节:1.在3DMAX中选中物体点击“导出->导出选定对象”,起文件名并单击保存按钮,之后会弹出一个“FBX导出”对话框,注意对话框中“高级选项->轴转化->向上轴”默认选择的是“Y向上”,这样导出到对象就与Unity中的左手坐标系对上了。

(其实这一切都是3DMAX默认设置好的),如下图所示:2.再将FBX对象倒入Unity后,大家会发现球体的坐标面板,在旋转参数部分x轴的值默认为-90,(正常在Unity中创建球体X轴默认值为0),这样就是从3DMAX中导出的图像在Unity中可正常显示的原理。

如下图所示:明天与大家讨论3DMAX中模型单位与Unity单位统一问题。

谢谢大家观看!我也是VR爱好者,以后会继续为大家更新相关学习资料。

本文档都可从豆丁网下载/haitao2009点击右上部分“文档”连接持续更新关注:新浪微博:NonoVR俱乐部/u/1677854237?refer_flag=1005055010_&is_all=1微信公众号:NonoVR俱乐部。

Unity中的几种坐标系

Unity中的几种坐标系

Unity中的⼏种坐标系在不同的情况下使⽤不同的坐标系更加⽅便,所以在Unity中有多种坐标系:全局坐标系 World Coordinate System局部坐标系 Local Coordinate System屏幕坐标系 Screen Space视⼝坐标系 ViewPort Space全局坐标系 全局坐标系是⽤于描述场景内所有物体位置的⽅向的基准,也称为世界坐标系。

在Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各⾃的位置的。

可以使⽤transform.position来获取游戏对象的世界坐标。

局部坐标系 局部坐标系也称为模型坐标系或物体坐标系。

每个物体都有⾃⾝独⽴的物体坐标系。

当物体移动或改变⽅向时,和该物体相关联的坐标系将随之移动或改变⽅向。

模型Mesh保存的顶点坐标均为局部坐标系下的坐标。

本地坐标 transform.localPosition(本地坐标)可以获得物体在⽗物体的局部坐标系中的位置点。

⽗⼦关系,⼦物体以⽗物体的坐标点为⾃⾝的坐标原点。

如果该游戏物体没有⽗物体,那么 transform.localPosition获得的依然是该物体在全局坐标系中的坐标。

如果该物体有⽗物体,则获得是在其⽗物体的局部坐标系中的坐标。

检视视图中显⽰的为localPosition的值。

屏幕坐标系 屏幕坐标系是建⽴在屏幕上的⼆维坐标系。

以像素来定义的,屏幕的左下⾓为(0,0),右 上⾓为(Screen.width, Screen.height),z轴的坐标是相机的世界坐标中z轴坐标的负值。

⿏标位置坐标属于屏幕坐标,通过Input.mousePosition可以获得该位置的坐标。

⼿指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个⼿指触摸屏幕时⼿指的坐标。

视⼝坐标系 视⼝坐标系是将Game视图的屏幕坐标系单位化,左下⾓(0,0),右上⾓(1,1)。

unity3D技术之研究院之通过坐标变换实现简单太阳系

unity3D技术之研究院之通过坐标变换实现简单太阳系

我们拿太阳系为模型,主要实现太阳自转、地球自转、地球公转、月球自转、月球公转效果。

由于现在还没有说到模型的绘制,我们现在暂时用正方体来代表三个星球。

先来看一下,在Direct3D 中是如何生成平移、旋转、缩放矩阵的。

(文章出自狗刨学习网)1、生成平移矩阵:pOUt 是最终生成的平移矩阵指针,x 、y 、z 分别表示各方向上的移动量。

2、生成旋转矩阵:这三个函数分别生成绕x 、y 、z 轴旋转的旋转矩阵。

其中pOut 是生成的旋转矩阵指针,Angle 为旋转的角度。

3、生成缩放矩阵:pOut 为生成的缩放矩阵指针,sx 、sy 、sz 分别为在三个坐标轴上的缩放系数。

同设置不同的缩放系数可以实现一些特殊效果。

将要实现的简单太阳系就是通过这一系列的有序组合实现的。

我们分别为太阳、地球、月球进行设置。

设置太阳:10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 g_pDevice->SetTransform(D3DTS_WORLD, &matWorld);//观察变换D3DXVECTOR3 eyePos(0.0f, 10.0f, -20.0f);D3DXVECTOR3 lookatPos(0.0f, 0.0f, 1.0f);D3DXVECTOR3 updir(0.0f, 1.0f, 0.0f);D3DXMATRIX matView;D3DXMatrixLookAtLH(&matView, &eyePos, &lookatPos, &updir);g_pDevice->SetTransform(D3DTS_VIEW, &matView);//投影变换D3DXMATRIX matProj;D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);g_pDevice->SetTransform(D3DTS_PROJECTION, &matProj);}在此方法中首先进行了世界变换,也就是我们的太阳自转操作,然后是观察、投影的变换。

基于Unity3D引擎的游戏设计与开发

基于Unity3D引擎的游戏设计与开发

基于Unity3D引擎的游戏设计与开发引言近年来随着计算机物理硬件的提升以及社会经济的进步,游戏技术也得到了空前的发展。

无论是游戏引擎还是玩法,都得到了长足的进步。

Unity是一款由Unity科技公司所设计的可跨平台的2D与3D游戏引擎,其支持开发Windows 等电脑平台、任天堂Switch等主机平台以及Android等移动设备的各种游戏,以及基于WebGL技术的网页平台以及TVOS等多媒体平台。

塔防是指通过在地图上建造各种各样的炮塔来阻止游戏中的敌人抵达指定位置的实时战略计算机游戏,此类游戏的目标是生存若干时间或尽可能生存下去。

玩家一般有生命值,生命值以敌人数量为基准,如果敌人在到达指定地点之前没有被消灭,玩家就会减少生命。

随着怪物波次的增加和炮塔属性的逐渐提升,怪物的数量、属性以及各种特殊能力也会提升。

目前国内外许多专家在Unity平台研发了多种游戏,如伍传敏等人基于Unity3D完成了第一人称射击游戏的设计与开发。

张典华等人基于Unity3D实现了多平台兼容的三维空战游戏。

刘晋钢等人则研究了Unity3D与Kinect整合数据技术在体感游戏中的应用价值。

本文通过C++设计并实现了一款基于Unity3D引擎的TowerDefence游戏,实现了怪物AI设置,攻击检测算法的设计以及游戏特效和渲染管道等关键技术。

游戏运行流畅,画面精良,操作简单,体验丰富,上线后收获大量好评。

1 游戏设计1.1 塔防游戏设计策略本文的塔防游戏玩法设计遵循以下原则:(1)玩家放置的障碍物可以在障碍物摧毁基地之前伤害或杀死敌方攻击者。

(2)修复障碍物的能力。

(3)升级障碍物的能力。

(4)能够修复障碍物的升级。

(5)用于购买升级和维修的某种货币(可以是时间,游戏内货币或经验值,例如通过击败攻击单位而获得的货币)。

(6)能够一次穿越多条路径的敌人。

(7)每波通常有固定数量和类型的敌人。

(8)许多现代的塔防游戏都从实时游戏发展到回合游戏,其中存在不同的阶段,例如构建,防御,修复和庆祝。

Unity3D游戏开发之四种坐标系

Unity3D游戏开发之四种坐标系

Unity3D游戏开发之四种坐标系unity3d 四种坐标系1, World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。

transform.position可以获得该位置坐标。

2, Screen Space(屏幕坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。

注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。

4, 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。

其中camera为场景中的camera对象。

屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。

其中camera为场景中的camera对象。

视口坐标→屏幕坐标:camera.ViewportToScreenPoint();视口坐标→世界坐标:camera.ViewportToWorldPoint();案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。

ing UnityEngine;ing System.Collections;3.public class test : MonoBehaviour {4. //图片5. public Texture img;6. //储存鼠标的位置坐标7. private Vector2 pos;8. void OnGUI()9. {10. //鼠标左击,获取当前鼠标的位置11. if (Input.GetMouseButton(0))12. {13. pos = Input.mousePosition;14. }15. //绘制图片16. GUI.DrawTexture(new Rect(pos.x,Screen.height - pos.y,100,100), img);17. }18.}案例2if去掉吧!ing UnityEngine;ing System.Collections;3.public class test: MonoBehaviour {4. //场景的相机,拖放进来5. public Camera camera;6. //场景的物体7. private GameObject obj;8. void Start()9. {10. //初始化11. obj = GameObject.Find("Plane");12. }13. void Update ()14. {15. //有触摸16. if (Input.touchCount > 0)17. {18. print("世界坐标" + obj.transform.position);19. print("屏幕坐标" + Input.GetTouch(0).position);20. print("世界坐标→屏幕坐标" +camera.WorldToScreenPoint(obj.transform.position));21. print("屏幕坐标→视口坐标" +camera.ScreenToViewportPoint(Input.GetTouch(0).position));22. print("世界坐标→视口坐标" +camera.WorldToViewportPoint(obj.transform.position));23. }24. }25.}。

unity 贝塞尔曲线坐标和朝向

unity 贝塞尔曲线坐标和朝向

题目:Unity中贝塞尔曲线的坐标和朝向计算在Unity游戏开发中,贝塞尔曲线是一种常用的曲线,它可以用来实现各种动画效果,比如路径动画、飞行轨迹等。

贝塞尔曲线的坐标和朝向计算是使用过程中常遇到的问题,本文将对Unity中贝塞尔曲线的坐标和朝向进行详细的介绍和分析,帮助开发者更好地理解和应用贝塞尔曲线。

一、贝塞尔曲线概述贝塞尔曲线是一种数学曲线,其特点是具有平滑的变化和控制点的灵活性。

在Unity中,贝塞尔曲线常用来描述复杂的路径或动画效果,可以通过控制点的位置和权重来调整曲线的形状。

二、贝塞尔曲线的坐标计算1. 线性贝塞尔曲线线性贝塞尔曲线是最简单的贝塞尔曲线,由两个控制点确定。

其坐标计算公式为:B(t) = (1 - t) * P0 + t * P1其中,P0和P1分别为起始点和终点的坐标,t的取值范围为[0, 1]。

2. 二次贝塞尔曲线二次贝塞尔曲线由三个控制点确定,其坐标计算公式为:B(t) = (1 - t)^2 * P0 + 2 * t * (1 - t) * P1 + t^2 * P2其中,P0、P1和P2分别为起始点、控制点和终点的坐标,t的取值范围为[0, 1]。

3. 三次贝塞尔曲线三次贝塞尔曲线由四个控制点确定,其坐标计算公式为:B(t) = (1 - t)^3 * P0 + 3 * t * (1 - t)^2 * P1 + 3 * t^2 * (1 - t) * P2 + t^3 * P3其中,P0、P1、P2和P3分别为起始点、两个控制点和终点的坐标,t的取值范围为[0, 1]。

三、贝塞尔曲线的朝向计算在路径动画等应用中,贝塞尔曲线的朝向计算也是一个重要的问题。

通常情况下,可以通过求取曲线上两个相邻点的连线的斜率来计算曲线上某一点的朝向。

四、结语通过本文的介绍,相信大家对Unity中贝塞尔曲线的坐标和朝向计算有了更深入的理解。

在实际的游戏开发中,贝塞尔曲线的应用是非常广泛的,希望本文能够帮助到大家更好地应用贝塞尔曲线,实现各种炫酷的动画效果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Unity3D游戏开发之参考坐标系
参考坐标系(Reference Coordinate System)列表是让你指定用于变换(移动move、旋转rotate和缩放scale)的坐标系。

选项包括视图坐标view,屏幕坐标screen,世界
坐标world,父坐标parent,局部坐标local,网格坐标grid和拾取坐标pick。

在屏幕坐标系下,所有的视图(包括***图perspective)使用视口屏幕坐标。

视图
坐标view是世界坐标world和屏幕坐标screen的混合坐标系。

使用视图坐标时,所有
的正交视图(orthgraphic views)使用屏幕坐标screen,然而***图使用世界坐标world。

注意:坐标系被设置在一种变换对另一种变换的基础之上,所以在选择坐标系之前
应先选择变化方式。

如果你不想改变坐标系,打开Customize menu > Preferences > General tab > Reference Coordinate System group > Constant。

逐项解释:
View视图坐标:在默认坐标系下,在所有的(正交)视图中X,Y,Z三个轴是相同的。

当你使用这个坐标系移动一个对象时,你所移动的对象与视口空间有如下关系。

·X轴总是指向(屏幕)右侧。

·Y轴总是指向(屏幕)上方。

·Z轴总是垂直屏幕指向你。

Screen屏幕坐标:使用激活的视口屏幕作为坐标系。

·X轴是水平的,正方向指向(屏幕)右侧。

·Y轴是垂直的,正方向指向(屏幕)上方。

·Z轴是进深的,正方向指向你。

因为屏幕坐标模式是以激活视口作为它的坐标方向,未激活视口中轴三脚架上X,Y,Z的指向显示当前激活视口的方向。

当你激活这个视口时,轴三脚架上的指向将会改变。

文章出处【狗刨学习网】
World世界坐标:从前视图front看:
·X轴正方向指向(屏幕)右侧。

·Z轴正方向指向(屏幕)上方。

·Y轴正方向背离你。

Parent父坐标:使用所选择对象的父对象的坐标系统。

如果对象未链接到特定的物体上,那么它是世界的子物体,即父坐标与世界坐标相同。

Local局部坐标:使用所选择对象的坐标系统。

一个对象的局部坐标来自它的枢轴点。

你可以通过使用选项中的Hierarchy命令面板,相对于对象调整局部坐标的位置和方向。

当局部坐标处于激活状态,按钮“Use Transform Center”是不起作用的,所用的变换使用局部坐标轴作为变换的中心。

在一个选择集中的几个物体,每个分别使用它自己的中心来做变换。

Grid网格坐标:使用激活网格的坐标系。

Pick拾取坐标:使用场景中另一个对象的坐标系。

当你选择Pick以后,单击选择单个物体,此物体的坐标系将被用于变换。

对象的名字出现在变换坐标系列表中。

事实是在列表中所存储的对象名称使你可以拾取此对象的坐标系,改变激活的坐标系,而且可以稍后再使用对象坐标系。

列表中储存四个最近拾取的对象名称。

当你使用拾取坐标来指定一个对象作为参考坐标系时,你能够按下“H”显示选择对象对话框,并从那里选择对象。

文章出处【狗刨学习网】
----World Coordinate System--世界坐标系
这个坐标系将世界空间或模型空间作为一个整体。

世界空间是世界坐标系,世界坐标系是软件用于在场景中追踪对象的。

当你看到视口中的主珊格,你就见到世界空间坐标系。

世界空间是固定不变的。

在世界坐标系下,从前视图front看去,X轴正方向指向(屏幕)右侧,Z轴正方向指向(屏幕)上方,Y轴正方向背离你。

----Local Coordinate System--局部坐标系局部坐标系是与所选择对象具有特定关系的坐标系。

每个对象有它自己的局部中心和坐标系,这与定义的此对象枢轴点的位置和方向相同。

一个对象的局部中心和坐标系联合定义了它的物体空间。

对象的X,Y,Z轴的方向,Z轴依赖于对象的当前变换。

与世界坐标系比较。


你无意中旋转一个对象时你能够发现两个坐标系之间的不同,例如一个汽车模型的车轮,用世界坐标轴代替对象局部坐标轴。

车轮立即沿一个大的弧线飞出,因为旋转的
中心是在世界坐标的原点。

要正确旋转车轮,首先变换坐标系为局部坐标,使用工具条中的参考坐标系列表。

车轮绕它自己的中心旋转,那里是他局部坐标的原点。

----Pivot Point--枢轴点
变换中心,或称枢轴点,是发生旋转或发生比例变形的部位。

所有的物体具有一个枢轴点。

你可以想象枢轴点为一个对象的局部中心或局部坐标系的代表。

一个对象的枢轴点用于以下几个目的:
·当枢轴点变换中心被选择时,作为旋转和比例变换的中心。

·设置修改器中心的默认位置。

·定义所链接子物体的变换原点。

·定义IK结合的位置。

通过使用“Hierarchy”命令面板中的“Pivot”功能,你能够在任何时候显示和调节一个对象的枢轴点的位置和方向,调节一个对象的枢轴点不会影响任何与其链接的子物体。

相关文档
最新文档