unity与android交互-2.c#调用java代码

制作jar包

创建一个java module,两种方式

第一种:
点击File->new Module,选择anroid Library
在这里插入图片描述
第二种:
直接新建一个空项目,修改build.gradle里的内容
在这里插入图片描述
在这里插入图片描述
就是把plugins的id改为com.android.library,android里处这两行其余内容删掉,然后点击sync

就会发现我们的项目变成了java module
在这里插入图片描述
这里在包下新建test类,写个java测试代码,待会供c#调用

package com.example.testunity;

import android.util.Log;

public class Test {
    public  static  String LOG="LOG";
    public  String name;
    public  static  void SetLOG(String log)
    {
        LOG=log;
        Log.d(LOG,"setLOG:"+log);
    }
    public  static String GetLOG()
    {
        Log.d(LOG,"GetLOG:"+LOG);
        return LOG;
    }
    public void SetName(String name)
    {
        this.name=name;
        Log.d(LOG,"SetName:"+name);
    }
    public String GetName()
    {
        Log.d(LOG,"GetName:"+name);
        return this.name;

    }
}

然后点击Build->make project

将Android改为Project,在app下会生成build文件夹,我们生成的jar就是图中所示
在这里插入图片描述
buid文件夹里,我们就关心libs_directory文件夹和main_jar文件夹
libs_directory:里依赖的一些库
main_jar:项目的jar包

最后在unity中新建Plugins文件夹,将classes.jar放进去即可
在这里插入图片描述

jar包是沟通c#和java的桥梁

c#调用java代码

c#代码:

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

public class TestCallJava : MonoBehaviour
{
    //AndroidJavaClass是用来访问静态的成员
    AndroidJavaClass javaClass = null;
    //AndroidJavaObject是访问普通成员
    AndroidJavaObject javaObject = null;
    // Start is called before the first frame update
    void Start()
    {
        javaClass = new AndroidJavaClass("com.example.testunity.Test");
        javaObject = new AndroidJavaObject("com.example.testunity.Test");
        
    }
    //访问普通成员方法
    public void click()
    {
        //泛型为返回值,括号为方法名
        string s1 = javaObject.Call<string>("GetName");
        //第一个参数为方法名,第二个为参数列表
        javaObject.Call("SetName", "456");

    }
    //访问静态成员方法
    public void onclick2()
    {
        string s2Static = javaClass.CallStatic<string>("GetLOG");
        javaClass.CallStatic("SetLOG", "android");
    }
    //访问普通成员变量
    public void onclick3()
    {
        string s = javaObject.Get<string>("name");
        javaObject.Set("name", "123");
        
    }
    //访问静态成员变量
    public void onclick4()
    {
        string staticStr = javaClass.GetStatic<string>("LOG");
        javaClass.SetStatic("LOG", "ios");
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}

自己随便搞4个按钮,供测试

打包为apk然后在模拟器上运行,记得模拟器要连接android studio

然后点击按钮测试一下
在这里插入图片描述
这样就调用成功了

java调用c#代码

找到编辑器这个路径下C:\softs\unity\Editor\2020.1.17f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar包放到libs文件夹下
在这里插入图片描述
右键这个jar包点击add this library选择哪一个android项目添加unity类库,然后jar包下会出现3个文件夹
在这里插入图片描述

然后就可以在java程序里添加unitySendMessage方法

public  static  void SetLOG(String log)
    {
        LOG=log;
        Log.d(LOG,"setLOG:"+log);
        //第一个参数为挂载脚本的物体名字,第二个为方法名,第3个为参数列表
        UnityPlayer.UnitySendMessage("Main Camera","test","");
    }

当c#调用java的setlog方法,UnitySendMessage会找到对应的场景

public void test()
    {
        text.text = "hello";
    }

同样的要build project,然后把jar放进unity项目,然后打包成apk,打开模拟器测试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值