Answers:
要达到此效果:
创建两个排序层:Ground和Objects。
让道路,草地和路径精灵使用“地面”图层。
让您的角色,墙壁和房屋精灵使用“对象”层。
“对象”层上的精灵将要使其“精灵模式”枢轴点为左下,右下或右下。您可以通过在“项目”选项卡中选择一个“精灵”来选择它,然后在“检查器”选项卡中选择枢轴点以调整精灵的导入设置。
对于地面精灵,您不必担心更改其顺序。
但是,对于对象,可以更改其Sprite Renderer的排序顺序,也可以更改其transform.position.z
值。我建议更改转换,因为在移动角色时可能更易于查看和调整浮点数,而在某些情况下更改排序顺序可能看起来不太精确,具体取决于对象的尺寸和大小在现场。
无论哪种情况,都将需要一些代码。
public class SpritePositionSetter : MonoBehaviour {
void Awake () {
SetPosition();
}
void Update () {
SetPosition();
}
void SetPosition () {
// If you want to change the transform, use this
Vector3 newPosition = transform.position;
newPosition.z = transform.position.y;
transform.position = newPosition;
// Or if you want to change the SpriteRenderer's sorting order, use this
GetComponent<SpriteRenderer>().sortingOrder = (int)transform.position.y;
}
}
无论采用哪种方式,您基本上都是在告诉精灵其Z索引与其Y位置匹配。
如果将此脚本附加到静态对象(例如墙),则需要取消勾选Inspector中的组件,以使它的Update
方法不会在每一帧都被调用。它的Awake
方法将调用SetPosition
一次,这就是您所需要的。
但是对于您的角色,请保持选中该组件的位置,以便Update
将调用SetPosition
每个帧,这将在您四处移动时更改角色的Z顺序。并且在移动时,只要“对象”层上的每个子图形都使用“底部”枢轴点,则在移动时更改Z索引将确保您的角色适当地出现在其他对象的前面或后面。
根据您的相机设置,您可能需要将新的Z位置乘以 -1
如果情况看起来倒退则。
如果要在编辑场景时调整Z索引,请签出ExecuteInEditMode。
Awake
代替使用。谢谢