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)); }
相关文章推荐
- Unity 编辑模式下快速移动其它gameObject到当前gameObject位置处
- Unity Json
- 再详细的介绍一下Unity5的AssetBundle
- Unity5的AssetBundle的一点使用心得
- Unity3D研究院编辑器之创建Lua脚本模板(十六)
- Unity3D Editor 编辑器简易教程
- UnityTestTool实用解释
- Unity5 发送广播与消息的探索
- Vector方法magnitude
- unity 使用xcode5.1 launching iOS project via Xcode5 failed
- Unity3d官方单元测试插件学习
- Spine导入Unity
- Unity3D教程宝典之两步实现超实用的XML存档
- Unity3D教程:换装方法
- Unity5 关于修改组件GameObject的Color与mainTexture的探索
- UnityEditor中建立两个Color,实现mesh的颜色渐变(Gradient)(GUI.changed,SceneView.RepaintAll())
- Unity中用到的C#补充(五)- 简单的本地存储
- Unity中用到的C#补充(四)- Array,ArrayList,List,Drictionary,Hashtable
- Unity3D 语句 objCube.GetComponent<Renderer>().material.color 报错
- Unity3D游戏开发游戏读/存档在Unity3D中的实现