버그 해결을 위한 모든 질문을 던져
0 votes
148 views

안녕하세요 unity 2018 3.5f1 버전을 사용하고 있으며 Isometric 쿼터뷰 2d게임을 개발하고있습니다.

캐릭터들은 3d모델들을 전부사용하며 나머지 오브젝트들은 전부 스프라이트이미지(2d) 통 이미지째로 사용하고있습니다.

(건물등등)   3d모델을사용하기에 Orthographic 카메라로 3d프로젝트로 만들었으며 사실상 다른것들은 z축 고정해서 2d게임으로만들고있습니다.

제 3d모델들은 전부 Skinned Mesh Renderer를 사용해서 그리고 있구 유니티 기본 툰쉐이더를 적용하고있습니다.

그런데 2d스프라이트와 3d모델들(Skinned Mesh Renderer)간의 z 순서 (누가 위에오고 누가밑에올것인지?) 여부를 지금은 z축좌표를 정렬해서 (z축좌표를 서로 다르게줘서) 구분하고있는데 이 방법이 관리도 힘드록 여러 3d오브젝트들이있을경우 z축을 서로 얼마만큼 다르게줘야할지 등의 골치아픈문제가있더라구요. (z축을 1씩만 다르게주면 모델도 높이가있으니 겹치겠죠)

그래서 출력순서를 정해주는 다른방법을 사용하고싶어서 찾아보니 sorting layer란것을 찾아냈습니다. 다만 여기서 또 문제인게 2d sprite renderer에는 이게있는데  3d오브젝트를 그리는 skinned mesh renderer에는 인스펙터상 이걸 설정하는칸이없어서 검색해서 아래의 코드 참조하여서 커스텀하게 인스펙터에 sorting layer 를 뜨게해놓았습니다. 

 

https://gist.github.com/nickgravelyn/7460288

 

다만 아무리 sorting layer나 order 같은걸 설정해도 동작을하지않더라구요.

같은 소트 레이어이며 order를 서로다르게줬더니 2d스프라이트와 2d스프라이트끼린 sort layer가 잘되는데 

2d오브젝트와 3d 오브젝트끼리는 서로 동작을 안하는것은 물론 3d 오브젝트 끼리도 서로 동작을안하고 여전히

z좌표의 영향만 받더군요...

(원래와 똑같이 z좌표상 카메라에 가까운게 위에 그려지더군요..메시들 각 sort order값은 브레이크포인트로확인해본상태입니다.)

심지어 스크립트상으로 해당 스킨드 메시렌더러 컴포넌트불러와서 직접 값 설정해줘도 동작을하지않더군요.

 

위의 링크는 그냥 mesh renderer 에 대해서 sort layer설정의 경우 다들 해결했다는 댓글이보이는거같은데...

혹시 skinned mesh renderer는 sort layer 가 작동하지않다던가 이런게있을까요....? 

(sortlayer나 sort order관련 필드나 프로퍼티가 있으니 당연히 동작할걸로 예상했습니다.)

만약이렇다면 이렇게 3d 오브젝트(스킨드 메시렌더러)와 2d 스프라이트간의 렌더링 우선순위는 정말 z좌표 가지고 하는수밖에없을까요...

asked (3 point) , 148 views

1 답변

+1 vote
SpriteRenderer에서 Default값으로 적용되는 Sprite-Default 쉐이더는 zwrite off ztest on로 되어있어

Depth 판정에 의해 폐기되지 않아 그리는 순서에 종속되어 보여집니다.

Z값과 관계없이 렌더 순서 만으로 앞, 뒤를 판단하고 싶다면 쉐이더에서 ZWrite를 off하세요
answered (8 point)
수정됨

답변해주셔서 감사합니다. 

제가 Skinned Mesh Renderer (정확히는 제 3d오브젝트는) 유니티 기본 ToonShader - Basic Outline 을 사용중이엇습니다.

 

 

말씀해주신대로 해당 쉐이더에서 ZWrite 부분을 찾아서 On 을 Off로 바꿔주었습니다.

다만 여전히 렌더 순서에는 영향을 주지않으며 ㅜㅜ 툰 쉐이더의 외곽선이 사라지더군요....ㅜㅜ

 

혹시 제가 한 방법이 맞을지요?

(추가적으로 만약 쉐이더 - standard 인경우는 어떻게 해야할지요... 3D및 쉐이더 관련에 무지하여 ㅜㅜ..죄송합니다..)

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

126 질문
221 answers
253 댓글
245 users