一、加载unity包
1.将准备好的unity包放到libs文件夹中
Kotlin
app :
-libs
-unityLibrary-release.aar //放到这里
-src
-main
2.在build.gradle.kts(app:)中加载
Kotlin
...
android{
...
sourceSets["main"].jniLibs.srcDir("libs")
}
dependencies{
...
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("unityLibrary-release.aar"))))
...
}
二、在activity中加载unity
Kotlin
package com.base.example
import android.os.Bundle
import android.widget.Toast
import com.unity3d.player.UnityPlayer
import com.unity3d.player.UnityPlayerActivity
class MainActivity : UnityPlayerActivity() {
companion object {
var currentActivity : MainActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (mUnityPlayer == null) {
mUnityPlayer = UnityPlayer(this)
UnityPlayer.currentActivity = this
currentActivity = this
}
// 请求焦点以确保Unity能够接收输入
mUnityPlayer?.requestFocus()
// 确保Unity知道窗口获得焦点
mUnityPlayer?.windowFocusChanged(true)
/**
* @param 调用unity 的onRewarded方法
* 第一个参数 是和unity开发沟通确定的命名
* 第二个参数 要调用的方法名
* 第三个参数 传递给unity的方法参数
*/
UnityPlayer.UnitySendMessage("Android", "onRewarded", "")
}
fun showAd() {
Toast.makeText(this, "被unity触发的方法", Toast.LENGTH_SHORT).show()
}
override fun onStart() {
super.onStart()
mUnityPlayer?.windowFocusChanged(true)
}
// 活动暂停时的回调
override fun onPause() {
super.onPause()
mUnityPlayer?.pause()
}
// 活动恢复时的回调
override fun onResume() {
super.onResume()
mUnityPlayer?.resume()
}
// 活动停止时的回调
override fun onStop() {
super.onStop()
mUnityPlayer?.windowFocusChanged(false)
}
// 活动销毁时的回调
override fun onDestroy() {
super.onDestroy()
// mUnityPlayer?.quit() // 退出 UnityPlayer
mUnityPlayer = null // 释放 UnityPlayer 实例
}
}
在AndroidManifest.xml中,建议添加configChanges配置
Kotlin
<activity android:name=".MainActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density"
android:exported="false"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
android:resizeableActivity="false"
android:screenOrientation="portrait" />
注意事项:
- unity那边需要知道androdi端加载unity的activity的路径,如:上面示例中的应该是:com.base.example.MainActivity
2.必须暴露currentActivity 给外部,这样unity才能通过currentActivity调用安卓方法
3.生命周期必须做同步