[Unity] Y-Sorting

Learning 

When: 1학년 8월 17일

 

How:

게임에서 맵을 찍게 되었는데 맵을 찍던 중 돌은 높이가 좀 있어서 밟을 수 없고 뒤로 가면 플레이어가 가려져야 하는데 어떻게 구현하지 생각하며 검색을 해보았는데 오브젝트의 Y 값에 따라 Order in Layer가 달라지게 하면 된다는 것을 알았습니다.

 

Understanding:

  • 정의 : Y-Sorting은 Y값에 따라 Sorting Layer도 바꾸는 기법입니다.
    만약 플레이어가 나무보다 아래에 있고 나무와 겹쳐 있다면 플레이어는 나무에 가려져선 안되고,
    플레이어가 나무보다 위에 있고 나무와 겹친다면 플레이어가 가려져야 합니다.
    그리고 이 기준은 누가 더 앞에 있는가로 정해집니다. 그런데 2D 게임을 만들 때 앞에 있다는 것은
    Y 값이 낮다는 것이기 때문에 Y값에 -1을 곱하면 앞에 있을 수록 높아지는 변수를 만들 수 있습니다.
    그 변수를 Sorting Layer에 대입하기만 하면 앞에 있을 때는 Sorting Layer가 높고,
    뒤에 있을 때는 Sorting Layer가 낮아져 앞의 스프라이트에 가려지는 기능을 아주 쉽게 구현할 수 있습니다.
  • 코드 : 최적화 하진 않았지만 Sorting Layer는 int 형식이기 때문에 100을 곱하고 Mathf.RoundToInt
    메서드를 사용하여 1.126 라는 값을 113으로 최대한 값을 자세히 설정할 수 있도록 하였습니다.
using UnityEngine;

public class YSort : MonoBehaviour
{
    private SpriteRenderer _spriteRen;

    void Awake()
    {
        _spriteRen = GetComponent<SpriteRenderer>();
    }

    private void Start()
    {
        _spriteRen.sortingOrder = Mathf.RoundToInt(100 * -transform.position.y);
    }

    private void Update()
    {
        _spriteRen.sortingOrder = Mathf.RoundToInt(100 * -transform.position.y);
    }
}

 

Result: 처음에는 감도 안잡혔는데 검색해서 Y값과 Sorting Layer에 대해 조금이라도 본 순간
이걸 왜 떠올리지 못했는지 아쉬웠습니다. 어려울 줄 알았는데 알고 보니 정말 쉬웠던
개념을 프로그래밍하면서 많이 배웠던 것 같습니다.

'UnityEngine' 카테고리의 다른 글

[Unity] DOTween Seqence  (3) 2025.08.21
[Unity] Unity 이벤트 메서드  (5) 2025.08.18
[Unity] 블랜드 트리(Blend Tree)  (3) 2025.08.16
[Unity] DOTween  (1) 2025.08.14
[Unity] ~캐스트(~cast)  (0) 2025.07.21