这一次使用一下Unity官方给的示例来实现把Unity集成到安卓应用。
一、版本说明
Android Studio:Android 3.6.1
Android Gradle Plugin Version:3.3.2
Gradle Version:4.10.1
Unity:2019.3.4f1
1.png
安卓工程准备
1、如果没有对应的AndroidStudio版本,下载安装对应的版本,有可能会遇到首次启动启动不了问题。
在Android安装目录/bin/idea.properties这个文件的最后加上下面这句话。
disable.android.first.run=true
2、做安卓开发还是离不开梯子的,得准备好梯子。
File->Settings->System Settings->Http Proxy
我这里选择的是Manual proxy configuration。
2.png
3、建Empty Activity工程。
3.png
1、首次新建工程后一般进来后不出意外Gradle都是会失败的,可以选择直接关闭掉Gradle的下载。然后自己手动选择。
File->Project Structure
选择你自己本地已经下载有的版本。
2、SDK版本选择和Unity一样的版本,能避免很多各种各样层出不穷的兼容问题。
3、我查阅了一下Unity2019版本,要使用1.8版本的JDK。在unity工程中,我是直接使用的是编辑器自带的JDK。在Android中,我这里手动选择了C盘的Java1.8。
4、尝试进行Gradle和打包,确认都没问题。
Unity工程准备
1、切换到安卓平台,勾选Export
5.png
2、OtherSetting
6.png
10.png
3、导出到与Asset同目录的androidBuild文件夹
将Unity导出的库工程作为库融合到安卓工程中
1、参照官网文档的步骤
https://github.com/Unity-Technologies/uaal-example/blob/uaal-example/19LTS-21LTS/docs/android.md
2、整个工程的settings.gradle。让Unity这个Module作为一个库的形式加入工程。
加入如下代码
include ':unityLibrary'
project(':unityLibrary').projectDir=new File('..\\UnityProject\\androidBuild\\unityLibrary')
7.png
3、工程的build.gradle。让依赖可以从 unityLibrary中获取。
1705049431863.png
4、App的build.gradle加入对unity库的依赖。
implementation project(':unityLibrary')
implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\libs'), include: ['*.jar'])
5、如果是Unity2023版本的话还需要拷贝unity导出的工程gradle.properties里的内容整合到安卓工程。这里目前不需要。可以先Sync一下,看看有没有报错。一般情况下,会报错找不到一个资源,还需设置下面的内容。
unityStreamingAssets=.unity3d, google-services-desktop.json, google-services.json, GoogleService-Info.plist
6、有可能会遇到的一启动App进入到unity的Activity时出现闪退问题。
这时需要在App的strings.xml里面加入一句:
<string name="game_view_content_description">Game view</string>
8.png
安卓调起Unity
](https://img.haomeiwen.com/i13721461/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();
}
}
9.png
网友评论