Unity-오브젝트의 Z 레이어 순서


11

제목이 내 질문과 정확히 일치하지 않으면 제목을 설명하는 방법을 모르겠습니다.

도시 바닥에 대한 이미지와 플레이어가 뒤에 숨을 때 플레이어가 숨겨져 있어야하는 모든 벽 또는 나무에 대한 이미지 (동일한 크기)가 있습니다. 내 결과는 그렇게 나쁘지 않습니다.

문제는 플레이어가 벽의 앞쪽을 걷는 경우 벽의 레이어 순서가 플레이어의 순서보다 높기 때문에 사라진다는 것입니다.

여기에 이미지 설명을 입력하십시오

이것을 고치는 간단한 방법이 있습니까? 아니면 모든 객체를 수동으로 추가하고 스크립트에 연결해야합니까?

답변:


17

이 효과를 얻으려면

두 만들기 정렬 층 : 지상개체 .

도로, 잔디 및 경로 스프라이트가지면 레이어를 사용하도록하십시오.

캐릭터, 벽 및 하우스 스프라이트가 오브젝트 레이어를 사용하도록하십시오.

오브젝트 레이어의 스프라이트는 스프라이트 모드 피벗 포인트가 왼쪽 아래, 아래쪽 또는 오른쪽 아래가되도록하려고합니다. 프로젝트 탭에서 스프라이트를 선택하여 선택하고 검사기 탭에서 피벗 포인트를 선택하여 스프라이트 가져 오기 설정 을 조정할 있습니다.

스프라이트 가져 오기 설정

그라운드 스프라이트의 경우 순서 변경에 대해 걱정할 필요가 없습니다.

그러나 오브젝트의 경우 스프라이트 렌더러 의 정렬 순서를 변경하거나 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를 확인하십시오 .


구성 요소가 선택 해제되어 있으면 Start ()도 실행되지 않습니다. Awake ()는 비활성 구성 요소에서 실행되지만 시작은 실행되지 않습니다.
Uri Popov

방금 확인했습니다. 당신은 맞습니다. Awake대신 사용하도록 예제를 업데이트했습니다 . 감사합니다
Chris McFarland 8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.