블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2861)
Unity3D (899)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (192)
협업 (65)
3DS Max (3)
Game (12)
Utility (142)
Etc (99)
Link (34)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday


※ 본 문서는 NDC 2015 띵소프트의 이득규님의 강연을 바탕으로 정리한 문서입니다.


삼국지조조전 Online의 unity3D 아트 리소스 최적화 기법들 : 링크

Unity 성능개션옵션(출처불명인데 엄청 좋은내용) : 링크 

게임 개발 포에버 : http://www.gamedevforever.com/333 / http://www.gamedevforever.com/332


1. 외국 시장의 용량과 메모리 문제


- WIFI가 원활하게 사용 가능한 나라는 생각보다 많지 않다. 게임의 용량이 진입장벽이 될 수 있다.

- 일부 중국 퍼블리셔는 200MB 초과게임은 심사거부

- 저가 안드로이드 폰의 저장용량 160MB~4GB에 불과함. (2015년 기준 안드로이드 ONE)

- 실제 가용 메모리는 256MB~400MB 정도라고 보면 된다.


결론 : 중국시장을 노린다면 200MB이내, 메모리 400MB 이내로 해결하자.



2. 최적화 요소 점검


- 유니티로 빌드할때 생성된 로그파일에서 용량별 퍼센트를 볼 수 있다. (콘솔 화면에서 open Editor Log)

- 용량이 큰 파일부터 최적화요소를 점검하자



3. 폴더 필더링


- 유니티는 Assets 폴더 내의 폴더명으로 빌드에 반드시 포함할 것을 구분한다. 폴더의 네이밍이 특히 중요하다.


폴더명

 기능

 Resources

 - 여기에 들어있는 파일은 사용 여부와 무관하게 모두 빌드에 포함된다.

 Assets\

 Editor Default Resources

 - Resources와 유사하지만, 에디터에서만 접근 가능.

 - 편집엔 필요해도 빌드에 불필요한 아틀라스 원본텍스쳐나 에디터 리소스를 보관

 Gizmos

 - Gizmos.DrawIcon을 위한 아이콘과 텍스쳐 모음 폴더. 에디터 전용 폴더로 빌드 제외.

 .으로 시작하는 폴더

 - .으로 시작하는 폴더는 무시

 Editor

 - Unity Editor Scription API만 접근할 수 있는 폴더. 

 - UnityEditor 네임 스페이스를 사용하는 스크립트는 이 폴더에 있어야 함.

 - 빌드에 포함되지 않고 에디터 상에서만 동작

 - 동명의 폴더가 여기저기 있어도 모두 동일하게 동작

 Standard Assets

 - 이 폴더 하위의 스크립트는 최우선 컴파일 

 Plugins

 - Native 플러그인은 이 폴더에 있어야 함

 - 이 폴더의 파일은 모두 빌드에 포함

 - 이 폴더 내의 스크립트는 먼저 컴파일




4. 텍스쳐 최적화


[ size ]

- 모바일에서 최대 사이즈는 4K를 지원하지만, 저가 안드로이드는 2K 까지 지원한다. 언제나 2K를 유지하자!

- 축소 시 원본 훼손이 안되도록 항상 2배 수로 축소

- 소스 자체는 언제나 크게만들고 유니티 자체로 크기를 축소하면 된다! 이 방법이면 고사양 버전 제작시 재작업 불필요


[ Alpha ]

- 알파를 쓰느니 폴리곤 갯수를 늘리는게 훨씬 좋다.

- ETC1 등을 사용할 경우 아티펙트로 경계 노이즈가 발생


[ Atlas ] 

- 호출 빈도 등에 따라서 쓸모없는 메모리를 들고 있어야 하는 경우가 있다.


#. 유니티 Quality Setting에서 메모리상 텍스쳐 해상도를 전체 1/2로 하는 기능도 있다. 이를 기기 성능에 맞춰서 원활한 플레이를 하는 방법!



5. 소스 최적화


[ POT ]

- 가능한 모든 텍스쳐를 POT 규격으로 제작. POT가 불가능한 리소스는 텍스쳐 아틀라스로 패킹.

- NPOT 리소스는 압축 텍스쳐가 불가능하다 = 용량 증가


[ Alpha ]

- ETC1은 alpha가 없는 텍스쳐 포멧이다. 알파가 존재할경우 유니티는 RGBA16으로 변환한다.

- ETC1을 두 장 사용해서 alpha문제를 해결 (로딩빠르고, 용량적고, 메모리도 적게먹는다!)

- 하지만 쉐이더/로딩 코드를 수정해야 된다. 드로우 콜 증가. (직접 쉐이더 코드를 수정하지 못하면 사용 못함!)



6. 텍스쳐 포멧(유형)


[ 어떤 포멧으로 import 할까? ]

- 유니티 엔진은 어떤 텍스쳐라도 넣을 수 있고, 어떤 텍스쳐포멧을 넣던 유니티에서 한번 더 변환한다.

- PNG 압축사이트에서 압축해서 쓰세요! 이러는건 PNG를 유니티 변환하지않고 우회해서 사용할 때의 얘기다.

- 어차피 압축을 다시 하기때문에 무조건 가장 품질 좋은 것을 넣으면 된다! (프로젝트파일 용량걱정만 없다면!)


[ Format 설정 ]

- Format 쪽에 가보면 Compressed, 16 bits, Truecolor 3가지가 있다. 이 외의 것을 하면 안돌아가는 기기가 있다!

- 만약 사용자 앱이지원되지않는 텍스쳐압축을 사용할 경우 그 텍스쳐는 RGBA32무압축(엄청난용량!)으로 메모리손실


설정 값 

설명 

 Compressed 

 기본 설정 값. 압축효과 가성비 높음. 알파가 있을 때는 차라리 알파없는 텍스쳐 한장을 더 쓴다.

 16Bit

 압축하지 않고 색상만 줄어든다. TA가 없다면 사용하지 말 것.

 TrueColor

 압축을 전혀 하지않음. UI에만 사용해야한다. 알파가 있다면 어쩔 수 없는 선택.


[ 세부 Format 설정]

- 알파 필요없는데 PNG등으로 들여오면 RGBA로 임포트가 되버린다.

- 아 물론 알파채널을 스펙큘러등으로 쓰는경우 (Toony Pro의 스펙큘러 등)은 그냥 RGBA로 써야된다!

- Texture가 아니라 Advanced를 선택하면 세부 설정을 지정할 수 있다.


종류

 사용해야하는 포멧

 POT전용 - 직사각형O 

 RGB Compressed ETC 4 bits

 POT전용 - 직사각형O

 RGB Compressed PVRTC 2 bits 

 RGBA Compressed PVRTC 2 bits 

 RGB Compressed PVRTC 4 bits 

 RGBA Compressed PVRTC 4 bits 

 NPOT

 RGB 16 bit

 RGB 24 bit

 RGBA 16 bit

 RGBA 32 bit 



   

- Texture가 아니라 Advanced로 선택한 뒤, RGB Compressed ETC 4 bits를 선택하자. ( 무려 2배차이 ! )

- Quality는 100으로 하면 약간의 딜레이가 발생하지만 더 품질이 손상없어짐!


[ 결론 ]

- 알파가 없다면 일단 Compressed를 사용하자!

- 알파가 존재하는 UI라면 TrueColor를, 그 외의 것이라면 차라리 알파 없는 것을 하나 더 써서 마스킹을 하시길.



7. UGUI 최적화


[ Draw Call ]

- 유니티 UI의 드로우 콜은 캔버스 단위로 이루어진다. 

- 하나의 캔버스 하위에 쓰이는 이미지들이 Sprite Packing이 되어있다면, 모두 하나의 드로우콜로 처리가 가능하다.

- 동적으로 반응하는 버튼이나 Fill Image를 처리할 때 매번 갱신비용이 발생하기 때문에, UI요소들을 하나의 Canvas에 몰아넣는 것만이 좋은 것이 아니다.


[ Text ]

- 텍스트는 Font 종류당 하나씩 드로우 콜이 발생한다.




8. FBX 최적화


[ Model ]


       


- Mesh Compression은 기본적으로 꺼져있는 상태지만, 모양이 뭉개지지 않는 범위내에서 최대값을 선택한다.

  (왼쪽이 OFF, 오른쪽이 High 상태인데... 사실 뭔가 인지못할정도로! 바뀐다)

- Materials의 Import Material은 체크해제한다.


[ Animations ]

- 애니메이션이 포함되어 있지 않다면 체크해제한다.




9. 사운드 최적화


- 사운드는 디폴드 값으로 3D 스테레오 사운드로 설정되는데, 사실 모바일 게임에서는 스테레오는 의미없음.

- Force to Mono를 체크함

- Load Type은 메모리에 영향을 주는데 사운드 유형에 따라서 설정한다.


 유형

사용처 

 Decompress on load

 짧은 효과음

 Compressed in memory

 성우 대사 정도의 음성 

 Stream

 계속 플레이되는 긴 배경음악 






[출처] http://mentum.tistory.com/55

반응형
Posted by blueasa
, |

OS : Win7 x64

Version : Unity5 5.4.0


[에러메시지]

OdbcException: ERROR [IM002] [Microsoft][ODBC 드라이버 관리자] 데이터 원본 이름이 없고 기본 드라이버를 지정하지 않았습니다.


유니티4에서 잘 사용하던 odbc가 유니티5에서 실행하니 위와 같은 에러를 뱉어서 확인해보니 64bit용 재배포 패키지를 깔라고 한다.


[재배포 패키지 다운로드]

https://www.microsoft.com/ko-KR/download/details.aspx?id=13255

(링크에서 64bit용 재배포 패키지를 깔아 주면 된다.)


[참조]

I had the same issue and this Q&A was very helpful to narrow down my problem.
On a Windows 7 64 bit machine with Unity 64 bit, the Unity's Mono System.Data.Odbc class relies on the odbc32.dll that is located in Windows\System32 and not the one in Windows\SysWOW64. I found out the driver wasn't listed in the odbcad32.exe administration tool located in Windows\System32.
Installing the 64 bit version of Microsoft Access Database Engine 2010 Redistributable solved my issues as I now have the correct 64 bit driver listed in the odbcad32.exe application.
The drivers can be downloaded from here: https://www.microsoft.com/en-us/download/details.aspx?id=13255
The driver name in all the connection strings in the code must be updated with the new driver's name (that can be seen with the odbc administration tool).
I am now using Unity 5.3 64 bit and connecting successfully to the data source, in my case a dbf file.
I am sure this doesn't cover all the error IM002 cases but if you have this issue, this is one thing you want to exclude anyway.



[참조출처]

http://forum.unity3d.com/threads/odbc-connections-impossible-with-unity5.342846/

반응형
Posted by blueasa
, |



[링크] https://www.assetstore.unity3d.com/kr/#!/content/35295



Unity's audio system is powerful, but on Android that power sometimes comes at a cost: latency! If you're finding a delay between when you expect a sound and when you hear it, Android Native Audio (ANA) can help.

반응형

'Unity3D > Plugins' 카테고리의 다른 글

[펌] Excel 읽기 (unity XLS importer maker)  (0) 2016.11.03
[Link] Simple Disk Utils  (0) 2016.09.19
[링크] Low-latency_Sound_for_UnityAndroid  (0) 2016.08.18
[펌] TexturePacker  (0) 2016.05.10
[펌] GPGS  (1) 2016.03.08
Posted by blueasa
, |





Low-latency_Sound_for_UnityAndroid

Unity5アプリ上で低遅延な音を再生するAndroid向けアセットです。

以下のフォーラムの内容をベースにして作成されています。
http://forum.unity3d.com/threads/android-sound-latency-fix.319943/

使い方についてはこちら。
http://tsubakit1.hateblo.jp/entry/2015/05/19/011835

반응형

'Unity3D > Plugins' 카테고리의 다른 글

[Link] Simple Disk Utils  (0) 2016.09.19
[링크] [유료] Android Native Audio(Android Latency 관련)  (0) 2016.08.18
[펌] TexturePacker  (0) 2016.05.10
[펌] GPGS  (1) 2016.03.08
[펌] AWS Cognito + Unity3d  (0) 2016.02.14
Posted by blueasa
, |

UnityAds에는 보상형광고와 일반형광고 두가지가 있습니다.

일반형과 보상형의 차이는 스킵버튼이 활성화되어 사용자가 광고를 스킵할수 있는지 없는지의 차이 입니다.

일반형으로 설정시(아무런 설정하지 않으면 일반형이 기본값입니다) 사용자는 5초후 광고 스킵 버튼이 활성화 되어5초후 부터 광고를 스킵할수 있습니다.
(5초 이외에 원하는 시간으로 설정 가능)

하지만 보상형으로 설정시 스킵버튼이 나오지 않아 사용자는 무조건 광고를 끝까지 보아야 합니다.사용자가 무조건 광고를 끝까지 보게 되므로 수익을 얻을 가능성이 좀 더 높일 수 있습니다.

따라서 보상형 광고로 설정하는 것을 추천 드립니다.

게임을 추가하여 게임ID가 생성되면, 하기와 같이, 해당 게임ID에 기본적으로 일반형광고 ID와 보상형 광고 ID가 2가지가 추가되어 있습니다.
(PictureZone은 현재 지원하지 않는 기능입니다)

스크린샷 2015-07-21 오후 1.28.27

이 아이디를 사용하여 보상형 광고로 설정할 수 있습니다.

보상형 비디오로 설정하는 방법 가이드 입니다.

1. Code examples for Unity Ads package

Show 의 Parameter로 zoneid를 주면 됩니다.

Advertisement.Show(“rewardedVideoZone”);

만약 일반형광고를 원한다면, 다음과 같이 zoneid를 설정하지 않거나 null을 넘기면 일반형 광고로 설정됩니다.

Advertisement.Show();

2. Code examples for native iOS

IOS NATIVE SDK로 할때는, A) 항상 기본형을 사용하거나 B) 항상 show를 보여주기 전에 setZone(“”)을 합니다.

if ([[UnityAds sharedInstance] canShow]) {   
               [[UnityAds sharedInstance] setZone:@”rewardedVideoZone”];
        [[UnityAds sharedInstance] show:….];

}

3. Code examples for Android

Andorid NATIVE SDK로 할때는, A) 항상 기본형을 사용하거나 B) 항상 show를 보여주기 전에 setZone(“”)을 합니다.

if(UnityAds.canShow()){   
   UnityAds.setZone(“rewardedVideoZone”);   
   UnityAds.show(options); 
}

만약 광고를 보여주는 곳 마다 ad placement id를 다르게 설정하여 광고별로 성과를 알고 싶다면,하기와 같이 ad placement id를 생성한 후 사용하면됩니다.
unityads.unity3d.com/admin 페이지의에서   게임 > 게임 선택 > 수익화 설정> 고급설정 광고 게재 위치 옆 +새 광고 게재 위치 추가 버튼 클릭

+새광고 위치 추가 버튼을 클릭하면 다음화면이 나옵니다.

스크린샷 2015-07-21 오전 10.07.54

보상형 광고로 선택합니다.
보상형 광고로 선택하게 되면 사용자가 광고를 스킵할 수 없습니다. 혹시 추가적으로 원하시는 옵션이 있으시면 선택후 저장하시면 됩니다.

저장 후 다음과 같이 추가된 것을 확인 할 수 있습니다.

rewardedvideozone

그리고 개발하시는 게임의 코드상에서 해당 ZONE ID를 사용하시면 됩니다
즉 위의 캡쳐화면의 예제에서는 “199981428975268” 를 사용하시면 됩니다.

Advertisement.Show(“199981428975268″);

또한 참고로, 현재 인터넷 익스플로러에서 추가된 zone id 목록이 보이지 않는 경우가 있습니다.
따라서 zoneid를 추가하였는데도 목록에서 보이지 않는 경우, 크롬으로 확인해주세요.



[출처] http://www.unityads.co.kr/?p=1285

반응형

'Unity3D > Ad' 카테고리의 다른 글

[링크] [Unity3D] Google AdMob 연동하기  (0) 2018.01.08
Unity에서 ADID・IDFA 얻기  (0) 2017.11.28
[Unity] Vungle Plugin 설치  (0) 2016.07.26
[Unity] Google AdMob Plugin 설치하기  (0) 2016.07.26
Unity Ads 연동  (0) 2016.07.26
Posted by blueasa
, |


[링크] http://shimans.tistory.com/28


[유니티에셋스토어] https://www.assetstore.unity3d.com/kr/#!/content/27591


[홈페이지] https://tinypng.com/

반응형
Posted by blueasa
, |

출처: http://beatup.springnote.com/pages/3277191


BPM : beat per min 의 준말.  즉 분당 비트수로써 1분당 1/4박자의 갯수이다.

- 1분당 BPM별 비트 갯수

 BPM1/4 박자1/8박자 1/16박자 1/32박자 
 60 BPM 60 개 120 개 240 개 480 개
 100 BPM 100 개 200 개 400 개 800 개
 130 BPM 130 개 260 개 520 개 1040 개
 155 BPM 155 개 310 개 620 개 1240 개


즉, 우리가 만들 게임은 1/32박자 (이하 32비트) 게임이므로
155bpm시 1분당 최대 1240개의 노트가 들어간다.



이제 노트 하나당 간격을 알아보도록 하자.

60bpm에서 4비트는 1초마다 1비트가 올라가므로 최대 60개가 나온다.
그럼 1/8박자는 0.5초마다, 16박자는 0.25초마다, 32박자는 0.125초마다 1비트가 오른다.

130bpm의 32비트는 최대 1040개이므로 비트 하나당 간격을 알아보자.
소수점자리까지 사용하므로 총 8자리까지 쓰고 이하는 반올림을 기준으로 한다.

130 / 60 = 2.16666667
0.125 / 2.1666 = 0.05769230

 


노트는 0.05869230초마다 나오며 이 값이 맞는지 최대 비트인 1040개와 계산을 해보자

 0.05769230 * 1040 = 59.999992


얼추 60이 맞는것을 알수 있다.
더 낮은 자리까지 계산을 하면 정확해지며 이게 정확하지 않다면 음악이 재생시간이
길어질수록 비트는 조금씩 밀리거나 당겨지는 현상이 있을수가 있으므로 주의하기 바란다.


이 문제를 해결하려면 10초마다 실행하는 타이머를 주어 다음 10초간의 비트의 위치를
부분적으로 계산하면 될듯싶다.

60bpm시 부분 계산 방식

 플레이시간읽는 비트 
 0:00 0 - 80 
 0:10 80 - 160
 0:20 160 - 240
 0:30 240 - 320
 0:40 320 - 400
 0:50 400 - 480



화살표(노트) 이동 속도의 구현
60bpm은 매우 느린 속도이다.
120bpm은 60bpm의 2배의 속도이다.
180bpm은 60bpm의 3배의 속도이다. 

 bpm 픽셀당이동속도 
 1 bpm 1 초
 60 bpm 0.00166667 초
 120 bpm 0.00083333 초
 180 bpm 0.00055556 초


픽셀은 구현이 어떤식으로 되는지 모르기에 예를 든것이다.
구현 방법에 따라 적절히 하도록 바람.




 



여기까지 bpm 계산 방법을 알아 보았다.
이제 배속의 구현을 알아보도록 하자.

먼저 bpm 공식에 의거하여 노트는 기본적인 이동속도를 가진다.
이것은 1배속이 된다.

60 bpm이 0.00166667 초에 1픽셀을 이동하는데
만약 2배속일경우엔 0.00083333 초에 1픽셀을 이동한다.

그러나 배속은 비트에 대해 절대 영향을 끼치지 않으며 단순히 이동속도만을 제어한다.



[출처] http://smilejsu.tistory.com/380

반응형
Posted by blueasa
, |


[링크] http://evir.tistory.com/entry/Unity-Vungle-Plugin-%EC%84%A4%EC%B9%98

반응형
Posted by blueasa
, |


[링크] 

http://evir.tistory.com/entry/Unity-Google-Play-Game-Service-%EC%97%B0%EB%8F%99%EC%8B%9C%ED%82%A4%EA%B8%B0

반응형

'Unity3D > Link' 카테고리의 다른 글

[링크] 캐릭터/애니메이션 판매 사이트(유니티 사용 가능)  (0) 2020.06.18
[Asset] 2D Outline  (0) 2018.05.21
[Link] RhythmTool  (0) 2016.06.21
[Link] Visualizer Studio  (0) 2016.06.21
[Link] Unity 3 Audio Spectrum Analysis  (0) 2016.06.21
Posted by blueasa
, |


[링크] http://evir.tistory.com/entry/Unity-Google-AdMob-Plugin-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

반응형
Posted by blueasa
, |