2019년 6월 26일 수요일

Unity에서 Logcat 정보 보기

안드로이드 개발 중 디버깅 시 Log 를 볼 수 있는 장소가 Android Studio의 Logcat 창이다.
이 창에서는 기기에서 오류와 (앱에서 Log 클래스로 작성한) 메시지들을 볼 수 있다.
(Andriod SDK 설치 폴더 내 tools/monitor.bat 로 연결된 기기와 Logcat 확인 가능)

하지만 Unity와 Android Studio을 실행해 Logcat 창을 확인하는 것 보다 Unity에서 바로 Logcat에 표시되는 정보를 확인할 수 있는 방법이 있다.

Logcat (android logging) extension for Unity3D
Link : https://github.com/dzonatan/Unity3D-LogCat-extension

Link 내 How to use 정보와 같이
Asset>Editor 폴더를 생성해 LogCatWindow.cs를 위치 시키고, Unit 메뉴의 Window>LogCat - Android Logger 을 선택하면 Logcat 윈도우를 띄울 수 있다. 




















Debug.Log확인 및 AdMob에서 사용할 테스트 기기 번호를 확인하는 데 사용 했다.

Unity "Build And Run" 미 실행 오류

유니티에 기기를 연결해두고 기기에서 게임을 삭제해 가며 Build And Run 으로 게임을 테스트 하다 보면 종종 "Build completed with a result of 'Succeeded'"으로 성공 메시지가 표시되지만, 기기에서는 실행이 되지 않는 경우가 있다.

이런 문제가 종종 발생한 기기는 구글 계정이 복수로 등록된 기기였다.

기기의 옵션 메뉴에서 설치된 전체 App 리스트를 확인해 테스트를 한 게임 앱이 정상적으로 삭제되었는지 확인하고, 삭제되지 않았으면 우측 상단 메뉴>"모든 사용자에 대해 제거"로 다시 삭제하면 정상적으로 Build And Run 기능이 동작하게 된다.

Unity Build And Run "CommandInvokationFailure: Unable to install APK to device. Please ...." 오류

유니티에서 Build And Run을 실행하는 중에 다음과 같은 에러가 발생 될 수 있다.

CommandInvokationFailure: Unable to install APK to device. Please make sure the Android SDK is installed and is properly configured in the Editor. See the Console for more details.
...
[INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.kkumgames.Sample_Gpgs_ADMob signatures do not match the previously installed version; ignoring!]
...

기기 또는 에뮬레이터에서 현재 빌드하는 게임과 동일한 패키지명을 가진 게임이 설치되어 있어서 발생한다.

따라서 설치된 게임을 삭제 후 재시도 하면 된다.

2019년 6월 25일 화요일

Unity PlayerSettings의 Version 참조

유니티의 PlayerSettings > Other Settings > Version 에 입력된 값을 출력하는 스크립트.
PlayerSettings.bundleVersion 는 에디터 전용이라 Apk로 Build 시 사용 할 수는 없음.

using UnityEngine;
using UnityEngine.UI;

using UnityEditor;

public class MyVersion : MonoBehaviour
{
    public Text versionText;

    void Start()
    {
        // using UnityEditor; 와 세트로 edit 전용
        //buildVersionText.text = "Version - " + PlayerSettings.bundleVersion;

        // 빌드 시 사용 할 수 있음
        buildVersionText.text = "Version - " + Application.version;
    }
}

'다른 사용자가 이 기기에 호환되지 않는 버전을....' 오류

기기에 앱을 설치 및 업데이트해 가며 테스트하는 중 때때로 다음과 같은 오류 문구가 발생한다.

'다른 사용자가 이 기기에 호환되지 않는 버전을 설치했기 때문에 이 앱을 설치할 수 없습니다.'


이는 기기에 2개 이상의 구글 계정이 등록되어, 계정 중 한 곳에서 앱이 정상적으로 삭제되지 않아 발생 된다.

이를 다음과 같이 해결할 수 있다.

1. [설정] > [앱 및 알림] > [설치한 앱] > 앱 정보로 이동
2. 이후 우측 상단 메뉴의 "모든 사용자에 대해 제거"를 선택해 삭제
3. 이후 테스트 앱 재설치 시도

Unity GPGS LeaderBoard "Play 게임에 문제가..." 오류

유니티에 GPGS 플러그인을 이용해 Leaderboard 작업중 발생 하는 오류.

"Play 게임에 문제가 발생했습니다."





















개인적인 경험으로 테스트를 안드로이드 emulator 또는 Nox와 같은 앱플레이어에서 할 경우 잘 발생 했다.

이런 오류는 앱 설치 후 리더보드를 보는 기능까지는 문제가 없지만 LeaderBoard에 점수를 입력하는 경우, 위와 같은 에러와 함께 이후 LeaderBoard와 관련된 어떤 작업도 할 수 없게 된다.


이럴 경우 다음과 같이 해결 했다.

1. Google Console에 다음 버전의 APK 를 업로드 하여 출시
2. 기기에 기존 버전의 앱 삭제
2. Google Play에서 앱을 다운 받아서 재 설치 후 테스트


Unity GPGS LeaderBoard 정보 획득 및 가공

유니티에서 구글 리더보드에 등록되어 있는 내 점수를 획득 하는 방법

using UnityEngine;
using GooglePlayGames;
using UnityEngine.SocialPlatforms;

public class GPGSIntegration : MonoBehaviour
{
    long bestScore;

    void GetLeaderBoardScore()
    {
        ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
        // GPGS에서 생성한 GPGSIds 클래스 리더보드 변수명
        lb.id = GPGSIds.leaderboard_bestscore;

        lb.LoadScores(scores =>
        {
            bestScore = lb.localUserScore.value;
        });
    }
}


그리고 리더보드의 정보를 획득해 다음과 같이 가공할 수 있다.

using UnityEngine;
using GooglePlayGames;
using UnityEngine.SocialPlatforms;

public class GPGSIntegration : MonoBehaviour
{
    long bestScore;

    void ShowLeaderBoardMyInfo()
    {
        ILeaderboard lb = PlayGamesPlatform.Instance.CreateLeaderboard();
        // GPGS에서 생성한 GPGSIds 클래스 리더보드 변수명
        lb.id = GPGSIds.leaderboard_bestscore;

        lb.userScope = UserScope.Global;
        lb.range = new Range(1,10);
        lb.timeScope = TimeScope.AllTime;

        lb.LoadScores(scores =>
        {
            uint all_player = lb.maxRange;
            int my_rank = lb.localUserScore.rank;
            decimal percent = (decimal)my_rank / (decimal)all_player;

            text.text = scores.ToString() + "\nAllPlayer: " + all_player + "\nMyRank: " + my_rank + "\nMyScore: " +lb.localUserScore.value.ToString() + "\nPercent: " + percent + "%";
        });    
    }
}
출력 정보








출처 : https://stackoverflow.com/questions/55234701/google-play-games-leaderboard-custom

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...