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(安卓)LayoutInflater 源码分析
  2. Android(安卓)API学习 SoundPool 和 MediaPlayer
  3. android studio从Eclipse迁移
  4. Android(安卓)内存溢出(Out Of Memory)的总结
  5. android 之activity生命周期(转载)
  6. Android(安卓)Interface Definition Language (AIDL) android接
  7. Android(安卓)保存和恢复activity的状态数据
  8. Android(安卓)jni中数组参数的传递方式
  9. 箭头函数的基础使用

随机推荐

  1. 努力真的可以逆袭吗?和你们聊聊前辈们的故
  2. 大数据分析平台如何基于 OpenShift 实现
  3. 规约模式,颤抖吧产品经理!再也不怕你乱改需
  4. 双 VIOS 环境如何配置心跳网卡?
  5. 传统架构云化后的运维,维护的是什么?
  6. 小白前端入门笔记(七),HTML5中的main标签
  7. 针对存储替换迁移中风险点的关键策略分析
  8. 给你一个理由学习Linux,树莓派4免费送
  9. 一文看懂分布式数据库原理和 PostgreSQL
  10. Docker+k8s 容器云建设中 10 个常见难点