¾ÕÀåÀÇ ³»¿ëÀ» ÂüÁ¶Çؼ Ä¿½ºÅÒ À¯´ÏƼ Ç÷¹ÀÌ¾î ¾×ƼºñƼ¸¦ ¸¸µé¾î º¸ÀÚ.
À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ
À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ2
"CustomUnityPlayerActivity"¸¦ ¸¸µé±â À§Çؼ´Â À¯´ÏƼÆú´õÀÇ UnityPlayerActivity.java ÆÄÀÏÀ» ÀÌ¿ëÇÑ´Ù.
[ À¯´ÏƼ ¼³Ä¡ Æú´õ ]\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player
¾Èµå·ÎÀ̵忡¼ UnityPlayer.UnitySendMessage ¸í·É¾î »ç¿ëÇϱâ
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 ÆÄÀÏÀ» Ãß°¡ ÇØ¾ß ÇÑ´Ù. )
MainActivity.java ÆÄÀÏÀ» ¼±ÅÃÈÄ ¿À¸¥ÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ¿© ( Refactor > Rename ) ¸Þ´º¸¦ Ŭ¸¯ÇÏ´ø°¡ ¾Æ´Ï¸é F2¸¦ Ŭ¸¯Çϸé Rename ´ëÈ»óÀÚ°¡ ¶á´Ù.
MainActivity ´ë½Å CustomUnityPlayerActivity¸¦ ÀÔ·ÂÇÏ¿© Ŭ·¡½º À̸§À» º¯°æÇÑ´Ù.
UnityPlayerActivity.java ¼Ò½º¸¦ ¸ðµÎ º¹»çÇؼ CustomUnityPlayerActivity.java¿¡ ºÙ¿© ³Ö±â ÇÑ´Ù.
package com.example.plugin;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import android.content.res.Configuration;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;
public class CustomUnityPlayerActivity extends Activity
{
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this);
if (mUnityPlayer.getSettings().getBoolean("hide_status_bar", true))
{
getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
}
// Quit Unity
@Override protected void onDestroy ()
{
mUnityPlayer.quit();
super.onDestroy();
}
// Pause Unity
@Override protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
// Resume Unity
@Override protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
// This ensures the layout will be correct.
@Override public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
// Notify Unity of the focus change.
@Override public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
// For some reason the multiple keyevent type is not supported by the ndk.
// Force event injection by overriding dispatchKeyEvent().
@Override public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.injectEvent(event);
return super.dispatchKeyEvent(event);
}
// Pass any events not handled by (unfocused) views straight to UnityPlayer
@Override public boolean onKeyUp(int keyCode,
KeyEvent event) { return
mUnityPlayer.injectEvent(event); }
@Override public boolean onKeyDown(int keyCode,
KeyEvent event) { return mUnityPlayer.injectEvent(event); }
@Override public boolean onTouchEvent(MotionEvent
event) { return
mUnityPlayer.injectEvent(event); }
/*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }
public void CallByUnity()
{
UnityPlayer.UnitySendMessage("Main
Camera","AndroidLog",">>>>>>>> From
CustomUnityPlayerActivity");
}
}
|
À¯´ÏƼ ¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ2ó·³ CustomUnityPlayerActivity¿Í Test Ŭ·¡½º ¸ðµÎ¿¡¼ 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");
}
}
|
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;
}
}
|
ÂüÁ¶ : Ç÷¯±×ÀÎ ¿©·¯°³ »ç¿ë½Ã res¿Í Manifest ÆíÁý¿¡ °ü·ÃµÈ ³»¿ë
http://limchaeng.tistory.com/?page=5
|