2. unity接安卓sdk——联合篇:Jar包的相互调用

目录

第一种:Unity 为主导使用 使用安卓中的类和方法

1  写安卓脚本

2  导出jar包到unity

3. 写Unity 脚本 调用 安卓,

4. 打包,运行测试。

第二种:安卓调用unity的方法

1. 写安卓脚本

2. 导出Jar包

3. 在unity写脚本

4. 打包测试


在前边文章中我们配置好了环境,接下来我们开始使用脚本进行相互调用

 

第一种:Unity 为主导使用 使用安卓中的类和方法

1  写安卓脚本

复制:

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    public String UnityCallAndroid(){
        return "unity 调用 安卓里的方法";
    }
}

2  导出jar包到unity

1. 编译文件

2. 使用Project 视图,寻找AndroidManifest.xml,和classes.jar包。放到一个空的文件里,方便我们进行修改。

3. 修改AndroidManifest文件:也可以不修改,这里我们默认包名和设置的应用名字。

4. 复制到unity里

在untiy 中创建文件夹,名字为 Plugins,在Plugins中创建Android,在Android创建Libs,如图所示

这里请注意,一定要把AndroidMinifest 放到Android下边,不然识别不了。

5. 创建Test 对象,用于挂脚本。

    并且创建text_Test的Text对象,用于显示结果。

3. 写Unity 脚本 调用 安卓,

    写Unity 脚本 调用 安卓,创建Test脚本将脚本挂在Test 空对象上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public Text text_Test;
    // Start is called before the first frame update
    void Start()
    {
        text_Test = GameObject.Find("text_Test").GetComponent<Text>();
        //获得com.unity3d.player.UnityPlayer 下的类,对于扩展的Activity 是一个固定的写法。只要记住就行了
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //获得 jc 类中的 currentActivity 对象,也是一种固定的写法
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        //call 方法内的参数,第一个是要调用对象的方法名,第二个参数是这个方法的参数这里没有就不用填。
       string str= jo.Call<String>("UnityCallAndroid").ToString();
        text_Test.text = str;

    }
}

4. 打包,运行测试。

     配置包名

    

   进行了打包安装到手机测试,没有问题。

安卓源码和unity 源码请点击下载:下载源码

第二种:安卓调用unity的方法

1. 写安卓脚本

 

2. 导出Jar包

       同上边的导出操作一样,忘记的同学可以回到上边看看。

3. 在unity写脚本

      添加 AndroidCallUnity 函数。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public Text text_Test;
    // Start is called before the first frame update
    void Start()
    {

        //获得com.unity3d.player.UnityPlayer 下的类,对于扩展的Activity 是一个固定的写法。只要记住就行了
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        //获得 jc 类中的 currentActivity 对象,也是一种固定的写法
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        //call 方法内的参数,第一个是要调用对象的方法名,第二个参数是这个方法的参数这里没有就不用填。
       string str= jo.Call<string>("UnityCallAndroid").ToString();
        text_Test.text = str+"\n";

    }

    //被安卓 调用的函数
    void AndroidCallUnity(string str)
    {
        text_Test.text =  str+"\n";
    }

}

4. 打包测试

        根据以上可以看出来,先调用的unity里的start 方法:unity调用安卓,后是Activity 调用的unity。

安卓源码和unity 源码请点击下载:下载源码

有帮助给博主点个赞吧!有问题就留言

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值