유니티 빌드 시

2020. 2. 3. 14:46기술/유니티 스터디

반응형

유티니 빌드 시 알아야 할 것들이 많이 있습니다.

 

 32bit / 64bit CPU 설정

 64bit 빌드를 하기 위해선 IL2CPP를 설정해야 합니다.

 Api는 함수의 수 때문에 2.0으로 하는게 좋다고 하는데 개발 도중 플러그인 추가 시(?) 에러 해결하다 보니 4.x으로 설정하게 되었습니다. 다시 2.0으로 내리고 테스트해보기에는 리스크가..;

 ARMv7 (32 bit) 예 LG G3 cat3 같은 폰

 ARM64 (64 bit) 예 화웨이 미디어 패드 M1

 

 32 bit와 64 bit CPU 모두를 지원하기 위해서 둘 다 체크합니다.

 

 Android App Bundle

 빌드 시 신경쓸 것도 많은데 이런건 그냥 좀 자동으로 설정되어 있으면 좋을거 같네요. apk 최적화 기술인거 같은데 체크 안해주고 빌드해서 구글 스토어에 업로드시 경고문구가 뜹니다. 그러므로 체크하고 빌드해야합니다.


 스토어 별로 빌드

 스토어 별로 빌드 시 패키지명이라든가 패스워드 코드의 스토어 타입 등 매번 설정해 주어야 하는 부분들이 있는데 메뉴에 추가해서 체크 설정해두면 편리합니다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
    private const string GoogleBuildMenuName = "Build/Target Google";
    private const string OneStoreBuildMenuName = "Build/Target OneStore";
 
    public static bool IsEnabledGoogleBuild
    {
        get { return EditorPrefs.GetBool("BuildGoogle"true); }
        set { EditorPrefs.SetBool("BuildGoogle", value); }
    }
 
    public static bool IsEnabledOnestoreBuild
    {
        get { return EditorPrefs.GetBool("BuildOnestore"true); }
        set { EditorPrefs.SetBool("BuildOnestore", value); }
    }
 
    [MenuItem(GoogleBuildMenuName)]
    public static void BuildGoogleToggle()
    {
        IsEnabledOnestoreBuild = false;
        IsEnabledGoogleBuild = !IsEnabledGoogleBuild;
    }
 
    [MenuItem(GoogleBuildMenuName, true81)]
    public static bool BuildGoogle()
    {
        PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.company.project");
        PlayerSettings.keystorePass = "#()*$&#HF";
        PlayerSettings.keyaliasPass = "#()*$&#HF";
        Menu.SetChecked(GoogleBuildMenuName, IsEnabledGoogleBuild);
        Menu.SetChecked(OneStoreBuildMenuName, IsEnabledOnestoreBuild);
 
        CGameManager.Instance.GetComponent<InAppPurchase>().StoreType = InAppPurchase.eStoreType.Google;
        return true;
    }
 
    [MenuItem(OneStoreBuildMenuName)]
    public static void BuildOnestoreToggle()
    {
        IsEnabledGoogleBuild = false;
        IsEnabledOnestoreBuild = !IsEnabledOnestoreBuild;
    }
 
    [MenuItem(OneStoreBuildMenuName, true82)]
    public static bool BuildOnestore()
    {
        PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.company.project.onestore");
        PlayerSettings.keystorePass = "#()*$&#HF";
        PlayerSettings.keyaliasPass = "#()*$&#HF";
        Menu.SetChecked(GoogleBuildMenuName, IsEnabledGoogleBuild);
        Menu.SetChecked(OneStoreBuildMenuName, IsEnabledOnestoreBuild);
 
        CGameManager.Instance.GetComponent<InAppPurchase>().StoreType = InAppPurchase.eStoreType.OneStore;
        return true;
    }
cs

텍스쳐 설정

 Android 빌드 후 iOS로 빌드를 할 때 텍스쳐가 모자이크 처럼 깨져서 나오는 경우가 있었습니다.

 

 텍스쳐는 개발 완료 시 모든 설정을 하기에 너무 복잡할 수 있으므로 유니티에 임포트 시 설정합니다.
레거시는 예전 스프라이트 패커 모드이고 최신인 아틀라스를 생성해서 사용합니다.
보통 스마트폰 게임을 개발할 때는 유니티 셋팅을 Android 또는 iOS로 두고 개발하기 때문에 Default와 PC 세팅은 중요하지 않습니다.
그러므로 텍스쳐 임포트 시 iOS, Android 셋팅을 모두 해 주는데
선명하지 않아도 되는 텍스쳐는 RGB(A) Compressed ASTC 6x6 block, Compressor Quality Best로 설정합니다.
캐릭터라든가 선명해야 하는 텍스쳐는 ASTC 4x4로 설정합니다.

 

텍스쳐 1 디폴트 : 512 KB
ASTC6x6 : 229.8 KB
---------------------------
282.2 KB 절약

텍스쳐 2 디폴트 : 716.8 KB
ASTC6x6 : 307.6 KB
---------------------------
416.2 KB 절약

 

 Android, iOS 빈 프로젝트 빌드 후 용량 확인하고 텍스쳐 포맷 설정을 각기 다르게 하여 테스트 해 본 결과 미세하게나마 용량 차이가 있었습니다. 텍스쳐가 많아질수록 용량 차이도 많이 날 것으로 예상합니다.

 

 Resouces 폴더에는 코드를 통해 로딩할 텍스쳐만 넣습니다. (스프라이트, 아틀라스 텍스쳐)

 

 텍스쳐 크기 설정에 대해서

 스팀 출시와 구글, 애플, 아이패드 출시를 염두해 둔다면 텍스쳐가 큰 해상도로 개발될 수 있습니다. 예를들어 실제로 길(Road) 재질 텍스쳐가 2048x2048일 경우가 있는데 스마트 기기에서는 512x512 정도로 압축해서 표현해도 충분하며 이럴경우 용량이 많이 줄어듭니다. 

Road 텍스쳐를 2048x2048 사용?


 최소한의 보안 프로가드 사용

 코드 난독화 제외해야 하는 패키지들을 선언해 줍니다.
 그렇지 않으면 빌드 후 특정 기능이 동작하지 않고 함수를 찾을 수 없다는 에러를 안드로이드 로그캣에서 확인할 수 있습니다.
 예) -keep class com.google.unity.** {*;} 


 릴리즈 빌드 시

 Development Build를 끕니다.

 Compression Method를 LZ4HC로 해주는 게 좋다고 합니다.


텍스쳐 압축 참조

 

ASTC : 가성비 좋은 텍스처 압축 포맷

ASTC(Adaptive Scalable Texture Compression) ASTC(Adaptive Scalable Texture Compression)는 ARM에서 개발하고 2012년에 크로노스 그룹에서 OpenGL ES에 표준으로 지정되었습니다. ASTC는 PVRTC나 ETC와 마찬가..

ozlael.tistory.com

유니티 빌드 시 팁 참조

 

유니티 (Unity) 2D 모바일 게임 최적화 팁 & 체크리스트 – I_Jemin

업데이트 2018/02/10 가독성 개선 2017/12/13 가독성 개선 2017/6/26 레퍼런스 추가 로깅/ GC, 필수 작업/ 퀄리티 세팅 추가 2017/5/26 유니티 5.6에 맞추어 갱신 레퍼런스 https://divillysausages.com/2016/01/21/performance-tips-for-unity-2d-mobile/ 유니티2D로 제작한 모바일 게임에서 60프레임을 안정적으로 지키고, 빌드 용량을 줄이기 위한 팁들입니다. 빌드전 마

ijemin.com

 

최근 aab 150mb 이상 못 올리는 이슈에 대해서

관련 정보 검색하다 보면 Unity Google Android App Bundle 빌드해주는 패키지가 있다.

유니티에서 App bundle로 빌드 시에는 안 올라가는데 위 패키지를 설치해주고 (com.google.android.appbundle-1.6.0.unitypackage

 

Releases · google/play-unity-plugins (github.com)

 

Releases · google/play-unity-plugins

The Google Play Plugins for Unity provide C# APIs for accessing various Play services - google/play-unity-plugins

github.com

Separate Base APK Assets에 체크해주고 그냥 250mb 나오면 통짜로 업로드 하자.

어차피 나누어서 install 때 다운로드 하나 한 번에 인스톨하나 에셋을 하나하나 관리해주지 않을거면 똑같다.

 

Asset bundle을 하나씩 관리해주려면 Scene이나 Prefab이나 Texture나 일일이 관리해 주면 되긴 하는데 한 사람에서 이것만 해도 될 정도로 많은양의 일이 된다. (추가되는 리소스에 대한 파악등등)

 

개발상황에 따라 Asset bundle을 따로 관리해주어야 한다.

 

 

 


 

반응형