안녕하세요제작한 캐릭을 UI캔버스에 쪽에 넣는 방법 있을까요?게임은 3D게임인데 UI 팝업창에 2D케릭의 움직이는 일러를 넣으려고 합니다.안움직이는 스프라이트는 이미지에 넣고 사용했는데 이번에 에셋 구매해서 애니메이션 넣고 테스트해보려고 하니 UI쪽에 넣을수가 없네요...ㅎ사용할수있는 팁이 있을까요?
네 별도의 카메라를 추가하는 방식으로 구현했습니다.
안녕하세요.
저희가 게시물을 이제야 확인하여 매우 늦게 답변을 남기게 되었습니다.
너무 늦어 도움이 될지 모르겠습니다만 혹시나 하여 댓글을 남기겠습니다.
정말 죄송합니다.
유니티의 UI 캔버스는 UI 및 스프라이트를 대상으로 동작하기 때문에, 다른 3D 메시처럼 Mesh Renderer를 사용하는 AnyPortrait와 호환성이 좋은 편은 아니며, 제한적인 방법으로만 가능합니다.
즉, AnyPortrait를 UI 캔버스에 넣기 위해서는 "3D 메시를 UI 캔버스에 넣는 방식"을 이용해야합니다.
간단하게 UI 캔버스에서 렌더링을 하고자 한다면, 캔버스의 Render Mode를 변경해야합니다.
3D 메시를 캔버스에 넣기 위해서는 Render Mode가 "Screen Space - Overlay"가 아닌 "Screen Space - Camera"나 "World Space"여야 합니다.
해당 내용은 다음의 메뉴얼에서 확인하실 수 있습니다.
[ 유니티 2D 캔버스 이용하기 ]
: https://rainyrizzle.github.io/kr/AdvancedManual/AD_2DCanvas.html
다만 해결해야하는 또다른 문제가 있습니다.
캔버스 내에 속한 3D 메시들은 렌더링 순서를 제대로 컨트롤할 수 없다는 점입니다.
일반 씬에서 3D 메시들과 스프라이트 메시 들은 카메라로부터의 거리나 Sorting Order로 렌더링 순서를 변경할 수 있습니다.
하지만 캔버스 내에서는 이 규칙이 UI 객체나 스프라이트 메시에만 해당되며, 3D 메시는 이 규칙으로 렌더링 순서가 결정되지 않습니다.
따라서 렌더링 순서를 제어하기 위해서는 캔버스의 렌더링 객체인 "Canvas Renderer"를 참조하여 별도의 스크립트로 렌더링을 시도해야 합니다.
이는 간단한 정적인 메시들에는 제한적으로나마 유효한 방식이지만, AnyPortrait처럼 동적이고 다수인 인스턴스 메시에는 적합하지 않습니다.
결과적으로 AnyPortrait 캐릭터를 포함한 여러 3D 메시들을 캔버스에서 같이 렌더링하는 것은 권장되지 않습니다.
그래서 이 문제를 해결하는 다른 방법을 적용해야합니다.
그것은 3D 메시 및 캐릭터를 별도의 카메라로 미리 렌더링하는 방식입니다.
순서는 다음과 같습니다.
(1) 렌더링 순서 (Depth)가 가장 빠른 별도의 카메라를 추가하고, Render Target에 Render Texture를 입력하여, 렌더링 결과가 화면이 아닌 Render Texture에 저장하도록 설정합니다.
(2) 레이어 설정을 통해서 AnyPortrait 및 3D 메시가 해당 카메라로 렌더링하도록 만듭니다.
(3) 캔버스에 UI 요소 중 "Raw Image"를 추가한 후, 거기에 (1)에서 만든 Render Texture를 입력합니다.
(4) 결과적으로 Render Texture에 저장되는 3D 메시들의 렌더링 결과가 Raw Image에 적용되어 캔버스에 나타납니다.
여기서 중요한 것은 "AnyPortrait로 만든 캐릭터를 Render Texture에 렌더링한다는 점"입니다.
이 과정에서 해결해야하는 몇가지 이슈들이 있으며, 이에 대한 다음의 메뉴얼을 참고하시면 되겠습니다.
[ 렌더 텍스쳐로 렌더링하기 ]
: https://rainyrizzle.github.io/kr/AdvancedManual/AD_RenderTexture.html
[ 커맨드 버퍼 작성하기 (투명 배경의 렌더 텍스쳐 문제 해결 방법) ]
: https://rainyrizzle.github.io/kr/AdvancedManual/AD_CommandBuffer.html
문제가 해결되지 않는다면 댓글을 남겨주세요!
또한, 설명드린 Render Texture를 이용하고자 하여 도움이 필요하시다면 댓글을 남겨주세요.
자세히 안내해드리겠습니다.
감사합니다.
그리고 답변이 늦은 점에 대해 깊은 사과의 말씀을 다시 드립니다.