2015年6月16日 星期二

【Unity】Loading Screen 讀取畫面製作

這次要談的是過場的時候的讀取畫面,在Unity中場景切換時常用的語法是Application.LoadLevel("SceneName"),這種讀取方法在遊戲資源小的時候是非常便捷的方法,但遊戲資源大到一定程度時,使用LoadLevel在資源載入的過程中會有一小段時間畫面是會卡住的,這種時候用一個小過場蓋掉這段時間是很常見的方式。
Scripting a Loading screen in Unity(註:影片連結請注意音量)
以上連結教學就是這次的方法,要做到的效果如下圖:
Loading Screen

在按下開始的時候,程式並不會因為去讀取資源而完全停止,而是一邊顯示讀取進度一邊讀取資源,讀取完成後進入遊戲。
以下開始正文:
首先製作Loading過場畫面,只要能清楚表達讀取進度用什麼物件都可以,這裡使用UI->Panel當作背景,底下加上三個UI物件作為進度的顯示。
Loading Screen
布局完後確定可以在讀取過程中蓋住遊戲畫面後,就可以把過場畫面關閉或縮小。
接著在場景中新增名為ButtonClick的空物件,並在ButtonClick物件上新增腳本ButtonClick.cs,在這腳本上需要以下的內容。
首先新增按下時要執行的函式:
public void StartClick(GameObject loadScreen)
{
        loadScreen.transform.localScale = new Vector3 (1, 1, 1);////(1)
        StartCoroutine (DisplayLoadingScreen("GameScene"));////(2)
}
(1)將過場畫面展開
(2)這裡做場景讀取使用StartCoroutine函式,巴哈有比較詳細的介紹:Unity3D製作計數器「StartCoroutine應用」
大略講一下內容就是:當程式遇到StartCoroutine時會執行IEnumerator介面內的程式,遇到yield return 0;會執行StartCoroutine之後的部分,接著回StartCoroutine的執行內容,直到沒遇到yield return 0;為止。
然後是自定義DisplayLoadingScreen的內容:
public Text loadText;
public Image loadImage;
IEnumerator DisplayLoadingScreen (string sceneName)////(1)
{
    AsyncOperation async = Application.LoadLevelAsync (sceneName);////(2)
    while (!async.isDone)////(3)
    {   
        loadText.text = (async.progress * 100).ToString() + "%";////(4)
        loadImage.transform.localScale = new Vector2(async.progress,loadImage.transform.localScale.y);
        yield return null;
    }
}
(1)就如上面所提的DisplayLoadingScreen為IEnumerator函式。
(2)LoadLevelAsync和LoadLevel不同,可以讓資源讀取這件事在程式後台來做,不會造成程式讀取資源而停止其他度做的問題。
(3)LoadLevelAsync讀取的過程中可以透過isDone來確認是否完成,所以如果還是未完成讀取狀態,就要做讀取進度的顯示。
(4)progress為讀取進度,介於0到1之間,將progress的數值帶入loadText和loadImage,也就是畫面上顯示的百分比和進度條。
最後將ButtonClick物件帶入開始按鈕的On Click下,詳細的作法點這裡,這裡就不多提。

以上就是讀取過場的製作,方法不會太複雜,但讀取場景卡畫面的問題可以輕鬆解決,這次就到這裡。
以下是素材:
臼井の会:http://usui.moo.jp/frame2.html
ぴぽや:http://piposozai.blog76.fc2.com/
CLOSET:https://sites.google.com/site/closetvx/
異教徒たちの踊り:http://blog.goo.ne.jp/ari1192jp_001
ひみつ ゲーム用フリー素材:http://uros.web.fc2.com/
音楽素材/魔王魂:http://maoudamashii.jokersounds.com/
Cool Text: 图标和图形生成器:http://zh-cn.cooltext.com/
【Rド】:http://www.geocities.co.jp/Milano-Cat/3319/
CLOSET:http://eurs.blog65.fc2.com/blog-category-0.html
ドット絵世界:http://yms.main.jp/index.html
Game Studio Rxus.:http://rxus.digiweb.jp/mate/h003.html
ヴィントドルフ:http://winddorf.oops.jp/1top.htm

2 則留言:

【自製小遊戲】水平思考猜謎(海龜湯)

遊戲連結 海龜湯的玩法是由出題者提出一個難以理解的事件,參與猜題者可以提出任何問題以試圖縮小範圍並找出事件背後真正的原因。但出題者僅能以「是」、「不是」或「沒有關係」來回答問題。 本遊戲蒐集各種論壇、平台的42個題目,提供給想玩海龜湯卻愁找不到題目的你們。 ...