IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 记录AndroidStudio打包成aar供Unity调用 其中的坑和过程 -> 正文阅读

[游戏开发]记录AndroidStudio打包成aar供Unity调用 其中的坑和过程

公司让搞一套SDK 小白一个没有接过原生的SDK只能从头写起,看了很多文章 加上自己总结写出这个文章
问题一
UnityPlayerActivity找不到!
路径 Unity\Hub\Editor\2020.3.15f2c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player
这边建议直接目录拷贝过去在这里插入图片描述

Android Studio

创建工程,记住包名
在这里插入图片描述

在这里插入图片描述
名称随便 包名最好和项目名称保持一致

Android Studio中的配置和代码示例

首先导入classes.jar 路径unity\Hub\Editor\2020.3.15f2c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
在这里插入图片描述

ctrl+c,然后在AS Libs文件夹中ctrl+v,然后再点击Add as library
在这里插入图片描述
在这里插入图片描述
插件unity的Classes.jar包中是没有这个类存在的,这个时候我们需要在Untiy中找到UnityPlayerActivity,例如我的路径
路径 Unity\Hub\Editor\2020.3.15f2c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player
直接把这个包拷贝过来
在这里插入图片描述

然后修改build.gradle在这里插入图片描述
然后我们在MainActivity中写代码

package com.test.unityandroidtest;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
    public static MainActivity instance = null;  //单例类
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance=this;
    }
    //利用Toast
    public void SayHi(final String str)
    {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(),str,Toast.LENGTH_SHORT).show();
            }
        });
    }
    //计算两数之和
    public int GetSum(int num1,int num2)
    {
     return num1+num2;
    }

    public static void SendUnity(String str)
    {
        String newstr="我是Android传来的消息:"+str;
        UnityPlayer.UnitySendMessage("UnityAndroidConnect","AndroidCallUnityMsg",newstr);
    }
}

然后修改AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.unityandroidtest">

    <application>
      <!--表明这个Activity是启动Activity  路径-->
        <activity android:name="com.lj.unityandroid.UnityTestActivity">
           
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

android:属性大全
然后在AS中,标题任务栏 Build->Make Project.
一般的我们只要一个aar可以了
在这里插入图片描述

用压缩包打开aar包,删除里面libs里面的classes文件和res文件夹
在这里插入图片描述
打开classees.jar文件在这里插入图片描述

然后删除unity3d和删除test文件中的buildConfig.class

注:在unity打包的时候,如果遇到

这种D8:Program type already presen就表明资源重复了,上述两部都是 在删除多余的文件

Unity中

导入aar和xml
在这里插入图片描述
在这里插入图片描述

接着在unity中 新建一个gameobject,命名为UnityAndroidConnect,然后新添加一个脚本,写入代码

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

public class NewBehaviourScript : MonoBehaviour
{
    public Button btnToast, btnNum, btnString;
    public Text text;

    AndroidJavaClass jc;
    AndroidJavaObject androidInstance; //单例

    private void Start()
    {
        try
        {
            /* 下面的代码已不再适用
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            */

            //一定要写完整
            jc = new AndroidJavaClass("com.test.unityandroidtest.MainActivity");
            androidInstance = jc.GetStatic<AndroidJavaObject>("instance");
        }
        catch (Exception e)
        {
            text.text = "初始化错误:" + e.ToString();
        }
        btnToast.onClick.AddListener(MakeToast);
        btnNum.onClick.AddListener(GetSum);
        btnString.onClick.AddListener(UnitySendAndroid);
    }

    public void MakeToast()
    {
        try
        {
            androidInstance.Call("SayHi", "hello unity");
        }
        catch (Exception e)
        {
            text.text = e.ToString();
        }
    }

    public void GetSum()
    {
        try
        {
            int num = 90;
            int num2 = 90;
            num = androidInstance.Call<int>("GetSum", num, num2); //返回值Int方法
            text.text = "计算结果:" + num.ToString();
        }
        catch (Exception e)
        {
            text.text = e.ToString();
        }
    }

    public void UnitySendAndroid()
    {
        try
        {
            string str = "loveyou";
            jc.CallStatic("SendUnity", str); //静态方法 可以直接用AndroidJavaClass jc
        }
        catch (Exception e)
        {
            text.text = e.ToString();
        }
    }

    /// <summary>
    /// android 发来的消息
    /// </summary>
    /// <param name="recvMsg"></param>
    public void AndroidCallUnityMsg(string recvMsg)
    {
        text.text = "结果:" + recvMsg;
    }
}

在这里插入图片描述
测试成功 有啥问题大家一起探究

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-20 15:26:37  更:2021-08-20 15:26:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:52:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码