336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

유니티3D 안드로이드(Android) 플러그인(Plugin) 만들기 Part 2.


안드로이드 스튜디오(Android Studio) 2.1.1 기준입니다.

 

* 안드로이드 스튜디오(Android Studio) 상위 버전 분들은 여기 를 눌러 확인바랍니다. *


 

* 유니티와 통신하는 방법은 몇가지가 있습니다.


그중 하나를 선택해서 테스트 하였습니다.


 참고 : http://docs.unity3d.com/Manual/PluginsForAndroid.html



유니티를 열고 새 프로젝트를 만듭니다.


그리고 Assets 및에 Plugins 라는 폴더를 만듭니다.


* 플러그인들은 무조껀 이 폴더에 있어야 합니다.


그리고 그 하위에 Android 폴더를 만듭니다.


* 각 플랫폼 별로 정해진 폴더를 사용해야 합니다.




Android의 플러그인을 사용하기 위해서는


Manifest파일을 적용시켜줘야 합니다.


Part1에서 만든 Manifest를 가져오기 위하여, 


다음 폴더에 가서 복사를 합니다.




그리고 Part 1에서 만든 플러그인(.Jar파일)과 


Manifest파일을 해당 폴더에 넣어줍니다.




여기에서 중요한 점은 Bundle Identifier를 맞춰주어야 합니다.


우리는 이전 패키지 이름을 


com.test.plugintest로 만들었기 때문에, 동일하게 적어주겟습니다.


(해당 Identifier로 Jar파일의 패키지를 읽어들이기 때문에 맞춰주어야 합니다)




다음은 저의 AndroidManifest.xml 파일입니다.


혹시 모르니 비교해보시기 바랍니다.




이제 중간 과정은 끝났으니, 실제 코드로 연동을 하겠습니다.


주석으로 설명 달아두었으니 참고하시기 바랍니다.


< PluginTest.cs 코드 >


using UnityEngine;
using System.Collections;

public class PluginTest : MonoBehaviour {

    string messge = "init";
    AndroidJavaClass myCls;
    AndroidJavaObject myObj;

    //// Use this for initialization
	void Start () {
        // 새로룬 오브젝트를 만들지 않고, com.unity3d.player.UnityPlayer의 
        // static 멤버에 접근하기 위해 AndroidJavaClass를 사용한다.
        // (사실 Android UnityPlayer가 자동으로 인스턴스를 생성해준다)
        myCls = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        // 그리고 static 필드인 currentActivity를 접근한다.
        // 그리고 이경우 AndroidJavaObject를 사용한다. 
        // 이유는 실제 필드 타입이 android.app.Activity이고
        // 이건 java.lang.Object를 상속받는다. 
        // 그리고, non-primitive 타입은 무조껀 AndroidJavaObject로 접근해야한다.
        // 예외 : strings.
        myObj = myCls.GetStatic("currentActivity");        
	}
    void OnGUI()
    {
        // 이렇게 접근하는 방법은, static이나 non-static 모두
        // 동일한 방법으로 접근 가능하다
        if (GUI.Button(new Rect(100, 100, 100, 50), "StaticInt"))
        {   
            messge += ("\n" + myObj.CallStatic("GetStaticInt", 123).ToString());
        }

        if (GUI.Button(new Rect(100, 200, 100, 50), "StaticString"))
        {
            messge += ("\n" + myObj.CallStatic("GetStaticString", "StaticString"));
        }

        if (GUI.Button(new Rect(100, 300, 100, 50), "Int"))
        {
            messge += ("\n" + myObj.Call("GetInt", 456).ToString());
        }

        if (GUI.Button(new Rect(100, 400, 100, 50), "String"))
        {
            messge += ("\n" + myObj.Call("GetString", "String"));
        }
      
        GUI.Label(new Rect(Screen.width / 2 - 350, Screen.height / 2 - 150, 700, 300), messge);
    }
}



< 결과 화면 >




처음에도 말했듯이 연동방법에는 몇가지가 있습니다.


자신이 편한걸로 하면 되지 않을까하네요.


그리고 문서를 보니 통신하는게 부하가 많이 발생한다고 합니다.


가능하면 최적의 호출로 해야겠네요.


도움되셧길 바랍니다.



* 플러그인만들기 추가



+ Recent posts