답변:
이 효과를 얻으려면
두 만들기 정렬 층 : 지상 및 개체 .
도로, 잔디 및 경로 스프라이트가지면 레이어를 사용하도록하십시오.
캐릭터, 벽 및 하우스 스프라이트가 오브젝트 레이어를 사용하도록하십시오.
오브젝트 레이어의 스프라이트는 스프라이트 모드 피벗 포인트가 왼쪽 아래, 아래쪽 또는 오른쪽 아래가되도록하려고합니다. 프로젝트 탭에서 스프라이트를 선택하여 선택하고 검사기 탭에서 피벗 포인트를 선택하여 스프라이트 가져 오기 설정 을 조정할 수 있습니다.
그라운드 스프라이트의 경우 순서 변경에 대해 걱정할 필요가 없습니다.
그러나 오브젝트의 경우 스프라이트 렌더러 의 정렬 순서를 변경하거나 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 순서가 변경됩니다. 그리고 이동하면서 오브젝트 레이어의 모든 스프라이트가 아래쪽 피벗 포인트를 사용하는 한 이동하면서 Z 인덱스를 변경하면 캐릭터가 다른 오브젝트의 앞이나 뒤에 적절하게 나타납니다.
카메라 설정에 따라 -1
뒤로 보이는 것처럼 새 Z 위치에 곱해야 할 수도 있습니다 .
장면을 편집하는 동안 Z 인덱스를 조정하려면 ExecuteInEditMode를 확인하십시오 .
Awake
대신 사용하도록 예제를 업데이트했습니다 . 감사합니다