유니티로 안드로이드 엑티비티 간 통신하기
2019. 6. 10. 17:15ㆍ개발/유니티
유니티에서는 서로다른 패키지명을 가진 엑티비티간에 통신이 가능하다.
안드로이드 코드를 일부지만 지원하기 때문이다.
하지만 중간에 네이티브코드가 필요하긴 하다.
기본적으로 통신방법을 요약하면 이러하다.
1. 발신할 유니티 엑티비티에서 네이티브 코드에 있는 메서드를 호출한다.
2. 해당 네이티브 메서드는 값을 저장한다.
3. 수신할 유니티에서 네이티브 메서드에 저장된 값을 불러온다.
이를 코드로 하면 이렇다.
1. 우선 발신하는 유니티의 엑티비티
(1) 자바 객체 선언해준다.
1
2
3
4
5
6
|
AndroidJavaObject GetJavaObject(){
if(javaObj == null){
javaObj = new AndroidJavaObject("보내고자하는 나의 액티비티 패키지명");
}
return javaObj;
}
|
cs |
(2) 해당 자바 객체의 메서드를 호출한다.
1
2
3
4
|
void Send(전달할 매개변수)
{
GetJavaObject().Call("SendAndroid(해당 엑티비티의 메서드명)",전달할 매개변수);
}
|
cs |
2. 플러그인 네이티브 코드(jar파일)
해당 유니티에 아래 메서드가 포함된 jar파일을 빌드하여 추가해준다.
1
2
3
4
5
6
7
8
9
10
11
|
void SendAndroid(매개변수){
PackageManager pm = this.mUnityActivity.getPackageManager();
Intent it = new Intent();
it = pm.getLaunchIntentForPackage("매개변수를 전달할 엑티비티의 패키지명");
it = putExtra("매개변수1", 값1);
it = putExtra("매개변수2", 값2);
it = putExtra("매개변수3", 값3);
if(it!=null){
this.mUnityActivity.startActivity(it);
}
}
|
cs |
3. 다른 유니티의 엑티비티
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | string 값1,값2,값3; static AndroidJavaObject unityActivity = null; static AndroidJavaObject CurrentActivity(){ string packageName1 = "com.unity3d.player.UnityPlayer"; string packageName2 = "currentActivity"; string packageName3 = "getIntent"; if(unityActivity == null){ unityActivity = new AndroidJavaObject(packageName1).GetStatic<AndroidJavaObject>(packageName2).Call<AndroidJavaObject>(packageName3); } return unityActivity; } static string Call (params objects[] args){ string callback = CurrentActivity().Call<string>("getStringExtra",args); return callback; } void AndroidCallback(){ 값1 = Call("매개변수1"); 값2 = Call("매개변수2"); 값3 = Call("매개변수3"); } | cs |
이렇게하면 발신하는 유니티에서 수신하는 유니티로 통신이 가능하다.
'개발 > 유니티' 카테고리의 다른 글
이미지 크기를 일정하게 늘리기 (0) | 2020.08.04 |
---|---|
유니티에 DLL 파일 연결하기 (0) | 2020.07.29 |
안드로이드 유니티에서 다른 애플리케이션 실행하기 (0) | 2019.09.23 |
유니티에서 지저분한 PNG 이미지를 깔끔하게 하기 (0) | 2019.05.28 |
버튼 클릭시 이미지의 알파영역을 무시하기 (0) | 2019.05.20 |