Unity Android开发流程与Unity3D教程

前言

本案例使用Unity 2020.3.39f1c1与Android Studio 2021.3.1
前提条件
1.你的Unity已经安装好Android平台模块,可以在UnityHub中查看。
2.Android Studio IDE已经安装好了,测试工程项目能正常运行。(如果未安装Android Studio 可以查看我的另外一篇文章《 Android Studio IDE安装指南》)

一、创建Unity项目并导出

首先创建一个Unity空项目,在空场景中创建一个空物体名字为UnityGameDataMgr

注意:这个名字是等会再Android中向Unity发送消息时的API中必须要传的参数

然后在UnityGameDataMgr空物体上添加一个脚本,脚本中的代码如下:

登录后复制


using UnityEngine;
using System;
using UnityEngine.UI;

public class GameDataMgr : MonoBehaviour
{
    public Button Btn_UnityExit;
    public Button Btn_ShowMainActivityQuit;
    public Button Btn_ShowMainActivityUnload;
    public Text Txt_FormAndroidMessage;
    string userData = "用户信息(UseData):张三,22,男";

    private void Awake()
    {
        DontDestroyOnLoad(this);
    }
    
    private void Start()
    {
        Btn_UnityExit.onClick.AddListener(OnQuitUnity);
        // 点击ShowMainActivityUnload按钮调用
        Btn_ShowMainActivityUnload.onClick.AddListener(() =>
        {
            CallAndroidMethod("showMainActivity", false, ("UnloadSend:" + userData));
        });
        // 点击ShowMainActivityQuit按钮调用
        Btn_ShowMainActivityQuit.onClick.AddListener(() =>
        {
            CallAndroidMethod("showMainActivity", true, ("QuitSend:" + userData));
        });
    }

    /// <summary>
    /// 调用UnityGameActivity的方法
    /// </summary>
    /// <param name="methodName">Android方法名称</param>
    /// <param name="isFinish">方法参数1:是否结束UnityGameActivity</param>
    /// <param name="data">方法参数2:具体数据</param>
    private void CallAndroidMethod(string methodName, bool isFinish, string data)
    {
#if UNITY_ANDROID
        try
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            jo.Call(methodName, isFinish, data);
        }
        catch (Exception e)
        {
            Debug.LogError(e.Message);
        }
#endif
    }

    /// <summary>
    /// Android调用方法 在安卓UnityGameActivity OnCreate调用
    /// </summary>
    /// <param name="str"></param>
    public void sendMessageToUnity(string str)
    {
        Debug.Log("Unity获取Android MainActivity发送过来的Token信息: " + str);
        Txt_FormAndroidMessage.text = "来自Android MainActivity信息:" + str;
    }

    #region Unity程序原生方法
    void OnQuitUnity()
    {
        Application.Quit();
    }
    #endregion
}

Unity UGUI Canvas布局层级结构如下:

unity android 流程 android unity3d教程_android studio


unity android 流程 android unity3d教程_unity android 流程_02

然后在File->Build Settings中将平台切换到Android

unity android 流程 android unity3d教程_android_03

按照上图的指示操作然后在Player Settings中配置Other Settings其中的选项

1.设置Package Name。这个必须要与Android中的包名一致(不一致好像也可以)。

2.设置Minimum API Level 。这个一定要与Android Studio中保持一致,如果不一致,在Android Studio中发布时会报错。

3.设置Scripting BackedIL2CPP,设置Api Compatibility Level 为**.NET Standard 2.0**。

4.4.设置Target Architectures。选择 ARMv7ARM64(可选)

unity android 流程 android unity3d教程_unity android 流程_04


4.设置签名(非必要)。我这里没有设置,但是之前设置了也能正常运行,这里跟签名应该没有太大关系,我的都没有设置,看下图(如果使用IL2CPP打包APK出错可能就需要设置)

unity android 流程 android unity3d教程_android_05


5.最后就是点击Build Settings中的Export导出Android中需要的项目,导出的文件夹与Unity项目的关系,如果你是第一次看着我的博客教程跟着做,那么请按照我的文件夹的命名与结构来做,因为在Android Studio中需要根据路径引入Unity发布出来的安卓项目。Unity项目目录与安卓项目目录之间的关系

unity android 流程 android unity3d教程_android studio_06

至此,Unity中设置已经完成。

二、创建Android项目并引入

创建安卓项目,选择Empty Activity->Next

unity android 流程 android unity3d教程_unity_07


unity android 流程 android unity3d教程_android studio_08

注意:Minimum SDK版本与Unity两者保持一致

注意:创建出来的Android项目下方没有任何报错才可以,像下图一样

unity android 流程 android unity3d教程_Android_09


创建完成后,开始导入Unity Build出来的包

三、导入Unity项目(模块)

这里有两种做法,

第一种,直接打开刚刚用Unity导出的项目文件夹做为一个Android项目; 第二种,把导出的项目里面的unityLibrary文件夹做为一个模块来用;

这里选择第二种方式导入

1.导入unityLibrary模块

File -> New -> Import Module

unity android 流程 android unity3d教程_unity_10


unity android 流程 android unity3d教程_android_11


不出意外这个时候应该会报错

unity android 流程 android unity3d教程_unity_12

导入之后会出现一系列的错误提示,不过不要慌,问题不大,下面开始进行配置。

2.unityLibrary模块配置

2.1.项目settings.gradle文件配置

在项目settings.gradle文件里添加两行代码

unity android 流程 android unity3d教程_unity_13

登录后复制


include ':app',':unityLibrary'
rootProject.name = "AndroidAPP"
//--上面两句应该本身就有不需要添加--

//括号里的是你的unityLibrary所在的路径
project(':unityLibrary').projectDir=new File('..\\UnityAndroidBuild\\unityLibrary')

unity android 流程 android unity3d教程_android_14


在项目settings.gradle文件里添加

登录后复制


flatDir {
	dirs "${project(':unityLibrary').projectDir}/libs"
}

unity android 流程 android unity3d教程_unity android 流程_15

项目settings.gradle文件最终配置就是上面这样的。

2.2.app模块文件配置
在app模块下的build.gradle文件里面加上

登录后复制


implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

unity android 流程 android unity3d教程_unity_16


同时还是在app模块下的build.gradle文件里面添加引入SO库架构,如下代码

注意:添加引入SO库架构,如果不添加,构建出来的app运行时会闪退,并且报错:can not find ‘libmain.so’


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

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

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

* 公司名称:

姓名不为空

手机不正确

公司不为空