유니티 자체 안드로이드 플러그인

2017. 2. 18. 14:54기술/유니티 스터디

반응형

유니티에서 자체 안드로이드 플러그인을 제작하는 방법에 대해서 정보를 공유하겠습니다.

바쁜 개발자분들에게 조금이나마 도움이 되었으면 합니다.


1. 개발환경이 설정되어 있어야 합니다.

저는 Java SDK, Eclipse & ADT, Unity 5.5.0f, Visual Studio 2015 Community를 설치해 두었습니다.


2. 이클립스에서 안드로이드 프로젝트를 생성합니다.

첫번째 밑줄 친 것들만 중요하고 나머지는 기본설정을 그데로 유지하셔도 상관없습니다.



이클립스에서 한글 주석을 위해 프로젝트 속성/Resource/Text file encoding/Other UTF-8을 설정합니다.

libs

이클립스에서 유니티 클래스를 사용하기 위해 libs폴더를 만들어 줍니다. unity-classes.jar 파일은 유니티에서 Export를 해서 찾을 수 있습니다. (폴더에서 파일 검색)


MainActivity.java

기본적으로 이정도로만 코딩해 주셔도 괜찮습니다.

간단한 코드 설명 : runOnUIThread 이 부분은 Toast 메시지 박스를 살짝 띄우기 위해서 쓰레드를 생성해주는 부분입니다.


프로젝트를 Export 합니다. Java의 JAR입니다. src만 Export하시되 경로는 유니티 프로젝트 경로에 해주시면 편리합니다. 이미 중반정도 개발중인 프로젝트에 Export하셔도 괜찮습니다.

D:\Project\Unity5\PluginTest\Assets\Plugins\Android

이 폴더에 이클립스에서 생성 되었던 AndroidManifest.xml로 복사해 줍니다. 매우 중요한 역할을 하는 파일입니다.



AndroidManifest.xml


package="com.company.myplugin" 이 부분이 중요합니다. 다음으로

<activity android:name=".MainActivity" 입니다. 그리고 게임에서는 landscape를 잘 사용하는데 landscape로 설정해 줍니다.


이렇게 한 다음 유니티를 빌드하면 유니티에서는 우리가 플러그인으로 제작해 두었던 MainActivity를 실행합니다.

유니티에 페이스북 SDK가 포함되어 있어도 상관없습니다.


다음은 조금 확장된 MainActivity.java 파일입니다. Unity에서 ADT로 Export하면 볼 수 있는 코드들을 참고하고 불필요한 라인은 삭제하며 코드 정리를 하였습니다.


MainActivity.java


onConfigurationChanged 이 함수가 유니티를 폰이나 패드에서 실행시 센서에 의해 270도로 회전할 수 있는 코드 입니다.


이클립스 libs 폴더에 라이브러리 파일들을 포함하는 것과 유니티 Assets/Android/libs 폴더에 라이브 파일들을 포함하는 것과는 별도입니다. 이클립스 libs 폴더에 포함하는 이유는 이클립스에서 그 라이브러리 기능을 사용하기 위함이고 결국 우리는 유니티에서 APK 파일을 만들어 낼 것이기 때문에 유니티에서 라이브러리 파일들을 포함시켜 주어야 합니다.


MainActivity.Java 코드에 보시면 HelloFunction()이 있습니다.


유니티에서 안드로이드 함수를 호출해 줄 수 있습니다. 방법은 유니티에 GameObject 하나를 만들고 이름을 AndroidManager라고 합니다. 그리고 AndroidManager.cs 스크립트 파일 하나를 만든 다음 다음과 같은 코드를 입력합니다. 주로 AndroidJavaClass 와 AndroidJavaObject라는 클래스를 이용해서 함수 호출을 하게 되어 있습니다.

Text는 UGUI입니다.


여기에서 AndroidManager라는 GameObject의 이름이 정말로 중요합니다. 그 이유는

UnityPlayer.UnitySendMessage("AndroidManager", "AndroidLog", "Hello!");
유니티로 메시지를 보낼 때, 해당 게임 오브젝트의 이름을 찾는다는 것입니다. 


만약 게임 오브젝트의 이름이 틀릴경우 함수 호출이 제대로 되지 않고 어디에서 에러가 나는지 찾기 힘듭니다. 저같은 경우 유니티 스크립트의 이름을 싱글턴으로 바꾸다가 게임 오브젝트의 이름이 변경되어 왜 함수 호출이 되지 않는지 이것저것 보고 빌드하고 테스트 하느라 하루정도 시간을 소비한거 같습니다. 


AndroidManager.cs


자체 플러그인을 사용할 때는 프로가드(ProGuard)를 적용할 수 없습니다. 그럴때는 Android Studio용으로 Export하여 플러그인을 적용하면 됩니다. 라이브러리 만들때는 이클립스가 편하고 안드로이드 앱 작업할 때는 안드로이드 스튜디오가 장점이 많기 때문에 더욱 편리하다고 생각합니다.

반응형

'기술 > 유니티 스터디' 카테고리의 다른 글

유니티 네트워크 게임 프로젝트  (0) 2017.10.19
유니티에서 앱 다국어 이름 설정하기  (0) 2017.07.27
UGUI  (0) 2017.02.14
유니티 메모리 관리와 Drawcall  (0) 2017.01.12
유니티5 튜토리얼 공부  (0) 2016.08.11