在Unity2D中,与渲染顺序相关的主要设置及其优先级排序如下:
所以在Unity2D中,Sorting Layer和Order in Layer的组合优先级最高,其次是Z Position和Camera Settings,然后是Renderer Components和Sorting Groups,最后是Transform Position的细微影响。开发者可以根据这个优先级顺序合理安排渲染顺序。
Unity2D开发的时候我们可以设置排序的层级
在渲染的对象上都有设置层级的属性
我们发现除了Sorting Layer
,还有Order in Layer
文字的配置在
这两者都有一个渲染的数值,数值越小的越先渲染
在同一z轴上的,渲染越靠后,视觉显示的就是在上层。 也就是说值越大,越在上层。
而Z Position直接是渲染在不同的层上。
Z Position的值越小就越在上层。
这给人的感觉这两者正好的是反的。
这就得从坐标系和相机讲起了。
Unity的坐标系是左手坐标系
这样Z轴的正值是朝里的,所以相机在正前方,所以Z值一定是负值。
在Unity中,相机的z坐标值为-10是一个默认值和约定俗成的设置。 主要原因有以下几点:
所以综合起来,z=-10是一个对大多数游戏场景都适用的经验值,成为Unity中相机的默认z坐标。
开发者可以根据实际需要调整此值。
在Unity2D中,z轴表示物体的层次关系和绘制顺序,而不代表真实的3D空间中的z轴高度。 Unity2D中的碰撞检测是基于物体的2D碰撞体(Collider2D组件)进行的。
只要两个碰撞体在2D平面上产生重叠,就会发生碰撞,与z轴顺序无关。 例如:
即使A在视觉上绘制在B的下层,但只要它们的碰撞体在2D投影中发生重叠,仍然会触发OnCollisionEnter2D等碰撞回调函数。 所以在Unity2D环境中,物体的z轴顺序不会影响它们之间的碰撞检测和处理。
只要碰撞体在2D空间发生重叠,就会碰撞,与z轴无关。
另外需要注意的是,如果两个物体的碰撞体在2D上没有重叠,即使调整它们的z轴顺序也不会产生碰撞。
碰撞检测依然仅基于2D碰撞体的形状进行。
Sorting Layer
、Order in Layer
、Z Position
都决定了Unity2D渲染元素的前后。
这里建议不要都修改,这样会让游戏很混乱。
建议
只使用
Sorting Layer
来决定前后,后期不合适的时候直接拖动设置的前后就能方便的变更了。
当然在自己简单测试的时候可以让Sorting Layer
都保持默认,只修改Order in Layer
就可以方便测试了。