在 Adroid 项目中集成 Unity 工程,主要步骤如下:
一、前提条件
1、已有一个 Android 工程项目;
2、Unity 工程已导出为 Android 工程,目录大概如下:
二、集成步骤
1、在 Android 工程中导入 Unity 工程的 unityLibrary 模块。
在 Android Studio 中,点击菜单栏 File -> New -> Import Module… 打开导入模块窗口,选中 Unity 工程中的 unityLibrary 进行导入。
由于 Unity 工程通常有一定的大小,故在导入模块时可能会花比较久时间,有时会导致界面卡顿,请耐心等待。
2、修改配置信息
导入模块后,需要对 unityLibrary 模块的一些配置做修改,否则可能导致编译不通过,主要修改 build.gradle 和 AndroidManifest.xml 两个文件。
(1)unityLibrary/build.gradle 文件:
- android 标签中的 ndkPath 路径修改为本地工程的实际 NDK 路径;
- android 标签中将 compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion 这几个字段的值修改为 android 工程中适配的值;
- 将 BuildIl2Cpp 方法中的 android.ndkDirectory 修改为 android.ndkPath。
(2)unityLibrary/src/main/AndridManifest.xml 文件:
- 屏蔽 application 标签内容。
(3)app/build.gradle 文件
- dependencies 标签中增加对 unityLibrary 库的引用,以及相关 libs 路径的配置。
// unity
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), includes: ['*.jar'])
(4)app/src/main/res/values/strings.xml 文件
- 增加 game_view_content_description 字符串的定义,否则会导致编译不通过。
<string name="game_view_content_description">Game view</string>
(5)gradle.properties 文件
- 添加 unityStreamingAssets 字段的配置,否则会导致编译不通过。
unityStreamingAssets=.bytes, .json, .version, .hash, .rawfile
3、编译整个工程
修改完所有配置信息后,先点击 Android Studio 右上角的 “Sync Project with Gradle Files” 按钮进行同步工程,同步成功后再进行整个工程的编译(菜单栏中:Build -> Make Project)。
第一次编译时需要花费比较久时间,请耐心等待。
4、全屏方式导入 unity 界面
在 Android 工程中,想要全屏方式导入 unity 界面,只要定义一个 Activity 继承自 UnityPlayerActivity 即可。
(1)Android 工程向 Unity 工程发送数据
直接调用 UnityPlayer.UnitySendMessage 方法即可实现向 Unity 工程发送数据。
class MainActivity : UnityPlayerActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val message = "message"
UnityPlayer.UnitySendMessage(UnityConstants.UNITY_OBJECT_NAME, UnityConstants.UNITY_METHOD_NAME, message)
}
}
(2)Unity 工程向 Android 工程发送数据
需先在 Androi