您的位置:首页 > 移动开发 > Unity3D

Unity与Android接口互相调用

2015-11-16 19:50 627 查看

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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: