如上图,Unity在制作2D游戏有时可能会有需要考虑角色交互重叠的情况,而不同Gameobject的order in layer我们一般是在inspector里给定的。所以为了处理这种情况,我们可以通过代码实现方法并在update里实现:
protected void LinkYwithOrderinlayer()
{
//chartransform为角色的transform组件
float yPos = chartransform.position.y;
//spriterenderer为角色的Sprite Renderer组件
//通过改变sortingorder来确定gameobject在sortinglayer中的order in layer
//因为y轴越大层级越靠后,所以给结果前加一个负数
//scale用来扩大y轴数据映射在层级上的影响,根据游戏中实际使用的素材尺度来确定,取100 1000都可以
spriterenderer.sortingOrder = -Mathf.RoundToInt(yPos * scale);
}