Для достижения этого эффекта:
Создайте два слоя сортировки : Земля и Объекты .
Пусть ваши спрайты дороги, травы и пути используют слой Ground.
Пусть ваш персонаж, стены и спрайты дома используют слой объектов.
Спрайты на вашем слое объектов захотят, чтобы их точка поворота в режиме спрайта была либо внизу слева, либо внизу, либо справа внизу. Вы можете выбрать это, выбрав «Спрайт» на вкладке «Проект», и выберите опорную точку на вкладке «Инспектор», чтобы настроить параметры импорта спрайта .
Для наземных спрайтов вам не придется беспокоиться об изменении их порядка.
Однако для объектов вы можете либо изменить порядок сортировки их 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.
Если вы присоедините этот скрипт к статическому объекту (например, к стене), вам нужно убрать галочку с компонента в Инспекторе, чтобы его Update
метод вызывался не в каждом кадре; его Awake
метод будет вызываться SetPosition
один раз, и это все, что вам нужно.
Но для вашего персонажа оставьте компонент отмеченным, чтобы Update
он вызывал SetPosition
каждый кадр, что изменит Z-порядок персонажа при перемещении. И по мере того, как вы двигаетесь, пока каждый спрайт на слое Objects использует нижнюю опорную точку, изменение Z-индекса при перемещении будет гарантировать, что ваш персонаж появится перед или позади других объектов соответствующим образом.
В зависимости от настроек вашей камеры, вам может потребоваться умножить новое положение Z на, -1
если все кажется обратным.
Если вы хотите изменить индекс Z при редактировании сцены, проверьте ExecuteInEditMode .
Awake
вместо. Спасибо