À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ2

À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×Àο¡¼­´Â À¯´ÏƼ¿¡¼­ ¾Èµå·ÎÀ̵å·Î È£ÃâÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¸¾Ò´Ù.
À̹ø Àå¿¡¼­´Â ¾Èµå·ÎÀ̵忡¼­ À¯´ÏƼ ½ºÅ©¸³Æ®¸¦ È£Ãâ ÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ­ ¾Ë¾Æº¸ÀÚ.

½ÇÇà ¼ø¼­´Â ´ÙÀ½°ú °°´Ù.

À¯´ÏƼ¿¡¼­ ¾Èµå·ÎÀ̵å È£Ãâ --> ¾Èµå·ÎÀ̵忡¼­ À¯´ÏƼ È£Ãâ --> À¯´ÏƼ ÇÔ¼ö ½ÇÇà

¾Èµå·ÎÀ̵忡¼­´Â UnityPlayer.UnitySendMessage ¸í·ÉÀ» »ç¿ëÇÏ¿© À¯´ÏƼ ½ºÅ©¸³Æ®¸¦ È£ÃâÇÑ´Ù.
¾Èµå·ÎÀ̵忡¼­ ÇؾßÇÒ ÀÛ¾÷¿¡ ´ëÇؼ­ ¸ÕÀú ¾Ë¾Æº¸ÀÚ.

¾Èµå·ÎÀ̵忡¼­ UnityPlayer.UnitySendMessage ¸í·É¾î »ç¿ëÇϱâ


< UntitySendMessage >

void com.unity3d.player.UnityPlayer.UnitySendMessage(String arg0, String arg1, String arg2)
arg0 : À¯´ÏƼ ¾ÀÀÇ ³ëµå À̸§
arg1: ÇÔ¼ö À̸§
arg2: ÇÔ¼ö ÀÎÀÚ

»ç¿ë¿¹´Â ´ÙÀ½°ú °°´Ù.
UnityPlayer.UnitySendMessage("Main Camera","AndroidLog",">>>>>>>> From Test.java");


¾ÕÀåÀÇ À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎÀÇ ³»¿ë¿¡ Ãß°¡ÇÏ¿© °è¼Ó ÀÛ¾÷ÇÑ´Ù.

1. ¾Èµå·ÎÀ̵å ÇÁ·ÎÁ§Æ® À̸§°ú À¯´ÏƼ ¹øµéÀ̸§À» µ¿ÀÏÇÏ°Ô ¸¸µç´Ù.

¾Èµå·ÎÀ̵å ÇÁ·ÎÁ§Æ® À̸§°ú À¯´ÏƼ ¹øµéÀ̸§À» µ¿ÀÏÇÏ°Ô ÇØ¾ß UnityPlayer¸¦ »ó¼ÓÇÑ Ç÷¯±×ÀÎÀ» Á¤»óÀûÀ¸·Î ·Îµù ÇÒ¼ö ÀÖ´Ù.
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

< ¾Èµå·ÎÀ̵å ÇÁ·ÎÁ§Æ® >




< À¯´ÏƼ ¹øµé À̸§ >




2. classes.jar ÆÄÀÏ Ãß°¡


¼Ó¼ºÃ¢À» ¿­¾î¼­  "Java Build Path"¸¦ ¼±ÅÃÇÑ´Ù.
Libraries ÅÇ¿¡¼­ "Add External JARs..." ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin Æú´õ¿¡¼­ "classes.jar" ÆÄÀÏÀ» Ãß°¡ÇÑ´Ù.
Apply ¹öÆ°À» ´­·¯¼­ Àû¿ëÇÑ ÈÄ¿¡ OK ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

3. classes.jar ÀÇÁ¸¼º ¼³Á¤



¼Ó¼ºÃ¢¿¡¼­ "Order and Export" ÅÇÀ» ¼±ÅÃÇÑ´Ù.
classes.jar¸¦ üũÇÑ´Ù.
Apply ¹öÆ°À» ´­·¯ Àû¿ëÇÑ ´ÙÀ½ OK ¹öÆ°À» Ŭ¸¯ÇÏ¿© ¼Ó¼ºÃ¢À» ´Ý´Â´Ù.

4. MainActivity.java ÆÄÀÏÀ» ¼öÁ¤ÇÑ´Ù.
( UnitySendMessage ¸í·É¾î¸¦ »ç¿ë ÇÒ·Á¸é À¯´ÏƼÀÇ classes.jar ÆÄÀÏÀ» Ãß°¡ ÇØ¾ß ÇÑ´Ù. )

Activity¸¦ »ó¼ÓÇÏ´ø°ÍÀ» UnityPlayerActivity »ó¼ÓÀ¸·Î ¹Ù²Ù¸é µÈ´Ù.

public class MainActivity extends UnityPlayerActivity {
//public class MainActivity extends Activity {

ÂüÁ¶ :

classes.jar ÆÄÀÏÀ» Ãß°¡Çϸé MainActity.java¿¡¼­ ´ÙÀ½ÀÇ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.



"import android.app.Activity"¸¦ Ãß°¡ÇÏ¸é ¿¡·¯´Â ÇØ°áÇÒ¼ö ÀÖ´Ù.
À¯´ÏƼ¿¡¼­ Ç÷¯±×ÀÎÀ» ½ÇÇàÇÏ¸é  Á¦´ë·Î ½ÇÇàÀÌ ¾ÈµÈ´Ù.

À¯´ÏƼ classes.jar ÆÄÀÏÀ» Ãß°¡ Çß´Ù¸é UnityPlayerActivity¸¦ »ó¼ÓÇÑ Å¬·¡½º¸¦ ¸¸µé´ø°¡ UnityPlayerActivity.java¸¦ ¼öÁ¤ÇÑ CustomUnityPlayerActivity Ŭ·¡½º¸¦ ¸¸µé¾î¾ß ÇÑ´Ù.

¿©±â¼­´Â UnityPlayerActivity¸¦ »ó¼ÓÇÏ¿©  ó¸®ÇÏ°í ÀÖ´Ù.

MainActivity.javaÀÇ CallByUnity()¿¡¼­ UnitySendMessage¸¦ È£ÃâÇÏ°í ÀÖ´Ù.

import com.unity3d.player.UnityPlayer;​

public static void UnitySendMessage(String obj, String method, String msg);​
  • obj : À¯´ÏƼ GameObject Name
  • method : Callback Method Name
  • msg​ : Message

UnitySendMessage·Î obj °ÔÀÓ¿ÀºêÁ§Æ®¿¡ ÀÖ´Â ½ºÅ©¸³Æ® ÄÄÆ÷³ÍÆ® method¸¦ È£ÃâÇÑ´Ù.

<MainActivity.java ¼Ò½º>
package com.example.plugin;

import android.os.Bundle;
import android.util.Log;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
//public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
   
    //À¯´ÏƼ¿¡¼­ È£ÃâµÇ´Â ÇÔ¼ö
    public  String CallByUnityString(String a)
    {
        return "Plugin object: " + a;
    }
   
    public  void CallByUnity()
    {
        UnityPlayer.UnitySendMessage("Main Camera","AndroidLog",">>>>>>>> From Android");
    }   
}


MainActivity.java¿¡¼­¸¸ UnityPlayerActivity¸¦ »ó¼ÓÇÏ¸é ´Ù¸¥ Ŭ·¡½º¿¡¼­´Â UnitySendMessage¸¦ ±×³É »ç¿ë ÇÒ¼ö ÀÖ´Ù.

<Test.java ¼Ò½º>
package com.example.plugin;

import com.unity3d.player.UnityPlayer;

public class Test {
    public static String GetStaticString(String a)
    {
        return "Plugin static: " + a;
    }
   
    public static int GetStaticInt(int a)
    {
        return a + 1000;
    }
   
    public String GetString(String a)
    {
        return "Plugin object: " + a;
    }
   
    public int GetInt(int a)
    {
        return a + 50000;
    }
   
    public  void CallByUnity()
    {
        UnityPlayer.UnitySendMessage("Main Camera","AndroidLog",">>>>>>>> From Test.java");
    }   
}

Test.javaÀÇ CallByUnity()¿¡¼­ UnitySendMessage¸¦ È£ÃâÇÏ°í ÀÖ´Ù.

5. Ç÷¯±×ÀÎ ÆÄÀÏ º¹»ç

classes.jar ÆÄÀÏÀ» »ç¿ëÇϸé ÀͽºÆ÷Æ®µÈ plugin.jar ÆÄÀÏ°ú ÇÔ²² res Æú´õ,  AndroidManifest.xml  ÆÄÀϵéÀ» À¯´ÏƼ Assets/Plugins/Android Æú´õ¿¡ º¹»çÇÑ´Ù.

±âÁ¸¿¡ res, AndroidManifest.xml ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù¸é ¸ÓÁöÇØ¾ß ÇÑ´Ù.




À¯´ÏƼ¿¡¼­ ½ÇÇà


1. Run MainActivity.java

UnityPlayerActivity¸¦ »ó¼ÓÇÑ MainActivity¸¦ ½ÇÇàÇÒ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù.

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject _activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");

ÇöÀç È°¼ºÈ­µÈ Activity¸¦ ¾ò¾î¿Â´Ù. ½ÇÇàÀº ´ÙÀ½°ú °°´Ù.

        _activity.Call( "CallByUnity");



2. Run Test.java

À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ ¿¡¼­ ½ÇÇàÇÏ´ø Test ¿ÀºêÁ§Æ®ÀÇ »ç¿ë¹ý°ú °°´Ù.

        AndroidJavaObject javaObject = new AndroidJavaObject("com.example.plugin.Test");
        javaObject.Call( "CallByUnity");



 À¯´ÏƼ Test.cs ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {

    public GUIText _gui;

#if UNITY_ANDROID
    AndroidJavaObject _activity;

    void Awake()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        _activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");
    }
#endif

    // Use this for initialization
    void Start ()
    {
   
#if UNITY_EDITOR
        _gui.text = "gui in Editor";
#elif UNITY_ANDROID
        /*
        AndroidJavaClass staticClass = new AndroidJavaClass("com.example.plugin.Test");
        string resStaticStr = staticClass.CallStatic<string>("GetStaticString", "GetStaticString");
        string str = resStaticStr + "\n";

        AndroidJavaObject javaObject = new AndroidJavaObject("com.example.plugin.Test");
        string dynamicStr = javaObject.Call<string>( "GetString", "GetString");
        str += dynamicStr;
        _gui.text = str;
        */

        //1. Run MainActivity.java
        _activity.Call( "CallByUnity");

        //2. Run Test.java
        //AndroidJavaObject javaObject = new AndroidJavaObject("com.example.plugin.Test");
        //javaObject.Call( "CallByUnity");       
#endif

    }

    public void AndroidLog(string str)
    {
        _gui.text = str;
    }
}


¾Èµå·ÎÀ̵å Plugin ÇÁ·ÎÁ§Æ® :  Plugin.zip
À¯´ÏƼ ÇÁ·ÎÁ§Æ® : PluginTest.zip


ÂüÁ¶)
https://docs.unity3d.com/kr/current/Manual/PluginsForAndroid.html