외부 리소스를 가져다 쓰는 방법

2011. 5. 3. 08:44C# And Unity



외부 리소스를 가져다 쓰는 방법
- Resource Load

  - go.renderer.material.mainTexture = Resources.Load("glass", typeof(Texture2D));
  - GameObject instance = Instantiate(Resources.Load("enemy", typeof(GameObject)));

  * 주의 사항
    : 확장자가 있어선 안된다.
    : Resources 폴더내에 해당 리소스가 있어야 인식 가능하다.

- Asset Bundle :상용만 됨 (웹게임일경우 필수)
  :실시간 다운로드 이므로 추천함
  var www = WWW ("http://myserver/myBundle.unity3d");



Unity3D 예제를 보면 AssetBundle을 만드는 예제가 있는데 JavaScript 버전으로 짜여있고, 자세한 설명이 없기 때문에 내용을 한번에 이해하기 힘든 경우가 있다. AssetBundle에대한 이해를 돕고, 조금 더 쉽게 제작할 수 있도록 도움을 주고자 포스트를 작성한다.

 AssetBundle은 Unity3D에서 리소스를 효율적으로 사용하기 위해서 사용하는 리소스의 묶음이다. 안에는 텍스쳐(texture) 메시데이터(mesh), 메트리얼(material) 등 실제 게임에서 사용할 리소스들이 들어갈 수 있다. AssetBundle은 Unity Pro, 혹은 Unity iPhone Advanced 에서만 사용할 수 있다.

 Unity3D에서 AssetBundle을 많이 사용하는 가장 큰 이유는 로딩(다운로드) 용량을 줄이기 위해서이다. 특히 WebPlayer에서는 다운로드 용량을 줄이는건 절대적이다.

 쳅터 형식으로 구성되어있는 게임이 있다. 이 게임에 총 10개의 레벨이 있고 각각의 레벨은 1mb의 리소스들을 가진다고 가정하자. 사용자가 10개의 레벨이 모두 들어있는 파일을 다운받아서 플레이를 하는경우와, 각각의 레벨을 AssetBundle로 만들어놓고 사용자가 다음 레벨로 넘어갈 때 마다 AssetBundle을 다운로드를 받아서 로드하게 만드는 경우중 어느 것이 더 효율적일까?

 당연히 후자쪽이 될 것이다.

 사용자가 처음 게임을 시작해서 5개의 레벨을 진행했다고 가정하면, 전자의 경우는 사용자가 한번에 10개의 레벨 리소스를 모두 받아야 하므로 10mb를 한번에 받아야 한다.
 후자쪽은 1레벨을 할 때는 1레벨에 해당하는 리소스 1mb만 받고, 2레벨로 넘어갈 때 2레벨의 리소스에 해당하는 1mb만 추가로 받으면 된다. 이런식으로 사용자가 한번에 레벨 5까지 진행을 했을 경우 후자의 경우는 5mb만 다운로드 받게 된다. 전체적으로 받아야 하는 다운로드 용량이 전자에 비해서 크게 줄어들게 된다. 물론 모든 레벨을 한번에 진행하게 되면 다운받는 용량은 10mb로 비슷해질 것이다.

(후략..)

http://botta.tistory.com/38