유니티로 어플 개발을 하다가
통 이미지를 로딩해야 할일이 생겼습니다.
보통 이런 이미지나 기타 파일들은
유니티 내부에 있는 클래스인
WWW
에 "file://" 을 붙여서
로딩 하는데..
이렇게 통 이미지를 로딩 했더니
로딩시간이 너무 오래 걸립니다.
그래서 로딩시간을 좀 줄이고
싶어서 찾아보던 중에
WWW 를 사용하지 않고
그냥 이미지 자체를
Byte Array
로 읽어오는 방법이
더 빠르다는걸 알게 되었죠.
간단히 테스트를 통해서
각각의 로딩시간을 측정해보면..
우선 WWW 를 사용한
이미지 로딩 입니다
IEnumerator loadImgFromWWW()
{
yield
return
fileRequest;
while
( !fileRequest.isDone )
{
yield
return
null
;
}
if
( fileRequest.bytes.Length > 0 )
{
}
fileRequest.Dispose ();
fileRequest =
null
;
}
그다음 Byte Array 를
사용한 이미지 로딩 입니다.
IEnumerator loadImgFromBytes()
{
Texture2D tex =
new
Texture2D ( 1, 1, TextureFormat.ARGB32,
false
);
byte
[] binaryImageData = System.IO.File.ReadAllBytes( 이미지 경로 );
while
( !tex.LoadImage(binaryImageData) )
{
yield
return
null
;
}
}
이렇게 하고 돌려서
시간을 체크해 보면
각각의 이미지 로딩에 걸린
시간을 체크 할 수 있습니다.
테스트로 원본 이미지 ( 640x640 ) 를
아이패드2 에 돌려 보았습니다.
먼저 WWW 로 로딩한 경우.
640x640 이미지 한장을
로딩할때 359 밀리세컨이 걸리네요.
그다음 Byte Array 로 로딩한 경우
이번에는 99 밀리세컨이
걸립니다.
그냥 대충 보기에도 엄청나게
차이가 나는걸 볼 수 있습니다.
( 대략 3-4배 정도 차이나네요. )
정확한 이유는 잘 모르겠지만..
아무래도 WWW 가 단순 로컬파일을
로딩할때도 네트워크 관련 기능을
사용하는 것 같네요.
이미지의 크기가 작거나
갯수가 적으면 WWW 를 쓰는게
더 좋겠지만..
이번 상황처럼 큰 이미지들을
동적으로 빠르게 로딩해야 할
경우에는 그냥 Byte Array 로
읽어와서 로딩하는 편이 훨씬
좋은 것 같습니다.
이상 Unity3D 에서 이미지 로딩
시간을 단축하는 방법 이었습니다.
반응형
'게임엔진(GameEngine) > Unity3D' 카테고리의 다른 글
Does DirectoryInfo GetFiles work on Android? => Don't but! (0) | 2017.10.11 |
---|---|
Reading file from StreamingAssets, Android(StreamingAssets ) (0) | 2017.10.10 |
Texture2D를 Sprite로 변경 <SpriteRenderer> (0) | 2017.10.09 |
ScriptableObject [시리얼라이즈] (0) | 2017.10.03 |
HideInInspector, SerializeField, FormerlySerializedAs , RequireComponent (0) | 2017.10.03 |