🔸 Unity와 AndroidJavaClass

Unity에서 안드로이드 네이티브 기능에 접근하기 위해서는 보통 AndroidJavaClassAndroidJavaObject를 사용한다.

🔹 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