유니티에서는 UI는 물론 플레이어의 상태에 따라 게임의 전반적인 상태를 관리하는 게임 매니저를 만들어야 합니다.

게임 매니저의 역할은 다음과 같습니다.

 

 - 점수 저장

 - 게임오버 상태 표현

 - 게임오버 되었을때 게임오버 UI 활성화

 - 플레이어의 사망을 감지해 게임오버 처리 실행

 - 점수에 따라 점수 UI 텍스트 갱신

 

 

싱글턴 패턴의 필요성

 

게임매니저처럼 관리자 역할을 하는 오브젝트(예를 들면 파일 매니저,몬스터 매니저,점수매니저등)는 일반적으로 프로그램에 단 하나만 존재해야 합니다.(단일 오브젝트) 그리고 언제 어디서든 즉시 접근 가능해야 합니다.

 

우리가 만들 게임 매니저 또한 이 두 가지 조건을 만족해야 합니다.

 

 

단일 오브젝트

 

점수를 관리하는 점수 매니저가 두 개라고 가정해봅시다. 이 경우 최고 점수도 두 개가 될 수 있습니다. 비논리적입니다.

또 다른 예로 파일에 접근하고 수정하는 파일 매니저가 두 개 있다고 가정해봅시다. 이 경우 두 파일 매니저가 동시에 하나의 파일에 접근하고 수정하면서 에러가 날 수 있습니다. 따라서 파일 매니저는 프로그램에 하나만 있는 것이 좋습니다.

이와 같은 이유로 점수와 UI, 게임상태를 관리하는 게임 매니저 또한 게임에 단 하나만 존재해야 합니다.

 

 

손쉬운 접근

 

매니저라고 불리는 오브젝트들은 보통 프로그램의 특정 영역이 아니라 어느 곳에서도 사용할 수 있는 편의 기능을 제공합니다. 따라서 매니저 오브젝트는 코드 어느 곳에서도 쉽게 접근하여 사용할 수 있도록 구현합니다.

 

우리가 구현할 게임 매니저는 게임오버 상태와 점수를 관리합니다. 게임오버 상태와 점수는 게임의 거의 모든 부분에서 사용됩니다. 따라서 어떤 스크립트에서도 씬에 있는 게임 매니저에 쉽게 접근할 수 있어야 합니다.

 

 

싱글턴을 사용하는 이유

 

정리하면 게임매니저는 아래 두 조건을 만족해야 합니다.

 

 - 어떤 곳에서도 손쉽게 게임 매니저 오브젝트에 접근 가능

 - 게임 매니저 오브젝트는 단 하나만 존재

 

이런 조건에서는 주로 싱글턴이라는 디자인 패턴을 사용합니다.

 

싱글턴 패턴은 '어떤 오브젝트가 프로그램에 단 하나만 존재해야 하며, 어느 곳에서도 쉽게 접근 가능해야 할 때' 사용됩니다. 싱글턴 패턴을 사용하면 게임 매니저가 씬에 단 하나만 있게 하고, 어느 곳에서도 게임 매니저에 즉시 접근할 수 있게 만들 수 있습니다. 

 

유니티로 다른 사람들이 만든 게임들을 만지다 보면 2017년도 이전에 만든 소스들을 종종 보게 됩니다.

그러면 게임은 너무 잘 만들어져 있는데 컴파일하고 출시하려고 보면 64bit 지원이 안되어서 낭패를 보게 되는 경험을 하게 됩니다.

 

구글플레이 정책상 2019년 8월 1일부터 플레이스토어에 올라가는 모든 어플들은 64비트를 지원하게 하였습니다.

 

이에 따라 유니티 빌드 셋팅도 바꾸어야 했습니다.

아래 화면은 Unity 2017.1.5f1 에디터 화면입니다.

 

Device Filter 부분에 ARMv7+x86으로 팝업메뉴에도 ARM64은 아예 없습니다.

 

유니티에서 64bit를 지원하는 ARM64을 포함하는 버전은 Unity 2017.4.18f1 부터입니다.

아래 화면은 Unity 2017.4.18f1 에디터의 셋팅 화면입니다.

 

 

ARM64이 포함되어 있는것을 볼 수 있습니다. 

ARM64를 포함해서 빌드를 해야하고 Scripting Backend는 IL2CPP로 선택해야 합니다.

 

이렇게 ARM64를 체크해서 빌드가 잘 끝나면 다행인데요.

그럼에도 불구하고 곳곳에서 에러를 뿜어낼 것입니다.

IL2CPP로 컴파일하게 되면 우선 JDK,NDK,SDK 인클루드에 관한 에러가 날 것입니다.

 

그러면 Edit->Preferences->External Tools로 가서 

 

 

각자 PC에 맞는 경로를 맞춰주면 됩니다.

NDK관련 경고 에러가 난다면 유니티 허브에서 NDK관련 모듈을 설치해 주시면 됩니다.

 

 

이제 64bit는 다 작업이 끝났을것으로 생각할 수 있습니다. apk 파일을 만들고 구글 플레이 콘솔에서 등록을 하는 순간

콘솔에서 에러를 보실 수도 있습니다.

 

이런 경우에는 대부분이 Android App Bundle 게시 형식이 아닌 apk 형식의 파일을 올렸을 경우 발생합니다.

 

위와 같이 App Bundle 형식으로 빌드를 하면 되겠습니다.

 

64bit 대응에 대해 알아보았습니다. 천천히 따라가다 보면 쉽게 해결하실 수 있습니다.

 

앞전 시간에는 구글애즈 계정관련 셋팅과 구글 인증 셋팅을 마쳤습니다.

이제 마지막으로 API를 사용해 볼 수 있는 시간입니다.

라이브러리 셋팅과 웹서버 셋팅을 알아보겠습니다.

 

먼저 구글애즈 API 라이브러리가 있는 곳에서 다운을 받습니다.

https://github.com/googleads/google-ads-php

 

googleads/google-ads-php

Google Ads API Client Library for PHP. Contribute to googleads/google-ads-php development by creating an account on GitHub.

github.com

컴포져로 설치하기전에 확인해야할 요구사항들이 있습니다.

 

PHP - composer.json 파일에 최소한의 PHP 버전이 설치되어 있어야 합니다.

 

gRPC - PHP 확장모듈인 grpc 설치가 되어 있어야 합니다.  

sudo pecl install grpc

 grpc  설치를 합니다.

 extension=grpc.so

 php.ini 에 추가합니다.

 

 

Protobuf - PHP 확장모듈인 Protobuf가 설치되어야 합니다.

sudo pecl install protobuf

grpc  설치를 합니다.

extension=protobuf.so

 php.ini 에 추가합니다.

 

 

1. 요구사항을 다 설치한후 다운로드 받은후 웹서버 루트에서 압축을 풀어줍니다.

# git clone https://github.com/googleads/google-ads-php.git

2. google-ads-php 디렉토리로 변경합니다.

# cd google-ads-php

여러개의 폴더와 파일들이 보입니다.

compser.json - 라이브러리의 요구사항을 포함하는 json 파일

src - 라이브러리 소스 코드

tests - 라이브러리 코드 테스트

examples - 라이브러리를 사용해서 구글애즈 api  사용한 일반적인 예제들

metadata - 소스 코드에서 내부적으로 사용하는 일부 메타데이터 파일

 

3. composer install 로 컴포져를 설치합니다.

compser install

 

4. OAuth2 자격 증명을 설정합니다.

 

- 애드워즈 api에 대한 자격증명이 이미 있는 경우

   기존 adsapi_php.ini 파일을 복사하여 google_ads_php.ini 로 이름을 바꾸고 섹션이름을 [ADWORDS] -> [GOOGLE_ADS]로 바꿉니다.

   파일이 없는 경우 google_ads_php.ini를 홈 디렉토리에 복사합니다. 

 

- 새로운 자격증명을 사용하여 Google Ads API에 액세스 하는 경우

   샘플 폴더에 있는 google_ads_php.ini 파일을 홈디렉토리에 복사합니다.

   https://developers.google.com/google-ads/api/docs/oauth/cloud-project를  따라 OAuth2 클라이언트 ID 및 비밀번호를 만듭니다.

   AuthenticateInStandaloneApplication 예제를 실행하면 OAuth2 클라이언트 ID와 암호를 입력하라는 메시지가 표시됩니다.

   예제의 마지막 단계에서 출력을 google_ads_php.ini 파일을 홈디렉토리에 복사합니다. 개발자 토큰도 입력하는것을 빼먹지 마세요.

 

 

5. GetCampaigns.php 파일을 실행해서 자격 증명이 유효한지 확인합니다.

 

php examples/BasicOperations/GetCampaigns.php --customerId <YOUR_CUSTOMER_ID>

   

'기타' 카테고리의 다른 글

Google Adsense Api 사용법(1/2)  (0) 2020.08.27
Google Ads Api 사용법(2/3)  (0) 2020.08.19
Google Ads Api 사용법(1/3)  (0) 2020.08.19

+ Recent posts