유니티로 어플 개발을 하다가

통 이미지를 로딩해야 할일이 생겼습니다.



보통 이런 이미지나 기타 파일들은

유니티 내부에 있는 클래스인
WWW
에 "file://" 을 붙여서
로딩 하는데..


이렇게 통 이미지를 로딩 했더니

로딩시간이 너무 오래 걸립니다.



그래서 로딩시간을 좀 줄이고
싶어서 찾아보던 중에
WWW 를 사용하지 않고

그냥 이미지 자체를
Byte Array
로 읽어오는 방법이
더 빠르다는걸 알게 되었죠.



간단히 테스트를 통해서
각각의 로딩시간을 측정해보면..


우선 WWW 를 사용한

이미지 로딩 입니다



IEnumerator loadImgFromWWW()
{
    WWW fileRequest = new WWW ( "file://" + 이미지 경로 );
    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 에서 이미지 로딩
시간을 단축하는 방법 이었습니다.



ref: http://lhh3520.tistory.com/307

반응형

+ Recent posts