上一篇博客,我們簡單介紹瞭如何使用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。