本章要點(diǎn):
- 導(dǎo)出APK文件
- 增加應(yīng)用的主菜單
1. 制作APK文件
1.1. 安裝Android SDK和JDK并設(shè)置路徑
我們?cè)谥谱鰽PK(Android安裝包)之前,需要確保電腦上已經(jīng)安裝了Android SDK和JDK,安裝Android SDK和JDK的具體方法,由于篇幅的關(guān)系就不再詳細(xì)展開了。在準(zhǔn)備好Android SDK和JDK之后,我們可以點(diǎn)擊菜單欄上的 Unity -> Preferences... 來打開Unity Preferences菜單,然后參考下圖,把相關(guān)的路徑填好:
1.2. 設(shè)置App的Icon
下圖是我從網(wǎng)上找到的Icon,大家可以直接點(diǎn)擊然后保存圖片:
然后把Icon導(dǎo)入U(xiǎn)nity編輯器:
下一步,通過 Edit/Project Settings/Player 打開玩家設(shè)置,然后將我們剛剛導(dǎo)入項(xiàng)目的Icon圖片設(shè)置為Default Icon即可(如果不設(shè)置圖片的話,生成的APK就自動(dòng)使用帶有“Unity”字樣的默認(rèn)Icon):
1.3. 確保EasyAR正常
為了確保在編譯之后,EasyAR依然可以正常使用,我們需要再次確認(rèn)EasyAR官網(wǎng)上的Bundle ID信息(如果大家已經(jīng)把Bundle ID記下來的話,這一步就可以省略了):
明確了Bundle ID信息之后,我們回來繼續(xù)設(shè)置PlayerSettings:
特別需要注意的是Graphycs API設(shè)置,務(wù)必設(shè)置為只有OpenGLES2,否則會(huì)有如下報(bào)錯(cuò),提示我們EasyAR有可能無法正常工作:
1.4. 修改截圖的保存路徑
完成上述設(shè)置之后,我們需要注意啦!在上一章(在Unity中使用EasyAR開發(fā)可以和Unity醬合影的App(第三章))里,我們將相機(jī)拍攝的截圖儲(chǔ)存到了 Assets/UnityChanAR/Screenshots 路徑下,設(shè)置該路徑是為了在試運(yùn)行時(shí)可以查看截圖功能是否正常。因此,在通過測(cè)試之后,我們就應(yīng)該刪除該路徑以及路徑下的各種截圖(縮小安裝包的大小)。
現(xiàn)在,我們需要考慮手機(jī)的存儲(chǔ)路徑。在安卓系統(tǒng)內(nèi),我使用了以下路徑:/mnt/sdcard/DCIM/,設(shè)置好路徑之后可以在安卓系統(tǒng)的文件管理功能中去查看該文件下的內(nèi)容。(至于iOS系統(tǒng),我現(xiàn)在還沒有去研究過,不知道怎樣保存。以后有時(shí)間的話會(huì)研究一下。)
1.5. 執(zhí)行編譯
通過 File/BuildingSettings... 就可以來到編譯之前的最后一個(gè)設(shè)置頁面了:
完成截圖中的操作之后,Unity編輯器就會(huì)自動(dòng)編譯并制作APK文件。我們把做好的APK文件直接導(dǎo)入手機(jī)之后就可以安裝了。
2. 增加App的主菜單界面
2.1. 新建場(chǎng)景(用作主菜單)
主菜單頁面并非這個(gè)App所必需的,但是,如果我們?cè)黾右粋€(gè)菜單界面,那么,這個(gè)App看起來就會(huì)更加符合人們的使用習(xí)慣。在Unity中,我們可以通過新增一個(gè)場(chǎng)景,來實(shí)現(xiàn)主菜單的功能。新建Scene的方法是:
- 打開Project面板中的Assets/UnityChanAR/Scenes/文件夾
- 在空白處點(diǎn)擊鼠標(biāo)右鍵,會(huì)出現(xiàn)一個(gè)右鍵菜單
- 選擇Create/Scene,然后將新建的Scene命名為“00”
然后,我們需要打開這個(gè)場(chǎng)景(Scene 00),方法是:直接把“Scene 00”拖拽到Hierarchy面板中。這時(shí),Scene視圖中會(huì)同時(shí)顯示Scene00和Scene01,兩個(gè)Scene重疊在一起。我們現(xiàn)在只需要編輯Scene00,所以,用鼠標(biāo)右鍵點(diǎn)擊Scene01,選擇UnloadScene:
2.2. 設(shè)置主菜單的背景圖片
我們新建的Scene00只需要顯示主菜單,所以,在場(chǎng)景中只要添加UGUI系統(tǒng)即可。在之前章節(jié)中,我們已經(jīng)收集了一些按鈕的圖片;所以,我們現(xiàn)在需要找一張合適的背景圖片。這張圖片最好是可以匹配手機(jī)的分辨率,我們可以通過一些軟件修改圖片,我在這里就走個(gè)捷徑,直接下載了一個(gè)小米手機(jī)屏幕背景圖片。將我們準(zhǔn)備好的圖片導(dǎo)入U(xiǎn)nity之后,需要注意把圖片的TextureType設(shè)置為Sprite(2D and UI):
然后,我們?cè)趫?chǎng)景中加入一個(gè)Image,并切換到Game視圖:
在Game視圖中我們可以看到,主菜單的背景還沒有設(shè)置,而且Image的位置和大小也不太合適。接下來,我們首先給主菜單添加背景圖片。在這里大家需要注意Canvas是怎樣接收一張圖片的:
- 在Hierarchy面板里選中Canvas
- 在Inspector面板中添加組件:UI -> Image
- 將背景圖片直接拖拽到Image組件SourceImage的空白槽里
2.3. 在主菜單中添加按鈕
我們按照第二章里介紹的方法,把Image設(shè)置為一個(gè)按鈕即可。注意以下三個(gè)要點(diǎn):
- 將Image對(duì)象重命名為Photo,以方便管理
- 在Rect Transform中設(shè)置Photo按鈕的大小和位置
- 給Photo按鈕添加圖片,以及Button組件(UI -> Button)
完成之后的效果圖是這樣的:
2.4. 添加場(chǎng)景控制器和控制代碼
在切換場(chǎng)景的時(shí)候,我們首先需要在場(chǎng)景中添加一個(gè)控制器。控制器是由一個(gè)空的GameObject和一個(gè)腳本組成的。所以,完成一個(gè)場(chǎng)景控制器需要:
- 新建SceneChanger腳本并參考以下代碼編輯
- 在場(chǎng)景中添加空的GameObject,重命名為”SceneChanger“
- 把SceneChanger腳本添加到SceneChanger對(duì)象身上
using UnityEngine;
using System.Collections;
// 注意,不要忘記使用SceneManagement
using UnityEngine.SceneManagement;
public class SceneChanger : MonoBehaviour {
// 這是對(duì)應(yīng)按鈕Photo的函數(shù)
public void OnBtnPhoto () {
SceneManager.LoadScene ("01");
}
// 這是對(duì)應(yīng)按鈕Menu的函數(shù)
// 按鈕Menu會(huì)放在Scene01中,稍后會(huì)有詳細(xì)說明
public void OnBtnMenu () {
SceneManager.LoadScene ("00");
}
}
2.5. 對(duì)代碼的簡(jiǎn)單解析
上面的代碼中,最重要的就是SceneManager.LoadScene ()
函數(shù)。這里引用一下官方文檔中的一部分說明來幫助我們理解:
Loads the scene by its name or index in Build Settings.
根據(jù)場(chǎng)景名稱或者場(chǎng)景在Build Settings中的編號(hào)來加載某個(gè)場(chǎng)景。
The given sceneName can either be the last part of the path, without .unity extension or the full path still without the .unity extension.
在指定場(chǎng)景名稱時(shí),既可以使用(場(chǎng)景所在)路徑的最后一部分(不加.unity擴(kuò)展名),也可以使用(場(chǎng)景所在)全路徑(不加.unity擴(kuò)展名)。
The path has to be exactly as shown in the Build Settings Window.
(場(chǎng)景所在)路徑必須和Build Settings Window中的顯示的路徑完全一致。
If only the scene name is given this will load the first scene in the list that matches.
如果(我們)只給出場(chǎng)景的名稱(而非全部路徑),那么(Unity編輯器)會(huì)加載它匹配到的第一個(gè)場(chǎng)景。
If you have multiple scenes with same name but different paths, you should use the full path.
如果你有一個(gè)重名的場(chǎng)景,分別保存在不同的路徑下,那你就應(yīng)該使用全部路徑。
中文是我自己翻譯的,官方文檔目前只有英文。重點(diǎn)是我們必須理解上文中提到的Build Settings Window,以及(場(chǎng)景所在)路徑和場(chǎng)景編號(hào)。為了便于理解,我們可以看下面這張圖:
左邊箭頭指示的就是(場(chǎng)景所在)路徑,右邊箭頭是場(chǎng)景編號(hào)。我們現(xiàn)在的項(xiàng)目里只有兩個(gè)不重名的場(chǎng)景——00和01,所以,我們可以在加載路徑時(shí)只給出場(chǎng)景名,而不用寫出全部路徑。
2.6. 將按鈕與代碼聯(lián)系起來
接下來,我們需要把之前設(shè)置好的Photo按鈕和場(chǎng)景控制器聯(lián)系起來,具體方法依然在第二章里可以找到,這里只羅列三個(gè)要點(diǎn):
- 選中Photo對(duì)象,在Inspector中找到Button組件
- 在Button組件的On Click ()選項(xiàng)中,追加新的操作
- 設(shè)置新的操作:SceneChanger中的OnBtnPhoto()函數(shù)
完成上述操作之后的界面應(yīng)該是這樣的:
2.7. 修改場(chǎng)景01
現(xiàn)在,創(chuàng)建主菜單的工作就已經(jīng)完成了!之后,我們需要修改一下Scene01,在場(chǎng)景01中添加一個(gè)返回主菜單的按鈕。結(jié)合本章所講的內(nèi)容,這里的操作就不難了,大家可以對(duì)照下面的要點(diǎn)和圖片試一試:
- 在Hierarchy面板中加載場(chǎng)景01,并Unload場(chǎng)景00
- 在場(chǎng)景中添加一個(gè)大小與位置都合適的按鈕(叫做Menu)
- 添加場(chǎng)景控制器,并將其與Menu按鈕關(guān)聯(lián)起來
在完成了場(chǎng)景01中的修改之后,我們就可以測(cè)試一下今天的效果了。在測(cè)試之前一定記得:把Hierarchy面板中所有的場(chǎng)景都加載進(jìn)來。下面是我自己的試效果圖:
第四章就到這里,下一章我們繼續(xù)給這個(gè)App添加新的功能!
其他章節(jié):