블로그 이미지
ChocoTart

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
  • total
  • today
  • yesterday

'유니티'에 해당되는 글 2건

  1. 2014.11.15 NGUI Atlas Assetbundle 만들기 및 로드 하기 1
  2. 2013.11.26 Unity 안드로이드 폰 디버깅
2014. 11. 15. 16:18 Unity3D



약 2~3 주 전 빌드를 하다 보니 apk 파일 용량이 50MB 가 넘어가는 상황이 벌어졌다....

(google 정책상 50 MB가 넘어가면 안된다고 한다 )

느낌표


당장 내일이 업데이트라 급한대로 부랴부랴 별로 티 가 나지 않는 아이콘 이미지들의 크기를 줄여서


빌드를 해서 간신히 50MB 이하로 줄이긴 했지만


앞으로 추가적인 콘텐츠에 의해 이미지 들이 추가 될 시에 같은 문제가 발생할거 같기에 


대처방안이 필요했다.


대부분의 리소스 파일들은 CDN 서버에서 다운 받아 사용하는 방식을 쓰고 있으니

제일 큰 용량을 차지하는 Atlas 파일들 또한 CDN 서버에서 다운 받아 로드 하는 방식으로 변경하면

될거 같기에 구글링을 시작 하였다. 


찾아 보니 의외로 간단 하였다


Unity Pro 에서는 assetbundle 파일을 만들기 및 로드하기가 된다고 한다 (Unity Basic 버전에서는 안된다고 한다 실제 테스트 는 해보진 않았다 ) 


1.스크립트 작성 (AssetBundle Create)



Atlas 가 있는 프로젝트 내부에 위와 같은 스크립트를 넣기만 하면 

유니티 상단의 메뉴 바에  Export 라는 항목이 생길것이다 



2. AssetBundle 생성하기 


그 다음은 프로젝트 뷰에 있는 아틀라스를 선택후 상단의 새로만든 Export메뉴를 눌러서

저장할 위치를 정하고 저장을 누르면 AssetBundle 이 생성된다

이때 중요한건 Atlas는 3가지로 구성되어 있따 GameObject(Prefab), Material, Texture 로 이루어져있는대

AssetBundle을 만드는건 GameObject만 선택한 상태로 만들면된다. 

또한 각각 GameObject , Material, Textture 의 이름은 달라야 한다 . 


예를들어 Atlas_Test_go, Atlas_Text_mat, Atlas_Test_tex, 이런식으로 이름을 다르게 해야 한다 이름이 같으면 잘안된다는대 이는 직접해보진 않고 처음부터 따로 이름을 바꾼뒤 어셋번들을 생성하였기에 이것은 궁금 하신분은 직접 해보도록..


또한 GameObject가 아닌 Material 이나, Texture로만 Assetbundle을 뽑아서 로드 하려고하면 실제 궁극적으로 필요한 Ngui의 UIAtlas 라는 객체가 없어서 필요한 Sprite에 Atlas를 세팅할수 없다.


GameObject 만 AssetBundle 을 생성하여도 AssetBundle 을 뽑는 함수의 옵션 때문인지 하위의 정보들도 같이 합쳐져서 만들어 지는 거 같다. 실제로 해당 파일을 로드할때 디버깅을 하면서 보니 로드된 목록에 Texture 와 Material이 포함되어 있었다.



3. Atlas 를 로드 해보자.





당연 하지만 위 소스 중에 _resourcepath 는 실제 AssetBundle 파일이 있는 장소여야 한다. 해당 경로에서 해당 확장자를 가진 ( 확장자를 .dp로 하였기에 해당 확장자를 긁어 모았다 ) 

읽어 들인뒤 로드하였다 이떄 ab.Load() 함수를 사용하였는대 AllLoad()를 사용하게 되면 해당 파일의 어떤 것들이 담겨져 있는지 보이는대 이를 디버깅으로 까보면 확실히 기억은 안나지만 5~6개의 파일들이 담겨져 있던걸로 기억한다.


하지만 우리가 필요한건 Atlas GameObject 이기에 typeof(GameObject)로 골라내어 로드한후 해당 Gameobjcet 의 UIAtlas  객체를 뽑아내어 Atlas 목록에 넣고 있다. 


4. Load  한 Atlas 적용하기.




이제 우리가 마지막으로 원하는건 로드한 Atlas 를 써먹는거다 .

위와 같은 간단한 소스를 만들어서 Sprite 에 넣어주면 해당 Sprite 가 Awake 될때 

에디터상의 세팅된 AtlasKind에 따라 자기 자신의 Atlas 를  세팅하고 Sprite 이미지 까지 

지정된 이름으로 세팅한다.



 - 잡소리


이러한 Atlas 를 외부에서 로드해서 사용하는 것들은 이미지들이 더 추가될 가능성이 낮고 

또한 실제 이런 이미지들을 사용하는 것들이 런타임 도중 동적으로 이미지가 바뀔 가능성이 

낮은 것들을 위주로 하였기에 ( 또한 아틀라스가 로딩 되기전에 보여지는 이미지가 아닌 것들 )

Awake 함수에서 한번 로드된 아틀라스 로 자기 자신의 아틀라스와 이미지를 세팅하고

끝내는 방식으로 하였다


당연히 아틀라스를 로드 하기전에 보여져야 되는 이미지들은 이런식으로 하면안된다

(로고라던지, 로딩 화면이라던지)


또한 이미지가 런타임 도중 계속 바뀌어야 하는 것들 인벤창의 아이템 이라 던지...

이런 것들은 이미지가 추가될 가능성도 높고 이미지들이 바뀌거나 세팅 되거나 하기전에 가장먼저

Atlas가 세팅되어야 하므로 ( 아틀라스가 세팅되기전의 해당 Sprite의 이미지를 바꾸거나 한다면...

Error가 나던가..? 아마 안나긴 할거다 하지만 아무런 이미지도 보이지 않을거다 ) 

신경써야 되는 부분이 더 생길거 같기도 하고 아이템아이콘 같은경우 사용하는 부분이 너무 많아 그런 여러곳을 전부다 찾아가며 테스트 해보기 귀찮아서 


간단하고 바뀔일 없고 이미지는 커서 용량을 많이 차지하는 것들 로 해당 작업을 하였다.


위의 소스들을 그대로 쓴다면 아마 안될거다(Export스크립트 제외 ) 

그러니 안되는건 레퍼런스를 참조해보도록.... 





posted by ChocoTart
2013. 11. 26. 18:50 Unity3D

* 목적 

- 작업한 APK 파일을 안드로이드 폰에 설치하여 디버깅 내용을 이클립스를 이용하여 확인하기


1. 사전작업

1) adt-bundle-windows-x86-20130917 다운로드 상위 디스크에 저장

2) java sdk 설치 6버전 설치 (jdk-6u45-windows-i586)

  3) java virtual machine 설치 (chromeinstall-7u45 )

4) adt_bundle 안에 있는 SDK Manager.exe 파일을 실행하여 안드로이드 버전을 설치 해준다 17, 16,             10 버전 정도만 깔아줘도 대부분의 안드로이드 폰이 사용가능하다 필요에 따라 추가로 설치해줘도             된다.


5) 환경 변수 설정

시스템 환경변수 , 계정 환경 변수 ( 제어판에 있다 ) 아래에 있는 path 항목을 누르고 편집을 눌러

adt_bundle 안에 sdk폴더-> platform-tools까지의 경로를 추가해준다 

( 필자으이 경우 이러한 절대 경로가 나온다F:\adt-bundle-windows-x86-20130917\adt-bundle-windows-x86-20130917\sdk\platform-tools ) 

현재 있는 내용 끝에 세미 콜론을 붙이고 추가로 경로를 넣어주고 확인을 눌러주면된다 

시스템, 계정 둘다 똑같이 세팅해준다.


6)  콘솔 창에서 실행 되는지 확인을 위해 adb 라고 쳐보자 여러 내용이 많이 뜰것이다

혹시 나 모를 사항을 위해 cd.. 명령어로 최상위로 올라가서 실행하자

(adb 실행후 화면.)

2. APK파일 생성 


 전에 작업했던 스마트폰 Touch 기능 Test 프로젝트로 실험해 보려고한다.

왼쪽에 있는 버튼을 누를때마다 현재 모드가 Debug 메시지로 나오게 된다.


3. 스마트폰 연결

1 ) 핸드폰의 개발자 옵션에서 usb 디버깅 모드 체크, 모의 위치 허용 체크 해준다 ( 필자는 갤럭시s2 의 폰으로 설정한것이다)


2) 핸드폰을 컴퓨터에 연결한후 eclipse를 실행한다 

우측 상단에 차트에 + 모양을 클릭하고 DDMS 선택후 확인을 누른다.

(해당 사진의 가운데 쯤에 있는 버튼이다.)

연결이 제대로 됐다면 아래와 같은 화면이 나온다. 좌측에 보면 기기 모델번호가 나오고 Online이라는 표시가 뜬다.





4. 디버깅 확인


1 ) Unity 에서 Build & Run 으로 (alt , shift , b) 로 APK 생성과 설치를 같이 해준다 .

당연히 빌드 플랫폼은 안드로이드로 해준다 .


2) 콘솔 창에서 adb logcat -s Unity 를 타이핑해준다.

( 대소문자 밑 띄어쓰기 맞게 해준다)


이렇게 할시 Debug.log 내용이 해당 콘솔창에 출력된다 

즉 안드로이드 기기의 실질적인 프로그램 실행시의 내용을 확인 할수 있다.


출력되는 내용을 확인해보면 PINCH 가 Debug메시지 인 touch Mode 이고 그 밑에는 디버그 메시지에 대한 정보들이 쓰여진다.

현재화면은 내용이 스트링으로 출력되고 

TouchTest Scripts 에서 OnGUI() 함수에서 실행됨을 알수 있다.



3) 이클립스 안에서도 어플 실행에 대한 내용들을 확인 할수 있는대 여기에 뜨는 메시지는 핸드폰 전반에 대한 내용들이 다뜨기에

위 입력창에 Unity 라고 쓰면 Unity 관련된 메시지 로그만 떠서 확인 할수 있다.


posted by ChocoTart