Unity与Android接口互相调用
Unity调用Android
制作jar包
1在Eclipse中创建一个安卓工程
2记住包名 com.gdidq.androidmethod
3将D:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes,jar 引用到工程
编写java类
package com.gdidq.androidmethod;
import com.unity3d.player.UnityPlayerActivity;
public class UserMethod extends UnityPlayerActivity{
public static int myadd(int a, int b)
{
System.out.println("int android myadd" );
return a+b;
}
public static void testadd(int a , int b)
{
System.out.println("int android testadd result iS" + (a+b) );
}
}
导出jar包 只导出这个文件就好 (涉及什么文件就勾选什么)
将导出的jar包放在指定目录 工程Assets\Plugins\Android\libs\
Unity -> PlayerSettings 安卓选项中 Bundle Identifer 和包名保持一致
Unity部分关键代码
using UnityEngine;
using System.Collections;
public class TestManager : MonoBehaviour
{
private const string AndroidJavaFacebookClass = "com.gdidq.androidmethod.UserMethod";
#if UNITY_ANDROID
private AndroidJavaClass usermethod;
private AndroidJavaClass UserMethod
{
get
{
if (usermethod == null)
{
usermethod = new AndroidJavaClass(AndroidJavaFacebookClass);
if (usermethod == null)
{
throw new MissingReferenceException(string.Format("AndroidFacebook failed to load {0} class", AndroidJavaFacebookClass));
}
}
return usermethod;
}
}
#endif
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnGUI()
{
if (GUI.Button(new Rect(100,100,100,50),"testadd"))
{
#if UNITY_ANDROID
Debug.Log("touch button in Unity");
UserMethod.CallStatic("testadd", 2,3);
int temp = UserMethod.CallStatic<int>("myadd", 2,3);
Debug.Log("result in unity = " + temp);
#endif
}
}
}
Android调用Unity
需要引用 com.unity3d.player.UnityPlayer 这个类
import com.unity3d.player.UnityPlayer;
UnityPlayer.UnitySendMessage("Unity中的GameObject","GameObject对应脚本中的函数名","传递到Unity中的string")
以传到Unity中的Main Camera为例
为Main Camera 创建一个脚本 在脚本中添加 FromAndroid 函数
void FromAndroid(string str)
{
Debug.Log("Unity recieve str = " + str);
}
修改java文件中的testadd函数 由于改函数没有返回值 试着调用Unity中的函数来将结果传递过去
public static void testadd(int a , int b)
{
System.out.println("int android testadd result iS" + (a+b) );
// 对象名 接受消息的方法 发送的消息内容
UnityPlayer.UnitySendMessage("Main Camera","FromAndroid","dong test send message to unity from android + result"+ (a+b));
}