본문으로 바로가기
반응형



Resource Export (1) : http://illu.tistory.com/1264

Unity Setting     (2) : http://illu.tistory.com/1269

Post Processing  (3) : http://illu.tistory.com/1272

Post Processing  (4) : http://illu.tistory.com/1274


마지막 Posting은 이제 작업한 리소스를 Android Phone이나 타블렛에 빌드해서 가지고 다니는 과정을 소개합니다.


우선 Platform을 바꿔줍니다.


File>>Build Settings을 선택하면 유니티가 지원하는 Platform List를 확인 할 수 있습니다. 여기서 안드로이드를 선택하고 왼쪽 아래에 Switch Platform을 선택합니다.


만약에 안드로이드 Build support가 설치되어 있지 않다면 다운로드 링크가 표시됩니다.



링크로 다운로드가 되지 않는다면 유니티 설치파일을 다시 실행시켜 봅니다.

링크 : https://unity3d.com/get-unity/download/archive?_ga=2.30452857.794041868.1518495890-1315281763.1509424170



똑같이 License 동의 버튼을 누르고 Next를 눌러 다음 화면으로 넘어가면


Components 선택화면에서 맨위의 Unity와 Mono등을 제외하고 아래의 각 플랫폼 Build Support만 설치하면 됩니다.

위 이미지의 안드로이드 Build Support size는 186M라고 뜹니다. 설치후에 Android로 플랫폼을 변경해주면 유니티 상단 메뉴가 아래와 같이 바뀝니다.



PC, Mac & Linux Standalone이 Android로 변경된 화면을 확인 할 수 있습니다.



Left : PC Platform, Right : Android Platform


이제 안드로이드 셋업을 위해 몇가지 추가 작업을 진행하게 됩니다.




Window/Lighting/Settings 항목을 열어서 나타나는 Lighting 메뉴에서 Realtime이 체크되어있으면 Environmet Reflection 항목에 체크된 리소스를 사용해서 환경 광원을 계산하게 되나(보통 Skybox) 임의로 설정해서 사용할 수 있습니다.




우선, 붉은 박스안의 체크를 해제합니다.



Hierarchy menu의 Light에서 Reflection Probe를 만들어 줍니다.




Custom으로 HDR 소스를 선택해서 사용할 수 도 있고 지금 Skybox를 Bake해서 사용할 수도 있습니다.




Box Size를 늘려서 노란 선 안에 오브젝트가 모두 포함되게 배치합니다.


이제 텍스쳐 압축 옵션을 바꾸어 줍니다.



안드로이드 기본 포맷인 ETC4bits로 압축된걸 확인할 수 있습니다. 텍스쳐 옵션 상단의 Override for Android 체크를 켜주고 Format을 RGB24bit로 알파가 있는 텍스쳐라면 RGBA32bit로 변경해 줍니다.


실제 모바일 개발에서는 이렇게 하면 텍스쳐 용량이 커져서 권장되지 않는 설정이나 데모용이므로 이렇게 합니다. 실제 빌드했을때의 느낌과 유사하게 확인하려면 ETC2 4bit 알파가 있는 텍스쳐는 ETC2 8bit 를 추천합니다.



이제 Hierarchy에 있는 오브젝트를 Project에 드래그 해서 prefab으로 만들어 줍니다. Prefab화 되면 해당 오브젝트 색상은 파란색으로 바뀌게 됩니다.



이제 Hierachy에서 UI >> Button을 만들어 화면에 배치해줍니다.


Canvas Layer가 생성되면 화면에 하얀 실선으로 UI Canvas 영역이 표시됩니다. 여기 Button 오브젝트를 옮겨서 화면에 배치해 아이콘으로 사용합니다.


화살표 이미지는 Button 오브젝트의 image component에 넣어줍니다. (이 이미지가 오브젝트 선택하는 역할을 합니다)


Canvas의 Canvas Scaler를 Scale with Screen Size로 변경합니다. 이러면 화면 크기가 달라져도 UI 스케일은 유지가 됩니다.




아래 Script를 프로젝트에 다운로드 받아 넣습니다.

ShowRoomController.cs

ShowRoomController.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ShowRoomController : MonoBehaviour
{

    [SerializeField]
    float rotSpeed = 200;
    [SerializeField]
    GameObject[] modelPrefabs;
    [SerializeField]
    Transform spawnPoint;

    public GameObject target;

    bool drag = false;
    int modelId = 0;

    void Start()

    {
        if( target == null)
            SpawnModel();
    }

//타겟이 없다면 SpawnModel에 입력한 Component위치를 기준으로 합니다.

    // Update is called once per frame


    void Update()
    {
        UpdateMouseDrag();
    }

    void UpdateMouseDrag()
    {
        if (Input.GetMouseButton(0) && target)
        {
            float rot = (float)Input.GetAxis("Mouse X") / (float)Screen.width;
            rot *= rotSpeed;
            target.transform.RotateAround(Vector3.up, -rot);
        }
    }


//다음 버튼을 눌렀을때의 동작
    public void NextModel()
    {
        modelId++;
        if (modelId >= modelPrefabs.Length)
            modelId = 0;
        SpawnModel();
    }

//이전 버튼을 눌렀을때의 동작
    public void PrevModel()
    {
        modelId--;
        if (modelId < 0)
            modelId = modelPrefabs.Length - 1;
        SpawnModel();
    }

    void SpawnModel()
    {
        Destroy(target);
        GameObject go = Instantiate(modelPrefabs[modelId]);
        go.transform.parent = spawnPoint;
        target = go;
    }

}



Hierarchy에 빈 컴포넌트를 하나 만들어서 좌표값을 (0, 0, 0)에 맞추어 줍니다.

이름을 ModelSpawnPoint라고 해줍니다(여기에 Prefab이 불려와서 화면에 나타나게 됩니다)


이제 해당 스크립트를 Main Camera에 붙여줍니다.

그리고 만들어둔 빈 오브젝트를 Spawn Point에 드래그 해줍니다.



이제 만들어둔 Button UI 를 클릭하면 아래 onClick( ) 항목이 보입니다. 오른쪽 아래의 + 아이콘을 눌러 버튼을 눌러 호출할 오브젝트를 선택합니다.(UnityEvent)

문서링크 : https://docs.unity3d.com/kr/current/Manual/UnityEvents.html


Main Camera를 선택하면 사용할 수 있는 리스트가 나타납니다. 그중 방금 붙인 ShowRoomController 스크립트를 클릭하면 PrevModel()을 선택해줍니다. 반대편 화살표는 뒤로 가기를 해야 하므로 NextModel()을 똑같이 셋팅해줍니다.



뷰포트에서 확인할 모델은 Prefab화 시켜서 스크립트에 드래그 해주면 차례대로 확인 할 수 있습니다.


이제 안드로이드 빌드를 위해 JDK와 Android Studio SDK를 설치해야 합니다.

자세한 내용은 다음 링크를 참고해주세요 : http://ozlael.tistory.com/78

삼성폰의 Android USB Driver Link : http://developer.samsung.com/galaxy/others/android-usb-driver-for-windows


최근에는 여러 이슈로 빌드가 안되는 경우가 있습니다. 빌드전 아래 항목을 참고해주세요.

빌드는 해당 Scene을 추가하여(Add open Scenes)  아래 Build button 을 선택하면 진행됩니다.




1. JDK는 9버젼은 빌드가 안되므로 8버젼을 설치해주세요.

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html




2. 최신폰에 빌드할 경우에는 Android SDK는 최신으로 유지시켜 주세요


Configure >> SDK Manager를 선택하면

설치된 안드로이드 버젼이 이렇게 표시됩니다. 권장은 5.0 이상버젼은 모두 설치해주세요


3. Linear Color Space의 경우에는 Edit/Project Settings/Player에서 Other Settings 항목에서 Android API Level을 조절해줘야 합니다.


- Auto Graphics API를 체크해제 합니다.

- OpenGLES2를 제거합니다

- 아래 Minimum API Level을 5.0 이상으로 셋팅합니다.

- Target API Level은 가능은 최상위 버젼으로 설정합니다.


4. 그렇게 해도 Build가 안되고 아래와 같은 메세지가 뜰 경우에는 아래와 같이 해줍니다.


C:\Users\<사용자이름>\AppData\Local\Android\Sdk로 이동
 – tools 폴더명을 tools_old로 변경
 – http://dl-ssl.google.com/android/repository/tools_r25.2.5-windows.zip 다운로드 및 압축해제
 – 압축해제한 tools 폴더를 C:\Users\<사용자이름>\AppData\Local\Android\Sdk에 복사


마지막으로

 - Index buffer가 32bit 일경우와 텍스쳐가 4K일 경우에 제대로 출력되지 않을수 있습니다.


본 포스팅에 추가로 터치 확대/축소 HDR소스 교체같은 스크립트를 추가할 예정입니다.



반응형