Unity是否可以用Java编写?Java引擎集成探索


环境配置说明

Unity2018.2.2f1(64bit),Visual Studio Pro 2017

前言

从Unity2018.2版本以后,Unity已经可以直接编译 .cpp、.a、.java 文件作为 插件 在Unity程序中使用了,可以节省下使用VS、AS、XCode进行插件开发的导出调试的步骤,十分方便。

准备一个.java插件的源文件

我这里以发送安卓Toast消息为例,实现一个在Unity中发送屏幕Toast消息。
那么先编写一个.java的源码:

登录后复制

package com.unity.androidplugin;

import android.content.Context;
import android.os.Environment;
import android.widget.Toast;

public class AndroidToast {
	//设置显示页面,没有这个Toast不会显示
    public static Context ShowContext = null;

    public static void SetContext(Context con) {
        ShowContext = con;
    }

    public static void ShowToast(String info, Context con) {
        Toast.makeText(con, info, Toast.LENGTH_LONG).show();
    }

    public static void ShowToast(String info) {
        Toast.makeText(ShowContext, info, Toast.LENGTH_LONG).show();
    }

}

添加到Unity工程中

路径的话默认使用 Asset/Plugins/Android ,似乎添加子目录也可以,不过尚未测试,看到网上说是可以的,总而言之要在 Plugins/Android 路径下。

在Unity中使用

那么前期准备工作完成了,那么要如何在Unity中调用呢,这里Unity也已经为我们准备了相当方便的 AndroidJavaClassAndroidJavaObject 这两个类,相信之前做过的Unity和安卓交互的同学应该相当熟悉了,那么以下是方法。
首先,先看我们.java源文件中,我声明的包名和类名:

package com.unity.androidplugin; public class AndroidToast

相信有过安卓开发的朋友已经懂了,其实我们需要的真正类名是 包名+类名,即 com.unity.androidplugin.AndroidToast,知道这个就简单了,上C#代码:

登录后复制

AndroidJavaClass jc = new AndroidJavaClass("com.unity.androidplugin.AndroidToast");
            AndroidJavaClass jc_UnityDefault = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo_UnityActivity = jc_UnityDefault.GetStatic<AndroidJavaObject>("currentActivity");
            jc.CallStatic("SetContext",jo_UnityActivity);
            jc.CallStatic("ShowToast", "Unity Call");
            

需要注意的就是,为了能让Toast显示出来,我们必须有一个显示容器,在此即为Activity,所以我先调用了 SetContext 函数设置了Unity默认的Activity为容器,这个具体原理可以看看其他Unity和安卓交互的文章。

另外,一定要注意 调用方法实际方法参数 还有 返回值 的一一对应,如上例所示,java方法为static标记的,则必须用CallStatic调用,否则无效,这个推测和堆栈有关。
其次,java方法有返回函数的也必须使用
Call<Type> 去调用,否则无效,这个推测和java机制有关,大概是必须根据返回值类型和参数去查找对应的函数反射,举例,java中有一个 public boolean ShowToastOK(String info) 的函数,则必须使用 jc.Call<bool>("ShowToastOK","Data") 这样的形式去调用。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空