Unity에서 Java 및 Kotlin 플러그인 사용하기
개요
Unity는 Android 플랫폼에서 Java 및 Kotlin 플러그인 코드를 호출하는 방법을 제공합니다. 이를 통해 C# 스크립트에서 Java 코드와 상호 작용할 수 있습니다. Unity는 저수준 API와 고수준 API를 모두 제공합니다.
API 유형
저수준 API
- AndroidJNI: JNI 호출을 래핑하고, JNI 메서드에 직접 매핑되는 정적 메서드를 제공합니다.
고수준 API
- AndroidJavaObject: Java 객체를 Wrapping하여 더 쉽게 사용할 수 있게 해줍니다.
- AndroidJavaClass: Java 클래스를 Wrapping하여 정적 멤버에 접근할 수 있게 해줍니다.
- AndroidJavaProxy: Java 인터페이스를 Wrapping하여 Unity와 Java 간의 상호작용을 용이하게 해줍니다.
Java/Kotlin과의 상호작용
Java/Kotlin과의 상호작용은 다음과 같은 방식으로 수행할 수 있습니다: - 메서드 호출 - 필드 값 가져오기 - 필드 값 설정하기
정적 상호작용
- 정적 메서드 호출:
CallStatic - 정적 필드 값 가져오기:
GetStatic - 정적 필드 값 설정하기:
SetStatic
예제 코드
1. Java 문자열의 해시 코드 가져오기
다음은 Java의 hashCode() 메서드를 사용하는 예제입니다.
using UnityEngine;
public class JavaExamples { public static int GetJavaStringHashCode(string text) { using (AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", text)) { int hash = jo.Call("hashCode"); return hash; } } }
2. 캐시 디렉토리 가져오기
현재 애플리케이션의 캐시 디렉토리를 가져오는 예제입니다.
using UnityEngine;
public class JavaExamples { public static string GetApplicationCacheDirectory() { using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity")) using (AndroidJavaObject javaFile = currentActivity.Call("getCacheDir")) { string cacheDirectory = javaFile.Call("getCanonicalPath"); return cacheDirectory; } } }
3. Java에서 Unity로 데이터 전달하기
Java에서 Unity로 메시지를 전달하는 코드입니다.
using UnityEngine;
public class JavaExamples : MonoBehaviour { private void Start() { AndroidJNIHelper.debug = true; using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { jc.CallStatic("UnitySendMessage", "My GameObject", "JavaMessage", "NewMessage"); } }
private void JavaMessage(string message)
{
Debug.Log("message from java: " + message);
}
}
베스트 프랙티스
- JNI 호출 최소화: JNI는 리소스를 많이 소모하므로, 호출 수를 최소화하는 것이 좋습니다.
- 가비지 컬렉션:
using문으로 객체를 감싸서 가비지 컬렉션이 좀 더 빠르게 수행되도록 합니다.
추가 참고 사항
- 안드로이드 로그캣에서 가비지 컬렉터 활동 확인:
AndroidJNIHelper.debug = true설정. - 메서드 ID를 캐시하여 성능 최적화 가능.
이 문서는 Unity에서 Java 및 Kotlin 플러그인을 활용하는 방법을 간략하게 소개하며, 다양한 예제를 통해 주요 기능을 설명했습니다.