上一篇博客,我们简单介绍了如何使用unity创建我们的第一个项目,并且介绍了scene和GameObject的一些操作。那么,这篇博客,我将会介绍和总结如何使用unity把我们的项目打包成一个游戏。并且把我打包过程中遇到的一些问题以及解决方法一起总结一下。
一.Build Settings
点击File,build settings,可以对当前的项目打包,可以选择打包成PC、Android或者iOS等。如果选择Android或者IOS提示没有对应的module,直接在当前页面打开链接下载安装并且重启unity即可,如图所示:
二.Build And Run
点击Build And Run后,结果发现弹出如下窗口。大体意思是说我们的包名不对,需要去Player Settings中去设置,需要遵循com.xxx.xxx的格式:
三.Player Settings
注意,直接点击左下角的Player Setting是进不去的。我们去选择Edit,Project Settings,选择Player,打开,如图所示,修改公司名和项目名,例如我设置的公司名为tudu:
点击other settings,修改包名,包名要和上面的公司名和产品名一致,(例如我的是com.tudu.MyFirstUnity):
四.继续Build And Run
结果,又不出意外的报错了,如图所示:
我们可以看到,报错:CommandInvokationFailure: Gradle build failed.详细的报错日志如下:
CommandInvokationFailure: Gradle build failed.
D:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\OpenJDK\Windows\bin\java.exe -classpath "D:\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-5.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleRelease"
stderr[
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring root project 'gradleOut'.
> Could not resolve all artifacts for configuration ':classpath'.
> Could not resolve com.android.tools.build:gradle:3.4.0.
Required by:
project :
> Could not resolve com.android.tools.build:gradle:3.4.0.
> Could not get resource 'https://repo.maven.apache.org/maven2/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> Could not GET 'https://repo.maven.apache.org/maven2/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> Could not resolve com.android.tools.build:gradle:3.4.0.
> Could not get resource 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> Could not resolve com.android.tools.build:gradle:3.4.0.
> Could not get resource 'https://jcenter.bintray.com/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> Could not GET 'https://jcenter.bintray.com/com/android/tools/build/gradle/3.4.0/gradle-3.4.0.pom'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 8s
]
stdout[
]
exit code: 1
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.Command.Run (System.String command, System.String args, System.String workingdir, UnityEditor.Android.Command+WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.AndroidJavaTools.RunJava (System.String args, System.String workingdir, System.Action`1[T] progress, System.String error) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
Rethrow as GradleInvokationException: Gradle build failed
UnityEditor.Android.GradleWrapper.Run (UnityEditor.Android.AndroidJavaTools javaTools, System.String workingdir, System.String task, System.Action`1[T] progress) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.PostProcessor.Tasks.BuildGradleProject.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <62f761e6ab1445a38cdcb4ac36512695>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
该问题比较简单的解决方案是,把gradle改成internal,如图所示:
五.运行结果
在经过上面的一系列尝试后,最终,我们的第一个unity游戏终于可以运行在我们的手机上了,如图所示:
这篇博客总结了如何把我们的unity工程打包为Android的apk,并且总结了在打包过程中遇到的一些问题。后面的博客,将继续学习和总结unity。