UM3L6——Android中嵌入Unity内容

Android中嵌入Unity内容

在进行 Android 开发时,可能会有需求显示 Unity 开发的 3D 内容,一开始我们启动的是 Android 应用程序中的 Activity
通过 Activity 我们想要打开 Unity 开发的内容进行展示,这就是 Android 中嵌入 Unity 内容的意思

注意:

Android 中嵌入 Unity存在限制问题,退出 Unity 所在的 Activity 会退出整个 App,不能达到我们想要的需求
所以如果存在 Android 和 Unity 混合开发的情况,建议采用上节课的Unity中嵌入Android 的方式,本节课内容主要做为拓展知识

新建Unity测试项目

  1. 在该项目中添加一些测试内容,比如方块旋转

    1
    2
    3
    4
    5
    6
    7
    8
    9
    using UnityEngine;

    public class Test : MonoBehaviour
    {
    void Update()
    {
    this.transform.Rotate(Vector3.up * 20 * Time.deltaTime);
    }
    }
  2. 将该项目发布为Android工程

新建Android测试项目

  1. 新建一个Android工程

  2. 将知识点二中导出内容中的 unityLibrary 文件夹拷贝到Android工程中

    image

  3. 将知识点二中导出内容中的 launcher 文件夹中的 res 中的内容拷贝到 unityLibrary 文件夹中合并(遇到同名文件请跳过)

    image

  4. 修改安卓工程中的 settings.gradle 文件,在最后添加 include ':unityLibrary'​ 并 点击右上角同步(Sync now

    image

  5. 修改安卓工程中的 gradle.properties 文件,
    在最后添加 unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
    并点击右上角再次同步(try again

    image

  6. 修改安卓工程中 app 文件夹中的 build.gradle 文件,在依赖项中 添加 implementation project(':unityLibrary')

    image

  7. 在主Activity中添加一个用于跳转的按钮,并为该按钮添加监听事件,用于打开Unity的Activity

    布置界面:

    image

    MainActivity为按钮添加监听方法并实现切换到Unity的Activity的逻辑

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.taikr.androidproject;

    import androidx.appcompat.app.AppCompatActivity;

    import android.content.Intent;
    import android.os.Bundle;

    import com.unity3d.player.UnityPlayerActivity;

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //找到btnUnity按钮,并为其添加按下监听方法
    findViewById(R.id.btnUnity).setOnClickListener(view -> {
    //打开Unity的Activity
    Intent intent = new Intent(this, UnityPlayerActivity.class);
    startActivity(intent);
    });
    }
    }
  8. 修改两个 AndroidManifest.xml 文件,让主Activity的作为主Activity,删除Unity相关Activity的设置

    image

打包测试

设置密钥,进行打包,用模拟器或者真机进行测试,显示效果如下:

Screenshot_20240404_150513_com.taikr.androidprojeScreenshot_20240404_150519_com.taikr.androidproje

左:进入应用显示;右:点击中间按钮显示