Flutter中集成Unity踩坑之旅
# 劝退词
先反思一下你们为什么要用flutter去集成unity?可不可以不用fluter去集成?如果可以的话,先放弃,用原生去集成吧,本文也不用看了,因为fluter集成实在太坑了,太降低效率了!步步坑机!如果非要用flutter去集成,或者想挑战下自己的忍耐力,那么请看下文。
# 集成流程
首先我们打开flutter项目,添加flutter-unity-view-weight (opens new window)依赖,我们直接在pubspec.yml
中添加依赖:
dependencies:
flutter_unity_widget: ^2022.1.1+4
2
如果你是flutter3.0以下,那么就添加:
dependencies:
flutter_unity_widget: ^2022.1.0+7
2
然后我们打开Unity,点击Assets -> Import custom package
,然后选择上面链接中的
Unity packages
-> fuw-2022.1.1-v2.unitypackage (opens new window),我们只勾选插件部分,不需要导入demo,**如果有报错,请把unity升级2022.1.2版本。**然后我们的菜单栏就会多出一个flutter选项,我们可以直接选择flutter -> export Android 来导出unityLibrary,这个包默认是在Assets同级目录的,此时有可能报错,提示build.gradle路径不对,有两种解决方案。
- 1 将android项目和unity项目放在同一个目录下。
- 2 双击错误,打开对应C#脚本,然后将里面的androidProjectPath路径改为自己的android项目的路径。
然后我们用AndroidStudio打开我们的flutter项目,将导出的unityLibrary作为一个module添加到项目中,此时会报错,提示有两个unity.classes
的jar包,我们将flutter-untiy-view-weight
中的unity-classes
删掉,同时将该module对应的build.gradle
文件中implementation(name: 'unity-classes', ext:'jar')
删除,让它只依赖我们的unityLibrary。修改后的build.gradle
文件如下:
implementation project(':unityLibrary')
然后将unityLibrary中的implementation(name: 'unity-classes', ext:'jar')
改为: api fileTree(include: ['*.jar'], dir: 'libs')
,同时在我们的根目录的build.gradle文件中添加:
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
2
3
然后运行代码即可。
# 问题以及解决方案
# 1 出现两个unity-classes错误
此时我们只需要把flutter-unity-view-weight
中的那个删除,只保留我们自己导出的unityLibrary
中的unity-classes
即可。
# 2 出现xxx找不到的依赖错误
我们需要在项目根目录的build.gradle
中添加:
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
2
3
然后将unityLibrary
中的build.gradle
中的
`implementation(name: 'unity-classes', ext:'jar')
改为:
api fileTree(include: ['*.jar'], dir: 'libs')
# 3 导入fuw-2022.1.1-v2.unitypackage报错
- 1 导入时,只勾选插件,不要勾选demo和里面的其他资源。
- 2 如果还报错,就升级unity到2022.1.1版本(也就是插件对应的版本)
# 4 export Android出错
1 将android项目和unity项目放在同一个目录下,比如:
package/android // android项目 package/unity // unity项目
1
22 双击错误,打开报错脚本,修改里面的
androidProjectPath
路径为自己android项目的路径,默认是../../android
。
# 5 提示NDK找不到
在local.properties文件中,配置ndk路径即可。