前言:游戏开发中用到的坐标是多种多样的,作为客户端同学这是绕不开的硬技能。
在这里是不是unity倒不重要,重要的是能把这些系统地印到脑子里。
1,世界坐标(绝对坐标)
世界坐标在unity中是最通用的坐标,我们都知道unity中每个游戏对象都具有一个Transform,其实每个Transform中都包含position这个属性,也就是世界坐标。世界坐标是能把各个坐标系下的物体统一起来的一个坐标。
2,相对坐标
一般可以粗略认为相对坐标是一个物体相对于其父物体的坐标。但其实更准确的讲,相对坐标是一个物体的中心点相对于父物体的中心点的坐标。在transform组件中可以通过localPosition来访问。
理论上你可以通过相对坐标和树关系得到任何世界坐标,也可以通过绝对坐标求出任何相对坐标。那为什么还要有相对坐标呢?当然一方面上述求法的复杂度是O (log n);另一方面,localPosition有助于实现对上层游戏对象的封装,也就是说在一个相对坐标系下的游戏对象可以不用管上面父亲节点和叔叔阿姨爷爷奶奶节点做了什么(XD)
3,uv坐标
假如我们把一般的三维坐标系叫做xyz坐标系,那么纹理坐标系对应uv坐标系没错了。u和v的作用域和值域都是 [ 0, 1 ]。对应着一张纹理贴图的左右边缘和上下边缘。uv坐标是纹理贴图映射到模型、画布上的一一对应的桥梁。
此外,unity中还有个东西叫RawImage,用于显示纹理贴图,其中有个属性叫uvRect。 其中的(x, y)是指画布的左下角点对应的贴图的uv值,(w,h)是指画布的右上角点对应贴图的uv值,利用这个可以很方便且高效地控制只显示一部分的贴图。
4,屏幕坐标