文章目录
- 前言
- 一、排序图层
- 二、sorting Group的使用
- 三、树木排序设计
- 方法一 代码控制
- 方法二 拆分图片
- 方法三 透视排序
- 1. 普通物品排序
- 2. TileMap瓦片排序设计
- 完结
前言
unity的排序问题其实之前分享的项目多多少少都有提到一点,但是没有单独拿出来说,所以这次特地做一次整理
本文主要解决几个问题:
- 排序图层的作用?
- sorting Group排序组的使用?
- 树木排序问题,我们希望实现人物走到树前,人物遮挡树木,当人物走到树后,树又遮挡玩家
一、排序图层
排序图层应该是我们用的最多的,也是最简单的了
修改对应的排序图层或者图层顺序即可,图层顺序越大越靠前
二、sorting Group的使用
排序组通常用于解决一个物体由多个部分组合而成,比如多部位组成的角色,你可以简单的理解sorting Group就是把一个物品看作一个整体来排序,无论如何修改他的内部排序,都不会影响整体的sorting Group排序
比如在以下示例中,按照您希望角色的不同部分的出现顺序对这些部分进行排序。
配置排序组和排序图层之后,可以将角色另存为预制件,并根据需要进行多次克隆。
但是,预制件精灵全部具有相同的 Sorting Layer 和 Order in Layer 值,并且与其他预制件一起渲染到相同图层,这可能导致一个预制件角色的不同部分错误地相交和分层。
为了确保预制件的渲染顺序一致以便正确显示,请将 Sorting Group 组件添加到每个预制件的根游戏对象。并配置整体的Order in Layer排序
三、树木排序设计
我们希望实现人物走到树前,人物遮挡树木,当人物走到树后,树又遮挡玩家
如果我们直接修改图层排序方式肯定是不行的,玩家要么直接被遮挡,要么直接遮挡树木
方法一 代码控制
当然你可以通过代码的方式,动态的修改人物图层排序值
如果我们正常直接添加一些资源物体,会发现排序变得很乱
我们可以通过脚本来控制资源的排序,大致逻辑就是按物体的y轴来控制排序
using UnityEngine;
public class SpritePositionSortingOrder : MonoBehaviour
{
[SerializeField] private bool runOnce; // 是否只运行一次
[SerializeField] private float positionOffsetY; // Y轴位置偏移量
private SpriteRenderer spriteRenderer;
private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>(); // 获取当前对象的SpriteRenderer组件
}
private void LateUpdate()
{
float precisionMultiplier = 5f; // 精度乘数,可以根据需要调整
// 根据当前对象的位置和Y轴偏移量计算出sortingOrder值,并将其赋给SpriteRenderer组件的sortingOrder属性
spriteRenderer.sortingOrder = (int)(-(transform.position.y + positionOffsetY) * precisionMultiplier);
if (runOnce)
{
Destroy(this); // 如果设置了只运行一次,就在完成一次排序后销毁脚本组件
}
}
}
效果
显然这太麻烦了
方法二 拆分图片
最简单的方法就是将树叶和树根分开,树叶图层排序比人物高,树根图层排序比人物低,当然这样绘制会比较麻烦一些
效果
方法三 透视排序
使用透视排序。也就是“伪造”透视图。根据直觉,玩家希望角色在立方体前面时首先绘制角色,而角色在立方体后面时最后绘制角色。
如果用更技术性的语言来说,你需要做的是指示 Unity 根据游戏对象的 y 坐标来绘制游戏对象。屏幕上位置较低的游戏对象(y 坐标较小)应在屏幕上位置较高的游戏对象(y 坐标较大)之后绘制。这样将使位置较低的对象显示在上层。
要指示 Unity 根据游戏对象的 y 坐标来绘制游戏对象,请执行以下操作
选择 Edit > Project Settings。
在左侧类别菜单中,单击 Graphics
在 Camera Settings 中,找到 Transparency Sort Mode (透明度排序模式)字段。此字段决定了精灵的绘制顺序。使用下拉菜单将此设置从 Default 更改为 Custom Axis(自定义轴),修改Transparency Sort Axis(透明排序轴)为(0,1,0),告诉Unity y轴绘制精灵
1. 普通物品排序
找到树木的 Sprite Sort Point (Sprite 排序点)字段。目前,此字段设置为 Center,这意味着会使用精灵的中心点来决定这个游戏对象应该在另一个游戏对象的前面还是后面。将 Sprite Sort Point (Sprite 排序点)更改为 Pivot(轴心)
注意:记得树木图层排序顺序要和主角人物设置为一样
修改树木图片的轴心位置到树木根部
这样就实现了人物在树木轴心下面,先绘制树木,人物在轴心以上,先绘制角色
2. TileMap瓦片排序设计
在最右边的Tilemap Renderer:将Mode设置为Individual
把对应图片的轴心放在底部
为了使其更加准确,我们可以更改角色的轴心位置也在底部
并修改角色的精灵排序点为轴心
效果,可以看到,角色在栅栏上角色在后,角色在栅栏前角色在前
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。点赞越多,更新越快哦!当然,如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我可能也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~