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直接使用.java文件_第1张图片

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

https://blog.csdn.net/pgw00k/article/details/83542724

你可能感兴趣的:(Android,Unity基础)