unity与android交互-2.c#调用java代码
Posted mr.chenyuelin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,打开模拟器测试
以上是关于unity与android交互-2.c#调用java代码的主要内容,如果未能解决你的问题,请参考以下文章