Android|Unity直接使用.java文件
目录
环境配置说明
前言
准备一个.java插件的源文件
Unity工程
调用安卓自Toast功能
不想复制粘贴的,可以下载工程查看
环境配置说明
Unity2018.4.12f1(64bit),Visual Studio Pro 2019
前言
从Unity2018.2版本以后,Unity已经可以直接编译 .cpp、.a、.java 文件作为 插件 在Unity程序中使用了,可以节省下使用VS、AS、XCode进行插件开发的导出调试的步骤,十分方便。我们以.java为例
准备一个.java插件的源文件
package com.unity.androidplugin;
public class MathClass { //方式二 unity设置context
public static int Add(int a,int b)
{
return a+b;
}
}
Unity工程 将MathClass.java文件放在Plugins文件夹下面
public Text Log;
AndroidJavaObject jo_MathClass;
// Start is called before the first frame update
void Start()
{
jo_MathClass = new AndroidJavaObject("com.unity.androidplugin.MathClass");
}public void MathTest()
{
try
{
int result = jo_MathClass.CallStatic("Add", 2, 3);
Log.text = result.ToString();
}
catch (Exception e)
{
Log.text = e.Message;
}}
打包apk,测试调用即可调用成功;
此外另外另外两个参考文章调用安卓自带的Toast功能,需要有一个显示容器,在此即为Activity,此功能可以在安卓工程设置,也可以在unity工程内完成
调用安卓自Toast功能 自己写了一下,以供参考,java类

文章图片
Unity调用
using UnityEngine;
using System;
using UnityEngine.UI;
public class Test : MonoBehaviour
{
public Text Log;
AndroidJavaClass jc_UnityPlayer;
AndroidJavaObject jo_UnityActivity;
AndroidJavaObject jo_MyJavaClass1;
AndroidJavaObject jo_MyJavaClass2;
AndroidJavaObject jo_MathClass;
// Start is called before the first frame update
void Start()
{
jc_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo_UnityActivity = jc_UnityPlayer.GetStatic("currentActivity");
jo_MyJavaClass1 = new AndroidJavaObject("com.unity.androidplugin.MyJavaClass1");
jo_MyJavaClass1.CallStatic("SetContext", jo_UnityActivity);
jo_MyJavaClass2 = new AndroidJavaObject("com.unity.androidplugin.MyJavaClass2");
jo_MathClass = new AndroidJavaObject("com.unity.androidplugin.MathClass");
}void Update()
{
if (Input.GetMouseButtonDown(0) && Input.touchCount == 1)
{
UnityCallJava("单击");
}
else if (Input.GetMouseButtonDown(0) && Input.touchCount == 2)
{
UnityCallJava("双击");
}
}public void Method1()
{
try
{
jo_MyJavaClass1.CallStatic("ShowToast", "方式一");
Log.text = "方式一";
}
catch (Exception e)
{
Log.text = e.Message;
}
}
public void Method2()
{
UnityCallJava("方式二");
}
void UnityCallJava(string msg)
{
try
{
Log.text = msg;
jo_MyJavaClass2.CallStatic("ShowToast", msg, jo_UnityActivity);
}
catch (Exception e)
{
Log.text = e.Message;
}
}public void MathTest()
{
try
{
int result = jo_MathClass.CallStatic("Add", 2, 3);
Log.text = result.ToString();
}
catch (Exception e)
{
Log.text = e.Message;
}
}
}
不想复制粘贴的,可以下载工程查看 https://download.csdn.net/download/yhx956058885/12028548
参考
https://blog.csdn.net/final5788/article/details/96596679
【Android|Unity直接使用.java文件】https://blog.csdn.net/pgw00k/article/details/83542724
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 宋仲基&宋慧乔(我们不公布恋情,我们直接结婚。)
- 带有Hilt的Android上的依赖注入
- Hive常见问题汇总
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 深入理解|深入理解 Android 9.0 Crash 机制(二)