본문 바로가기

Unity/Unity 스파르타

16주차 - 오브젝트 프리뷰 텍스쳐로 저장해버리기

728x90

1. 인게임 커스텀 에디터에 사용되는 설치 가능한 오브젝트를 UI에 보여줄때 리소스 파일에있는 오브젝트의 AssetPreview를 사용해 텍스쳐로 가져와 스프라이트로 전환해 UI에 넣어줬는데, 빌드 후에는 AssetPreview를 사용할 수 없어서 UI에 제대로 이미지가 적용되지 않는 문제가 있었습니다.

 

오브젝트들의  Sprite 가 파츠처럼 나눠져있어 오브젝트들을 아이콘으로 사용하기위해 따로 아이콘을 만들어야 하나? 너무 번거로움에 다른 방법이 없을까 하고 고민하다가, 

AssetPreview로 Texture2D 로 가져온걸 그냥 리소스 폴더에 저장하면 안되나? 하는 생각에 여러 시도를 해본결과 

AssetPreview로 가져온 텍스쳐를 .EncodeToPNG() 함수를 사용해 텍스쳐를 png 파일로 변환해 바이트 배열로 저장한다음 File.WirteAllBytes 로 bytes 변수에 저장된 png이미지 데이터를 특정 경로에 저장해주면 AssetPreview로 가져온 텍스쳐를 리소스폴더에 저장할 수 있습니다 .

위 방법을 기존에 만들어 놓은 오브젝트 툴에 버튼을 만들어 오브젝트들을 일일이 아이콘을 만들 필요없이 한번에 스프라이트를 생성하게 만들었습니다.

 

 void GeneratorObjPreviewSprite()
    {
        foreach(GameObject obj in objLists)
        {
            if (!FileExists(saveSpritePath, obj.name + ".png"))
            {
                Texture2D texture = AssetPreview.GetAssetPreview(obj);
                byte[] bytes = texture.EncodeToPNG();
                File.WriteAllBytes($"{saveSpritePath}/{obj.name}.png", bytes);
                AssetDatabase.Refresh();
            }
            
        }

    }

 

 

728x90