수많은 시행착오 끝에 구글플레이로 로그인을 구현하였다.
그런데 처음에는 별 문제가 없는 줄 알았다. 그런데 와이파이나 데이터가 안터져도 정상적으로 구글플레이로 로그인이 되었다. 아마 구글플레이에서 휴대폰에 로컬로 계정정보를 저장시켜놓거나 그랬을 것이다. 하지만 나는 구글플레이 리더보드를 이용해서 랭킹도 검색하고 랭킹을 갱신하는 기능을 넣을 예정이다. 그렇기에 안정된 통신이 보장되어야 한다.
예전에 만들었던 게임에서도 네트워크 연결이 필수여서 네트워크를 검사한 후, 불안정하면 위와같은 팝업창을 띄우게 했다. 보면 알겠지만 내가 직접 만든 팝업창이다.
사실 이번에도 저렇게 구현해도 되지만 무언가 폼이 안살아서 싫었다.
그래서 이번에는 안드로이드 알림창으로 띄어보겠다. 그러기 위해 이번 포스팅 주제는 Unity에서 Android 기본 알림창을 띄우는 것이다!!!(모든 코드와 내용들은 출처에 적혀있는 유튜브를 보고 따라했다)
유튜브를 보는게 확실하겠지만 귀찮으신 분은 이 블로그가 도움이 되었으면 좋겠다. 유튜브에서 말하길 유니티와 안드로이드 플러그인 연동에 대해 더 알고 싶으면 본인의 채널로 들어오라 했으니 관심있으면 한 번 들어가면 좋을 것 같다.
일단은 안드로이드 모듈을 만들어줘야 한다. 언어는 JAVA로 선택해서 아무 프로젝트를 만들어 준 다.
상단 Tool bar의 File -> New -> New Module 을 클릭한 후 위와같이 설정해준다.
제대로 성공했다면 왼쪽 폴더 이름중 native_plugin이 생겼을 것이다. 그 안의 java폴더에 마우스를 올리고 오른쪽 마우스 클릭 후 java Class를 생성해주자. 이름은 PluginClass 으로 했다. 그리고 아래와 같은 코드를 입력해준다.
package com.redtiger.native_plugin;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.util.Log;
public class PluginClass {
private static final String LOGTAG = "UnityPlugin";
private static Activity unityActivity;//UnityActivity를 담아줄 변수
AlertDialog.Builder builder;//alert dialog builder 변수
public static void receiveUnityActivity(Activity tActivity)
{
unityActivity=tActivity;
}//unity로부터 UnityActivity를 plugin으로 하게 하는 method(번역이 이게 맞나??)
//유튜브 원문은 "to get UnityActivity from unity to plugin
public void CreateAlert()//초기화하고 alert dialogue를 생성하는 함수
{
builder = new AlertDialog.Builder(unityActivity);
//unity로 부터 받은 unityActivity를 전달하는 초기화 함수
builder.setMessage("Set your intro message.");
//dialouge 메세지 본문
builder.setCancelable(true);
//스크린 아무데나 누르면 취소할수 있게하는, 우리가 무조건 dialogue 창과만 소통할 필요없게하는
builder.setPositiveButton(
"Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
Log.v(LOGTAG,"Clicked from plugin - Yes");
dialogInterface.cancel();
}//클릭되면 dialog창 닫히게
}
);//YES버튼이다
builder.setNegativeButton(
"No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
Log.v(LOGTAG,"Cliked from plugin - No");
dialogInterface.cancel();
}//클릭되면 dialog창 닫히게
}
);//No버튼
}
public void ShowAlert()//이전에 초기화하고 만들어논 Alert를 보여주는 method
{
AlertDialog alert = builder.create();
alert.show();
}
}
맨 위 패키지이름은 위 코드와 다르게 본인 프로젝트에 맞게 설정해줘야한다.
유튜브에서 코드설명한것들을 최대한 베껴왔으니 참고하도록 하자.
다 됐다면 위와 같이 Make Module 'MyApplication.native_plugin' 버튼을 눌러준다.
위와 같이 안드로이드 스튜디오 디렉토리에 native_plugin-debug.aar 파일이 생긴다.
유니티에 Plugins 폴더를 들어주고 .aar파일을 드래그앤 드롭으로 생성해준다.
그리고 C#스크립트를 생성해준다
AlertDialog.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AlertDialog : MonoBehaviour
{
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaObject pluginInstance;
void Start()//시작할때 플러그인을 설정과 Alert창을 미리 만들어둔다
{
InitializePlugins("com.redtiger.native_plugin.PluginClass");
CreateAlert();
}
void InitializePlugins(string pluginName)
{
unityClass=new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity=unityClass.GetStatic<AndroidJavaObject>("currentActivity");
pluginInstance=new AndroidJavaObject(pluginName);
if(pluginInstance==null)//플러그인을 제대로 인식 못했을 시에
{
Debug.Log("Plugin instance Null!!");
return;
}
pluginInstance.CallStatic("receiveUnityActivity",unityActivity);
}
void CreateAlert()//플러그인에서 CreateAlert를 호출한다
{
pluginInstance.Call("CreateAlert");
}
public void ShowAlert()//플러그인에서 ShowAlert를 호출한다
{
pluginInstance.Call("ShowAlert");
}
}
//현재 유니티 활동을 Android 플러그인에 보내는 스크립트
이제 아무씬에 아무버튼을 눌렀을때 ShowAlert() 함수가 실행되게 인스펙터창에서 설정해주면 된다.
위의 코드들을 조금만 변경해주면 네트워크가 불안정할때 안드로이드 Alert Dialog가 뜨며 나가게 하는 기능을 구현 할 수 있다!!!!
출처: https://www.youtube.com/watch?v=uTZVIROugBw
'유니티' 카테고리의 다른 글
유니티 구글플레이 리더보드 연동 (0) | 2022.09.19 |
---|---|
유니티 네트워크 체크후 불안정하면 Android Alert Dialog띄우기 (1) | 2022.09.15 |
유니티 GPGS(Google Play Game Service) 11.01 버전 관련... (0) | 2022.09.09 |
유니티 il2cpp_cache 삭제해도 되는가?? (2) | 2022.09.07 |
유니티 구글플레이 로그인 연동 (0) | 2022.09.06 |