블로그 이미지
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
2015. 7. 22. 15:53 Unity3D


이하 아래 내용은 해당 출처에서 수정없이 그대로 퍼온 내용이다.



각 플랫폼별로 Application 클래스의 프로퍼티들이 지정하는 경로와 엑세스에 대해 정리해보았습니다.
테스트한 기기에 따라 결과가 다를 수 있는데, 미진한 부분들은 댓글 남겨주시면 감사하겠습니다.

[윈도우 에디터]
Application.persistentDataPath : 사용자디렉토리/AppData/LocalLow/회사이름/프로덕트이름
파일 읽기 쓰기 가능
Application.dataPath : 프로젝트디렉토리/Assets
Application.streamingAssetsPath : 프로젝트디렉토리/Assets/StreamingAssets
파일 읽기 쓰기 가능


[윈도우 응용프로그램]
Application.persistentDataPath : 사용자디렉토리/AppData/LocalLow/회사이름/프로덕트이름
파일 읽기 쓰기 가능
Application.dataPath : 실행파일/실행파일_Data
Application.streamingAssetsPath : 실행파일/실행파일_Data/StreamingAssets
파일 읽기 쓰기 가능

[맥 에디터]
Application.persistentDataPath : 사용자디렉토리/Library/Caches/unity.회사이름.프로덕트이름
파일 읽기 쓰기 가능
Application.dataPath : 프로젝트디렉토리/Assets
Application.streamingAssetsPath : 프로젝트디렉토리/Assets/StreamingAssets
파일 읽기 쓰기 가능

[맥 응용프로그램]
Application.persistentDataPath : 사용자디렉토리/Library/Caches/unity.회사이름.프로덕트이름
파일 읽기 쓰기 가능
Application.dataPath : 실행파일.app/Contents
Application.streamingAssetsPath : 실행파일.app/Contents/Data/StreamingAssets
파일 읽기 쓰기 가능

[웹 플랫폼]
웹에서는 명시적인 파일 쓰기 불가능. 애셋번들로 해야함
Application.persistentDataPath : /
Application.dataPath : unity3d파일이 있는 폴더
Application.streamingAssetsPath : 값 없음.

[안드로이드 External]
Application.persistentDataPath : /mnt/sdcard/Android/data/번들이름/files
파일 읽기 쓰기 가능
Application.dataPath : /data/app/번들이름-번호.apk
Application.streamingAssetsPath : jar:file:///data/app/번들이름.apk!/assets 
파일이 아닌 WWW로 읽기 가능

[안드로이드 Internal] 
Application.persistentDataPath : /data/data/번들이름/files/
파일 읽기 쓰기 가능
Application.dataPath : /data/app/번들이름-번호.apk
Application.streamingAssetsPath : jar:file:///data/app/번들이름.apk!/assets
파일이 아닌 WWW로 읽기 가능

[iOS]
Application.persistentDataPath : /var/mobile/Applications/프로그램ID/Documents 
파일 읽기 쓰기 가능
Application.dataPath : /var/mobile/Applications/프로그램ID/앱이름.app/Data
Application.streamingAssetsPath : /var/mobile/Applications/프로그램ID/앱이름.app/Data/Raw 
파일 읽기 가능, 쓰기 불가능


posted by ChocoTart
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. 12. 25. 13:39 Unity3D



처음 이 에러를 만나게 된건 개인 프로젝트 때 이다 한창 Unity로 게임을 만들다가 

발표 준비를 위해 exe 파일을 만들라고하면 


이러한 에러가 발생하곤 했다 


'An asset is marked as dont save, but is included in the build:


UnityEditor.HostView:OnGUI()'





사진의 글자가 잘 안보이는대 클릭하면 잘 보일 것 이다. 

아마도..?



의외로 문제 해결법은 간단하다 


하지만 이 문제 해결법에 대해 한글로는 제대로 나와 있지 않아서 ( 구글링 결과 전부다 영어, 한글로 나온 질문은 하나인대 그 에 대한 답변도 명확치 않았음 ) 

또한 필자가 까먹을 것도 같아서 이렇게 포스트를 하게 됐다.


해결법은 하나 

폰트!


필자는 NGUI 에서 label 을 쓸때 거기에 쓰이는 폰트로  Dynamic 폰트중 Arial 이 아닌 다른 폰트 

예를들어  Lucida grande 같은 폰트를 쓴상태에서 exe 파일을 생성하려고 하면 이러한 에러가 뜬다.


따라서 모든 폰트를  Arial을 쓰던가 ( Arial을 제외한 다른 Dynamic 폰트에서 문제가 발생하는지는 확인 하지 않음) 그게 싫다면  Bitmap Font를 사용하여 자신이 원하는 폰트를 사용하는것도 좋다 


그럼 끝!


-꼭 이러한 error가 Font 때문에 발생하는지는 모른다 

필자는 이러한 Error가 발생하였고 이러한 방법으로 해결이 됐다 

이방법으로도 해결이 안되는 다른 문제로 같은 Error 가 났을수도 있다.

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