這一次使用一下Unity官方給的示例來實(shí)現(xiàn)把Unity集成到安卓應(yīng)用。
一、版本說明
Android Studio:Android 3.6.1
Android Gradle Plugin Version:3.3.2
Gradle Version:4.10.1
Unity:2019.3.4f1

安卓工程準(zhǔn)備
1、如果沒有對(duì)應(yīng)的AndroidStudio版本,下載安裝對(duì)應(yīng)的版本,有可能會(huì)遇到首次啟動(dòng)啟動(dòng)不了問題。
在Android安裝目錄/bin/idea.properties這個(gè)文件的最后加上下面這句話。
disable.android.first.run=true
2、做安卓開發(fā)還是離不開梯子的,得準(zhǔn)備好梯子。
File->Settings->System Settings->Http Proxy
我這里選擇的是Manual proxy configuration。

3、建Empty Activity工程。

1、首次新建工程后一般進(jìn)來后不出意外Gradle都是會(huì)失敗的,可以選擇直接關(guān)閉掉Gradle的下載。然后自己手動(dòng)選擇。
File->Project Structure
選擇你自己本地已經(jīng)下載有的版本。
2、SDK版本選擇和Unity一樣的版本,能避免很多各種各樣層出不窮的兼容問題。
3、我查閱了一下Unity2019版本,要使用1.8版本的JDK。在unity工程中,我是直接使用的是編輯器自帶的JDK。在Android中,我這里手動(dòng)選擇了C盤的Java1.8。
4、嘗試進(jìn)行Gradle和打包,確認(rèn)都沒問題。
Unity工程準(zhǔn)備
1、切換到安卓平臺(tái),勾選Export

2、OtherSetting


3、導(dǎo)出到與Asset同目錄的androidBuild文件夾
將Unity導(dǎo)出的庫(kù)工程作為庫(kù)融合到安卓工程中
1、參照官網(wǎng)文檔的步驟
https://github.com/Unity-Technologies/uaal-example/blob/uaal-example/19LTS-21LTS/docs/android.md
2、整個(gè)工程的settings.gradle。讓Unity這個(gè)Module作為一個(gè)庫(kù)的形式加入工程。
加入如下代碼
include ':unityLibrary'
project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary')

3、工程的build.gradle。讓依賴可以從 unityLibrary中獲取。

4、App的build.gradle加入對(duì)unity庫(kù)的依賴。
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\libs'), include: ['*.jar'])
5、如果是Unity2023版本的話還需要拷貝unity導(dǎo)出的工程gradle.properties里的內(nèi)容整合到安卓工程。這里目前不需要??梢韵萐ync一下,看看有沒有報(bào)錯(cuò)。一般情況下,會(huì)報(bào)錯(cuò)找不到一個(gè)資源,還需設(shè)置下面的內(nèi)容。
unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
6、有可能會(huì)遇到的一啟動(dòng)App進(jìn)入到unity的Activity時(shí)出現(xiàn)閃退問題。
這時(shí)需要在App的strings.xml里面加入一句:
<string name="game_view_content_description">Game view</string>

安卓調(diào)起Unity
](https://upload-images.jianshu.io/upload_images/13721461-d7c397ea077fa015.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
package com.example.myandroidapp;
import android.app.Application;
import android.content.Context;
public class MainActivity extends Application {
public static Context sContext;
@Override
public void onCreate()
{
super.onCreate();
sContext = getApplicationContext();
}
}
package com.example.myandroidapp;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
public class MyUnityActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//new Test();
}
}
