Blog
Unity와 Android Java Class
Unity에서 AndroidJavaClass 를 이용하여 Toast Message 띄우기
2023.06.15
🔸 Unity와 AndroidJavaClass
Unity에서 안드로이드 네이티브 기능에 접근하기 위해서는 보통 AndroidJavaClass
와 AndroidJavaObject
를 사용한다.
🔹 AndroidJavaClass:
- Java 클래스를 나타내는 Unity 클래스이다.
- 안드로이드 플랫폼에서 이미 존재하는 클래스를 사용하고자 할 때 사용된다.
- 안드로이드 SDK의 클래스를 직접 호출하여 정적 메서드나 필드에 접근할 수 있다.
- Java 클래스의 이름을 기반으로 생성되며, 해당 클래스의 정적 메서드 및 필드에 접근할 수 있다.
🔹 AndroidJavaObject:
- Java 객체를 나타내는 Unity 클래스이다.
- 새로운 Java 객체를 생성하거나, 기존에 생성된 Java 객체에 접근하고자 할 때 사용된다.
- AndroidJavaClass를 통해 생성된 Java 클래스의 인스턴스를 생성하여 사용한다.
- Java 객체의 인스턴스 메서드에 접근하고 호출할 수 있으며, 필드 값을 가져오거나 설정할 수도 있다.
이 두 클래스는 Unity에서 안드로이드의 네이티브 기능을 호출하기 위해 사용되며,
Java 클래스와 객체에 직접 액세스할 수 있는 기능을 제공한다.
정리하면,
AndroidJavaClass
는 정적 메서드와 필드에 접근하기 위해 사용되고,
AndroidJavaObject
는 인스턴스 메서드와 필드에 접근하기 위해 사용됩니다.
이를 이용하여, 간단하게 Toast Message를 띄우는 코드를 작성해보았다.
public static void ShowAlert (string message) {
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast") ;
AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject> ("currentActivity");
unityActivity.Call ("runOnUiThread", new AndroidJavaRunnable( () =>
{
AndroidJavaObject toastObject = toastClass.Callstatic<AndroidJavaObject>("makeText", unityActivity, message, 0);
toastObject.Call("show");
}));
}
현재 실행되고 있는 액티비티를 가져와서, android.widget.Toast
패키지의 static 메서드인 makeText
를 호출하는 코드이다.
이런식으로 버튼을 눌렀을 때, ShowAlert("MessageMessage")
라고 호출한다면, 위와 같은 Toast 메세지가 쿨릭되는 것을 볼 수 있다.
🔸 오타가 난다면?
Callstatic이라는 메서드에 메서드 이름을 string으로 호출 하는 것을 볼 수 있는데,
그렇다면 이 Callstatic에 오타가 난 string을 집어 넣으면 어떻게 될까?
확인 결과 아무일도 일어나지 않는다. 코드를 아래처럼 변경하고 ( makeText
-> makeText2
)
toastClass.Callstatic<AndroidJavaObject>("makeText2", unityActivity, message, 0);
빌드 후 실행한 후, 메서드를 실행하면….아무일도 일어나지 않는다. Logcat에서도 확인이 되지 않는다.
2023-03-20 17:50:43.955 28390-28390/? I/ViewRootImpl@750Id0e[UnityPlayerActivity]: ViewPostIme pointer 0
2023-03-20 17:50:44.029 28390-28390/? I/ViewRootImpl@7501d0e[UnityPlayerActivity]: ViewPostIme pointer 1