반응형
https://red-tiger.tistory.com/39
유니티로 안드로이드 Alert Dialog 띄우기
수많은 시행착오 끝에 구글플레이로 로그인을 구현하였다. 그런데 처음에는 별 문제가 없는 줄 알았다. 그런데 와이파이나 데이터가 안터져도 정상적으로 구글플레이로 로그인이 되었다. 아마
red-tiger.tistory.com
우선 기본적으로 유니티에서 Alert Dialog를 띄우는것은 나의 전 포스팅에서 확인 할 수 있다.
기본 베이스는 똑같다. 이전포스팅의 코드들을 조금만 변경해주면 된다.
PluginClass.java
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("네트워크 연결에 실패했습니다. 네트워크 연결 확인 후 다시 접속해 주세요.");
//dialouge 메세지 본문
builder.setCancelable(false);
//무조건 dialogue 창과만 소통하게 강제한다
builder.setPositiveButton(
"Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
Log.v(LOGTAG,"Clicked from plugin - Yes");
dialogInterface.cancel();
unityActivity.moveTaskToBack(true); // 태스크를 백그라운드로 이동
unityActivity.finishAndRemoveTask(); // 액티비티 종료 + 태스크 리스트에서 지우기
android.os.Process.killProcess(android.os.Process.myPid()); // 앱 프로세스 종료
}//클릭되면 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();
}
}
이전 포스팅과 코드가 달라진 점
- 일단 No 버튼은 필요없어서 주석처리로 없애줬다.
- Alert창의 Yes버튼만 눌리게, 다른곳을 눌러도 Alert Dialog창이 안꺼지게 구현해주고 싶어서 builder.SetCancelable(false) 해주었다.
- 또한 예스 버튼을 누르면 앱이 강제종료되게 3줄의 코드를 추가해줬다.
AlertDialog.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class AlertDialog : MonoBehaviour
{
private string NetworkUrl;
AndroidJavaClass unityClass;
AndroidJavaObject unityActivity;
AndroidJavaObject pluginInstance;
private bool isConnected;
void Start()//시작할때 플러그인을 설정과 Alert창을 미리 만들어둔다
{
NetworkUrl="bjh3311.cafe24.com/Network.php";
InitializePlugins("com.redtiger.native_plugin.PluginClass");
CreateAlert();
isConnected=true;
}
void Update()
{
StartCoroutine("Check");
}
IEnumerator Check()
{
UnityWebRequest webRequest=UnityWebRequest.Get(NetworkUrl);
yield return webRequest.SendWebRequest();
if(webRequest.error!=null&&isConnected)//통신에 실패했다
{
isConnected=false;
ShowAlert();//Alert창을 띄운다. Alert창에서 "YES"버튼을 누르면 종료된다.
}
}
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");
}
void ShowAlert()//플러그인에서 ShowAlert를 호출한다
{
pluginInstance.Call("ShowAlert");
}
}
//현재 유니티 활동을 Android 플러그인에 보내는 스크립트
이전 포스팅에 코드를 몇개 추가해주었다. 네트워크 상태를 확인해주는 코드들이다.
isConnected변수를 써준 이유는 안써주면 네트워크가 연결 안돼있을때 ShowAlert()를 계속 실행해서 그렇다.
그렇게 되면 계속 Dialog 창이 나온다.
그래서 네트워크가 한번 끊어지면 isConnected를 false로 만들어주어 ShowAlert()가 더 이상 실행되지 않게 구현했다.
참고로 위 코드의 NetworkUrl은 필자가 만들어논 네트워크 체킹용 php파일 주소다. 만약 직접 만들기 귀찮으면 저거 그대로 사용해도 된다.
실행결과
반응형
'유니티' 카테고리의 다른 글
유니티 구글 광고 붙이기(Google Ad Mob) (1) | 2022.09.22 |
---|---|
유니티 구글플레이 리더보드 연동 (0) | 2022.09.19 |
유니티로 안드로이드 Alert Dialog 띄우기 (0) | 2022.09.15 |
유니티 GPGS(Google Play Game Service) 11.01 버전 관련... (0) | 2022.09.09 |
유니티 il2cpp_cache 삭제해도 되는가?? (2) | 2022.09.07 |