'이클립스'에 해당되는 글 1건

  1. 2014.04.02 유니티 안드로이드 확장 개발 - jar 파일(이클립스연동) (3)

유니티 안드로이드 확장 개발 - jar 파일(이클립스연동)

|

유니티는 다양한 에셋들을 사용해서 개발의 편의성을 높이고 있습니다.

Prime31이나 각종 애드몹 관련 플러그인들도 이와 같이 개발의 편의성을 높이는 플러그인입니다. 이런 플러그인을 직접 돈주고 사면 좋겠지만.

저희 같은 가난한 개발자 및 학생들은 직접 유니티와 자바의 연동을 통해서 구현해야됩니다. 


여기서는 자바 클래스와 연동하는 방법을 간단하게 소개하겠습니다.


각각 호출할때 기본적인 함수들이 있습니다.


유니티에서는 자바 클래스를 호출할때

AndroidJavaObject.Call 로 자바 클래스의 함수를 호출할수 있습니다.


자바클래스에서 유니티를 호출할때는

UnityPlayer.UnitySendMessage 함수를 사용하여 호출합니다.


유니티로 제작된 게임을 자바 클래스를 통해 확장하는 방식은 2가지가 있는데

첫번째 방식은 자바 클래스를 별도로 제작한 후 유니티 프로젝트 폴더의 Plugins/Android 폴더에 올려서 확장하는 방식이고

두번째 방식은 유니티 내에서 이클립스로 export해주어서 확장하는 방법입니다.


jar 파일을 생성해서 관리하는것이 좀더 편한것 같으니 첫번째 방식을 사용하겠습니다.


먼저 jar 파일을 생성할 프로젝트를 이클립스에서 생성해줍니다.







패키지 이름을 com.test.androidjartest 로 지정했는데 유니티 내의 Bundle Identifier 항목과 일치해야됩니다.


Edit - Project Settings - Player 에서

안드로이드 모양의 버튼을 누르면 Bundle Identifiire 를 수정할수 있습니다. 위에서 만든 패키지 이름과 일치 시켜줍니다.


이클립스에서 프로젝트를 생성하고 난다음에는 유니티가 제공하는 jar 파일을 임포트 해주어야 유니티가 제공해주는 함수를 사용할수 있습니다.


유니티가 제공하는 jar 파일은 classes.jar 파일이며 경로는 설치된 폴더에서 Editor/Data/PlaybackEngines/androidplayer/bin 폴더에 존재합니다.






jar 파일을 추가하는 방법은 프로젝트 폴더에서 오른쪽 버튼을 누르고 properties 를 누릅니다.

그리고 JaVa Build Path 에서 Libraries 에서 Add External JARs 버튼을 누르고 해당 경로에 있는 jar 파일은 선택해주고

Order and Export 에서 불러온 jar 파일을 체크해주고 ok를 누릅니다.





이클립스에서 만들어진 MainActivity 를 위와 같이 고쳐줍니다. 소스를 모두 수정하면 이 소스를 jar 파일로 만들어 exprot 해주겠습니다.






프로젝트 폴더에서 오른쪽 버튼을 누르고 Exprot 를 클릭해줍니다. 그리고 위 처럼 Jar file을 누르고 next 버튼을 눌러주고

자신의 프로젝트에서 src 폴더만 체크 해주고 Jar File 의 이름을 설정해주고 finish 버튼을 누르면 jar 파일이 완성됩니다.





이제 유니티로 넘어오겠습니다.


유니티 내에서는 jar 파일을 인식하기 위해서는 반드시 해당 경로에 jar 파일이 존재해야됩니다. 안드로이드 같은 경우네는

Plugins/Android 폴더에 jar 파일이 존재해야됩니다.


그리고 해당 jar 파일을 실행하기 위해서는 AndoridManifest 및 res 폴더가 필요하므로 위에서 만든 

jar 파일과 res 폴더 AndroidManifest 파일들을 Android 폴더에 집어 넣어줍니다.






이제 모든 세팅이 완료 되었습니다.



이제 제대로 유니티에서 -> 자바 클래스로 자바 클래스에서 유니티로 함수가 호출되는지 보겠습니다.


빈게임 오브젝트를 만들고 AndroidManager로 이름을 변경합니다.(반드시 AndroidManager로 지어주어야 됩니다.)


그리고 AndroidManager 에 아래 스크립트를 할당해줍니다.





AndroidManager 내의 Start 함수에서 MainActivity 자바 클래스의 HelloFunction 함수를 호출(_activity,Call("HelloFunction)하고,

자바 클래스에서는(이클립스) AndroidManage 클래스의 AndroidLog 함수를 호출(UnityPlayer.UnitySendMessage("AndroidManager", "AndroidLog", "Hello!");)하는 구조입니다.



할당후 안드로이드 단말기에서 빌드를 하면 아래와 같이 로그를 출력할 것입니다.






Trackback 0 And Comment 3
  1. Hello 2014.08.04 17:17 address edit & del reply

    AndroidManager.cs 말고 AndroidManager_Test.cs 로 만들면 안되는 이유가 뭐죠?>

    • Favicon of https://hyunity3d.tistory.com BlogIcon 히아레인 2014.08.04 22:03 신고 address edit & del

      MainActivity 보시면 unitysendMessage 함수에서 해당 게임오브젝트 명을 입력해야됩니다 AndroidManager_Test 라고 입력해보세요

  2. Ku 2014.10.21 23:04 address edit & del reply

    실행하였다니 아래와 같은 오류가 발생하였습니다 ㅠㅠ 왜인지 감이 안옵니다 ㅠㅠㅠㅠㅠㅠ
    Error building Player: CommandInvokationFailure: Failed to re-package resources. See the Console for details.
    C:\Users\kyoungku\Desktop\Company\adt\sdk\build-tools\android-4.4W\aapt.exe package --auto-add-overlay -v -f -m -J gen -M AndroidManifest.xml -S "res" -I "C:/Users/kyoungku/Desktop/Company/adt/sdk/platforms/android-20\android.jar" -F bin/resources.ap_

    stderr[
    res\values\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
    res\values-v11\styles.xml:7: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.
    res\values-v14\styles.xml:8: error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.
    ]
    stdout[
    Configurations:
    (default)
    v11
    v14
    hdpi
    mdpi
    xhdpi
    xxhdpi
    w820dp

    Files:
    drawable\app_icon.png
    Src: () res\drawable\app_icon.png
    drawable\ic_launcher.png
    Src: (hdpi) res\drawable-hdpi\ic_launcher.png
    Src: (mdpi) res\drawable-mdpi\ic_launcher.png
    Src: (xhdpi) res\drawable-xhdpi\ic_launcher.png
    Src: (xxhdpi) res\drawable-xxhdpi\ic_launcher.png
    layout\activity_main.xml
    Src: () res\layout\activity_main.xml
    menu\main.xml
    Src: () res\menu\main.xml
    values\dimens.xml
    Src: () res\values\dimens.xml
    Src: (w820dp) res\values-w820dp\dimens.xml
    values\strings.xml
    Src: () res\values\strings.xml
    values\styles.xml
    Src: () res\values\styles.xml
    Src: (v11) res\values-v11\styles.xml
    Src: (v14) res\values-v14\styles.xml
    AndroidManifest.xml
    Src: () AndroidManifest.xml

    Resource Dirs:
    Type drawable
    drawable\app_icon.png
    Src: () res\drawable\app_icon.png
    drawable\ic_launcher.png
    Src: (hdpi) res\drawable-hdpi\ic_launcher.png
    Src: (mdpi) res\drawable-mdpi\ic_launcher.png
    Src: (xhdpi) res\drawable-xhdpi\ic_launcher.png
    Src: (xxhdpi) res\drawable-xxhdpi\ic_launcher.png
    Type layout
    layout\activity_main.xml
    Src: () res\layout\activity_main.xml
    Type menu
    menu\main.xml
    Src: () res\menu\main.xml
    Type values
    values\dimens.xml
    Src: () res\values\dimens.xml
    Src: (w820dp) res\values-w820dp\dimens.xml
    values\strings.xml
    Src: () res\values\strings.xml
    values\styles.xml
    Src: () res\values\styles.xml
    Src: (v11) res\values-v11\styles.xml
    Src: (v14) res\values-v14\styles.xml
    Including resources from package: C:\Users\kyoungku\Desktop\Company\adt\sdk\platforms\android-20\android.jar
    applyFileOverlay for drawable
    applyFileOverlay for layout
    applyFileOverlay for anim
    applyFileOverlay for animator
    applyFileOverlay for interpolator
    applyFileOverlay for transition
    applyFileOverlay for xml
    applyFileOverlay for raw
    applyFileOverlay for color
    applyFileOverlay for menu
    applyFileOverlay for mipmap
    Processing image: res\drawable\app_icon.png
    Processing image: res\drawable-hdpi\ic_launcher.png
    Processing image: res\drawable-mdpi\ic_launcher.png
    Processing image: res\drawable-xhdpi\ic_launcher.png
    (processed image res\drawable-mdpi\ic_launcher.png: 82% size of source)
    Processing image: res\drawable-xxhdpi\ic_launcher.png
    (processed image res\drawable-hdpi\ic_launcher.png: 77% size of source)
    (processed image res\drawable\app_icon.png: 94% size of source)
    (processed image res\drawable-xhdpi\ic_launcher.png: 74% size of source)
    (processed image res\drawable-xxhdpi\ic_launcher.png: 72% size of source)
    (new resource id app_icon from drawable\app_icon.png #generated)
    (new resource id ic_launcher from hdpi\drawable\ic_launcher.png #generated)
    (new resource id ic_launcher from mdpi\drawable\ic_launcher.png #generated)
    (new resource id ic_launcher from xhdpi\drawable\ic_launcher.png #generated)
    (new resource id ic_launcher from xxhdpi\drawable\ic_launcher.png #generated)
    (new resource id activity_main from res\layout\activity_main.xml)
    (new resource id main from res\menu\main.xml)
    ]

prev | 1 | next