게임 프로그래밍 (Game Programming)/유니티 (Unity)

Let's make a lottery machine!! Chapter 4. Android Build 로또 번호 추첨기 유니티 프로젝트 안드로이드 빌드 따라하기.

Ride a Code, Dine, and Rhyme 2023. 2. 24. 15:27

https://dnddkqja21.tistory.com/35

 

Let's make a lottery machine!! Chapter 3. build 유니티 프로젝트 빌드 어렵지 않아요!

https://dnddkqja21.tistory.com/34 Let's make a lottery machine!! Chapter 2. Make UI. 로또 번호 생성기 만들기 두 번째 챕터 UI만들기! 지난 시간에는 로또 번호 추첨하는 기능을 만들어보았습니다. (지난 글) https://dn

dnddkqja21.tistory.com

지난 시간에는 로또 번호 추첨기를 pc로 빌드하여 직접 실행해보는 시간을 가졌습니다.

이번에는 휴대폰 빌드! 그 중에서 안드로이드 빌드를 해보겠습니다.

이번에도 차근차근 따라오시면 어렵지 않습니다. 시작해볼까요!

 

 

유니티 허브에서 Installs 탭을 눌러주세요.

 

 

여기에 여러분이 설치한 유니티 에디터 버전들이 관리되고 있는데요.

저는 여러 버전의 프로젝트들을 관리하기 때문에 에디터 또한 여러 버전이 설치되어 있지만 여러분은 이용하시고

있는 유니티 버전이 여기에 나올 거예요.

 

 

톱니 모양의 설정 버튼을 눌러주세요.

 

 

첫 번째 메뉴인 Add modules를 눌러줍니다.

 

 

안드로이드 빌드를 하기위한 툴을 설치해줍니다.

저는 미리 설치를 하였기 때문에 위와 같이 Installed 상태이지만 여러분은 체크박스에 체크를 눌러 선택한 후

Continue 버튼을 눌러 설치를 진행해주세요!

 

설치가 다 되었다면 안드로이드에서 작동시키기 위한 스크립트 수정을 해야합니다.

여러분의 휴대폰에서는 스페이스바가 없기 때문에 스페이스바 대신 어떠한 입력을 주어야 합니다.

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Lotto : MonoBehaviour
{
    [SerializeField]
    List<int> numList = new List<int>();
    [SerializeField]
    int[] arr = new int[6];

    [Header("--- UI ---")]
    [SerializeField]
    Color[] colorList = new Color[5];
    [SerializeField]
    Image[] balls;
    [SerializeField]
    TextMeshProUGUI[] numbers;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            for (int i = 0; i < 45; i++)
            {
                numList.Add(i + 1);
            }

            for (int i = 0; i < arr.Length; i++)
            {
                int num = UnityEngine.Random.Range(0, numList.Count);
                arr[i] = numList[num];
                numList.RemoveAt(num);
            }

            Array.Sort(arr);

            for (int i = 0; i < arr.Length; i++)
            {
                Debug.Log(arr[i]);

                if (arr[i] >= 1 && arr[i] <= 10)
                {
                    balls[i].color = colorList[0];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 11 && arr[i] <= 20) 
                {
                    balls[i].color = colorList[1];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 21 && arr[i] <= 30)
                {
                    balls[i].color = colorList[2];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 31 && arr[i] <= 40)
                {
                    balls[i].color = colorList[3];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 41 && arr[i] <= 45)
                {
                    balls[i].color = colorList[4];
                    numbers[i].text = arr[i].ToString();
                }
            }

            numList.Clear();
            Array.Clear(arr, 0, 6);
        }
    }

    public void ExitApp()
    {
        Application.Quit();
    }
}

우리는 pc에서 새로운 로또 번호를 출력하는 입력 키로 스페이스바를 선택하였었습니다.

모바일에서는 손가락 터치로 입력을 받아볼게요.

 

if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))

 

작성된 코드의 뒤에 || Input.GetMouseButtonDown(0) 를 추가로 입력해줍시다.

||는 OR 연산자로 '또는'을 의미합니다. 위의 구문을 해석해보면 키보드의 스페이스바를 누르거나 또는

마우스 버튼을 눌렀을 때라고 해석할 수 있습니다. 마우스 클릭은 모바일에서는 손가락 터치로 혼용됩니다.

 

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class Lotto : MonoBehaviour
{
    [SerializeField]
    List<int> numList = new List<int>();
    [SerializeField]
    int[] arr = new int[6];

    [Header("--- UI ---")]
    [SerializeField]
    Color[] colorList = new Color[5];
    [SerializeField]
    Image[] balls;
    [SerializeField]
    TextMeshProUGUI[] numbers;

    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(0))
        {
            for (int i = 0; i < 45; i++)
            {
                numList.Add(i + 1);
            }

            for (int i = 0; i < arr.Length; i++)
            {
                int num = UnityEngine.Random.Range(0, numList.Count);
                arr[i] = numList[num];
                numList.RemoveAt(num);
            }

            Array.Sort(arr);

            for (int i = 0; i < arr.Length; i++)
            {
                Debug.Log(arr[i]);

                if (arr[i] >= 1 && arr[i] <= 10)
                {
                    balls[i].color = colorList[0];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 11 && arr[i] <= 20) 
                {
                    balls[i].color = colorList[1];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 21 && arr[i] <= 30)
                {
                    balls[i].color = colorList[2];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 31 && arr[i] <= 40)
                {
                    balls[i].color = colorList[3];
                    numbers[i].text = arr[i].ToString();
                }
                else if (arr[i] >= 41 && arr[i] <= 45)
                {
                    balls[i].color = colorList[4];
                    numbers[i].text = arr[i].ToString();
                }
            }

            numList.Clear();
            Array.Clear(arr, 0, 6);
        }
    }

    public void ExitApp()
    {
        Application.Quit();
    }
}

 

전체 코드를 보면 이와같습니다. 이제 본격적으로 빌드를 진행해봅시다!

 

 

Ctrl + Shift + B를 눌러서 빌드 세팅을 열어줍니다. 앞에서 안드로이드 빌드 관련 툴을 설치하였다면 여기서 Android를 선택합니다.

 

 

Switch Platform을 눌러 안드로이드 플랫폼으로 변경해줄게요.

 

 

위의 과정이 지나고 나면 안드로이드 플랫폼으로 변경은 되었지만 빌드를 할 수 없다는 경고 문구가 뜨게될 겁니다.

 

 

Player Setting으로 들어가 줍니다.

 

 

Player - Other 로 들어가보면 Rendering - Color Space 부분에 경고가 있는 것을 확인할 수 있습니다.

 

 

컬러 스페이스 중 Linear는 Graphics API를 OpenGLES3로 설정해야 합니다.

 

 

저도 구글링을 통해 얻은 정보입니다.  여러분들도 막히는 곳이 있다면 구글링을 해보세요.

이미 많은 선례로 부터 나온 정답이 공유되고 있을 겁니다.

 

 

OpenGLES2를 선택하고 - 버튼을 눌러 제외해줍니다.

 

 

 

경고차이 사라진 것을 볼 수 있습니다. 이제 플레이어 세팅을 닫아줍니다.

 

 

 

빌드 세팅을 다시 보면 경고 문구가 사라짐과 함께 빌드 버튼이 활성화된 것을 보실 수 있습니다.

 

 

빌드 버튼을 누르고 빌드를 할 폴더 경로와 이름을 결정한 후에 저장을 눌러 빌드합니다.

 

 

위와 같은 과정이 지나고 나면 지정했던 경로가 자동으로 열리고 빌드된 apk 파일을 확인할수 있습니다.

apk는 안드로이드 응용프로그램 패키지를 의미합니다.

 

 

Lotto.apk를 안드로이드 휴대폰으로 옮기시면 됩니다. 

pc에 케이블을 연결해서 옮겨도 괜찮고 메일 또는 sns등으로 업로드하여 받아도 괜찮습니다.

 

 

휴대폰의 내파일에서 Lotto.apk가 최근 파일로 보일 겁니다. 클릭해줍니다.

 

 

설치 버튼을 눌러 설치해줍니다.

 

 

우리가 만든 앱은 가볍기 때문에 수 초내에 설치가 될 겁니다.

열기 버튼을 눌러 실행해봅시다!

 

pc에서와 마찬가지로 유니티 스플래쉬 이미지가 뜨면서 앱이 실행되는군요.

 

휴대폰 새로 모드에서는 위와같이 보이네요.

화면에 터치를 하여 새로운 번호를 출력시켜보세요.

 

화면을 기울여 Landscape모드를 활성화 할 수도 있습니다.

원하는 번호를 모두 골랐다면 x버튼을 눌러 앱을 종료하시면 됩니다.

 

오늘도 간단하게 안드로이드 빌드를 하여 모바일에서 로또 번호를 추첨받아 보았습니다.

여러분의 친구나 동료에게도 파일을 공유해보세요^^!

 

로또 번호 추첨기 프로젝트는 이번을 마지막으로 마무리하겠습니다.

챕터4까지 잘 따라오시느라 수고많으셨습니다.

 

아마 응용력이 좋으신 분들은 저보다 더 보기좋은 앱을 만드셨을 겁니다.

여기까지의 과정을 숙지하셨다면 다른 앱도 만들어서 직접 빌드하실 수 있습니다.

 

다음에는 또 다른 재미있는 프로그램으로 찾아올게요^^!

오늘도 수고하셨습니다 :D