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 initializationvoid Start () {}// Update is called once per framevoid 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));}





更多相关文章

  1. Android 文件操作,删除,拷贝文件等
  2. Android系统源码编译全过程——下载Android源文件并编译
  3. [Android] 文件夹下文件的个数限制
  4. Android之Telephony各文件解释
  5. Android 自定义View及其在布局文件中的使用示例(二)
  6. Android OpenGL库函数列表
  7. android UI设计之 背景透明色 项目资源文件关系

随机推荐

  1. RelativeLayout用到的一些重要的属性
  2. Android Framework中添加AIDL文件编译
  3. android添加动画效果
  4. Android控件笔记——CheckBox复选框
  5. android GridView android:stretchMode="
  6. Android开发神贴整理
  7. Android Manifest merger failed :tools:r
  8. android 编译
  9. Android中的Service 与 Thread 的区别
  10. Android系统中自带的图标