查看: 1013|回复: 0
打印 上一主题 下一主题

[其他] Unity调用android中的方法

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2016-7-31 18:36:56 |只看该作者 |倒序浏览

在实际开发中有时候会遇到Unity自身不好实现的功能,这时候就需要其他工具参与开发,效率会高很多。我这里就研究了一下Unity与Android的一些交互[color=rgb(85, 85, 85) !important]问题,就是通过Unity来调用Android的方法。其中涉及到android类的jar打包,Unity的调用,Unity中添加访问权限。第一步:在android工程中创建一个类名为Test,不继承Activity。写两个方法,然后通过Unity去调用,方法如下
        private int Test1(int i,int j)
        {
                return i+j;
        }
       
        public int Test2(int i,int j)
        {
                return i+j;
        }
第二步:把这个Test类导出jar包,注意是这个单独的类。

第三步:在Unity工程中创建文件Plugins-Android。并且把jar包放到里面。
第四步:在Unity中创建一个Test测试类,打包到手机测试,代码如下
    int test1;
    int test2;
    string exmessage;

    AndroidJavaObject jc;

    void Start()
    {
        try
        {
            jc = new AndroidJavaObject("com.hj.bletest.MainActivity");
        }
        catch (Exception ex)
        {
            exmessage = ex.Message;
        }
    }


   void OnGUI()
    {
        GUILayout.Label("ex=" + exmessage);
        test2 = jc.Call<int>("Test2", 1, 1);//调用方法
        test1 = jc.Call<int>("Test1", 2, 2);
        GUILayout.Label("test2=" + test2);
        GUILayout.Label("test1=" + test1);
    }

第五步:添加Activity类。android需要继承Activity类,所以为了能使用这个类中的方法,可以把Unity的Activity类赋值给android。
1.在android的Test类,添加方法,重新打jar包,导入
        private Activity context;
        void SetUnityActivity(Activity activity )
        {
                context = activity;
        }

2.在Unity中进行赋值:
    void Start()
    {
        try
        {
            jc = new AndroidJavaObject("com.hj.bletest.MainActivity");
        }
        catch (Exception ex)
        {
            exmessage = ex.Message;
        }

        try
        {
            AndroidJavaClass ajc = new AndroidJavaClass("com.[color=rgb(85, 85, 85) !important]unity3d
.player.UnityPlayer");
            AndroidJavaObject jo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
            jc.Call("SetUnityActivity", jo);//调用android的SetUnityActivity方法,把currentActivity赋值给android
        }
        catch (Exception ex)
        {
            ex2 = ex.Message;
        }               
    }

第六步:开发过android的朋友都应该知道android需要配置一些权限,比如我现在开发蓝牙功能。那么我在Unity安装环境中找到AndroidManifest.xml配置文件,添加权限如下:
  <uses-permission android:name="android.permission.BLUETOOTH" />
  <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

至于这个文件的路径可以参考:Unity-Editor-Data-PlaybackEngines-AndroidPlayer-Apk-AndroidManifest.xml
需要注意的是如果在Plugins-Android文件夹下已经创建了AndroidManifest.xml配置文件(SDK接入),那么只需要修改该配置文件就可以了。调试只能看android端的。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-17 12:39 , Processed in 0.566949 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部