Android용 Native(C++) 플러그인
Android Studio를 통해서 Unity Plugin을 작업하는 포스팅 이다.
Activity는 필요없으니 No Activity로 생성한다. 기본 Language는 Java로 코드를 작성한다.
New Module으로 Android Library를 생성한다.
Unity 에서 사용할 Library를 Import 한다 경로는 다음과 같다.
Unity -Preferences-External Tools 의 경로를 확인한다.
C:\Program Files\Unity\2020.3.2f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
plugin / libs / classes.jar를 복사한다.
buildgradle을 열어서 libs의 경로의 classes.jar를 읽을수 있는 옵션을 추가한다.
compileOnly fileTree(dir: 'libs', include: ['*.jar'])
Sync Now를 누르게되면 적용된것을 확인할수 있다.
이제 실질적으로 기능을 구성해보자.
Java Class를 생성한다.
Android Native에서 처리할 기능을 구성한다.
간단하게 Toast 처리하는 코드를 작성한다.
public class UnityPlugin
{
private static UnityPlugin _instance;
private static Activity _context;
public static UnityPlugin instance()
{
if(_instance == null)
{
_instance = new UnityPlugin();
_context = UnityPlayer.currentActivity;
}
return _instance;
}
public void showToast(String _messag)
{
_context.runOnUiThread(new Runnable(){
@Override
public void run(){
Toast.makeText(_context, _messag, Toast.LENGTH_SHORT).show();
}
});
}
public void unitySendMessage(String _objectName, String _methodName, String _param)
{
UnityPlayer.UnitySendMessage(_objectName,_methodName,_param);
}
}
기능을 구현 이후에 Gradle -plugin ->Tasks -> build -> assemble을 더블클릭해서 빌드진행한다.
<환경 에러>
94: AAPT: error: resource android:color/system_neutral1_1000 not found.
위의 에러가 나와서 버전을 수정했다.
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
상위 버전에서는 해당 리소스를 못찾는 이슈가 있어서 다운그레이드해서 진행했다.
다시 aseemble build 진행
빌드가 완료되면서 aar이 생성된것을 확인가능하다.
생성된 plugin-release.aar를 Unity에서 Import 한다.
Unity 에서 호출처리 코드로 진행한다.
public class AndroidTest : MonoBehaviour
{
AndroidJavaObject _pluginInstance;
void Awake()
{
#if UNITY_ANDROID
var pluginClass = new AndroidJavaClass("com.shc.unity.plugin.UnityPlugin");
_pluginInstance = pluginClass.CallStatic<AndroidJavaObject>("instance");
#endif
}
public void ClickToast()
{
if (null == _pluginInstance)
return;
_pluginInstance.Call("showToast", "Hellow UnityPlugin Toast !!");
}
}
참고 코드 : [ 링크 ]
-----------------------------------------------------------------------------------------------------------------------------------
C로 구현하는 방식도 존재한다.
Android용 Native(C++) 플러그인 : [ 링크 ]
★☆☆☆☆
댓글