日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UGUI开发实例练习——游戏菜单

發(fā)布時間:2023/12/29 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UGUI开发实例练习——游戏菜单 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
自我感覺把,前幾篇寫的一些簡單東西,并不能夠很好的涉及到開發(fā)中各種控件的配合,想著接下來用實(shí)例的方式自己邊學(xué)邊做,這樣我對NGUI的使用才會更熟練并且也有更多的東西與大家討論。 所以接下來的文章我想開始我的實(shí)例操練——游戲菜單以及菜單的切換;



一、游戲UI的初步設(shè)計

在實(shí)現(xiàn)UI前,先設(shè)計一下UI的快速原型吧。(用Visio做的圓形,因?yàn)橹恍枳鳛閰⒖季筒挥肁xureRP來做了) 設(shè)置的界面

比較簡單不要介意哈,只要功能實(shí)現(xiàn)都是貼圖的事,不慌,問題不大!! 二、開始實(shí)現(xiàn)

好了,這是我根據(jù)快速原型先整出來的界面 ,接下來給每個空間添加對應(yīng)的功能;

1.首先,給sprite都attach一個BoxCollider(注意哦,lable可加可不加,但是按照這個設(shè)計是不用加的,因?yàn)槿绻恿?#xff0c;鼠標(biāo)有時點(diǎn)到的BoxCollider是Label,就可能會妨礙Sprite之后添加的ButtonScript腳本的功能),然后右鍵sprite控件然后Attach一個ButtonScript腳本,就大功告成。如下圖:(是StartButton添加的腳本)

兩個PlaySound的腳本就很容易了,兩個的Trigger各不同,一個是On Mouse Over,就是鼠標(biāo)經(jīng)過按鈕時的聲音;OnClick就是鼠標(biāo)點(diǎn)擊時的聲音;這里用了我這個版本NGUI內(nèi)置的聲音;

2.好了,把能交互的設(shè)置好了,就該實(shí)現(xiàn)交互的內(nèi)容了,從"開始游戲出發(fā)"; 開始游戲在這里的設(shè)計效果是這樣的:點(diǎn)擊“開始游戲”,然后有一個加載的界面,之后就是游戲場景(比較簡單)

那如何響應(yīng)點(diǎn)擊產(chǎn)生的這個事件呢?在“ButtonScript”腳本中有一個“On Click”下,有一個Notify,后面可以拖拽進(jìn)去一個游戲物體,拖進(jìn)去后會展開,然后選擇該游戲物體上的某個腳本的事件就行;


在這里我們把場景切換的腳本掛在MainCamera public class startGame : MonoBehaviour {[HideInInspector]public AsyncOperation asyncLoad;public TweenPosition MenuUITween;public TweenPosition LoadUITween;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}IEnumerator loadScene(){asyncLoad= SceneManager.LoadSceneAsync(1,LoadSceneMode.Single);yield return asyncLoad;}public void EnterGame(){StartCoroutine(loadScene());MenuUITween.PlayForward();//播放主菜單界面移除動畫LoadUITween.PlayForward();//加載界面的出現(xiàn)動畫}}


這是我在加載場景時的過渡 在菜單到游戲場景的切換,我們可以用協(xié)同程序來進(jìn)行,Unity的UnityEngine.SceneManagement這個命名空間中,提供了一個加載場景并可以得到加載進(jìn)度的API,就是

public static AsyncOperation LoadSceneAsync(string sceneName,SceneManagement.LoadSceneMode mode = LoadSceneMode.Single);

public static AsyncOperation LoadSceneAsync(int sceneBuildIndex,SceneManagement.LoadSceneMode mode = LoadSceneMode.Single);
有兩個重載,區(qū)別在于第一個參數(shù),這個參數(shù)指定對應(yīng)場景,第一個是場景的名字,第二個是場景的索引,那么問題來了,索引是從何而來? 我們需要把所需要的場景放進(jìn)這里面:(在File->buildSettings或者快捷鍵ctrl+shift+B),場景后面對應(yīng)的數(shù)字就是索引了;

接著講場景加載的API,返回的AsyncOperation變量中有好幾個屬性,具體可以查看Unity官方API文檔 progress是一個從0到1的float數(shù)據(jù),完全可以用進(jìn)度條給顯示出來,所以我們再添加一個進(jìn)度條的UI,如圖所示


Progress腳本的代碼如下 public class progress : MonoBehaviour {UISlider slider;public startGame sg;//定義一個startgame實(shí)例,在Inspector中把掛在這個腳本的物體放進(jìn)去;這樣做比較減少性能消耗// Use this for initializationvoid Start () {slider = this.GetComponent<UISlider>();}// Update is called once per framevoid Update () {if (slider != null && sg != null && sg.asyncLoad != null)//安全性檢查,防止空指針{slider.value = sg.asyncLoad.progress;//print(slider.value);}} }

大致的代碼都完成,簡單解釋一下,關(guān)鍵代碼就是那個協(xié)同程序的幾段代碼,把EnterGame()函數(shù)掛載到主開始游戲按鈕的點(diǎn)擊事件上如圖: 其中有兩個函數(shù)調(diào)用沒說到,就是 MenuUITween.PlayForward();//播放主菜單界面移除動畫
LoadUITween.PlayForward();//加載界面的出現(xiàn)動畫
這是我掛在MenuUI和LoadingUI的兩個動畫腳本 ,動畫要怎么切換就根據(jù)大家的需要,我做的效果是直接切換,而且注意這個腳本是沒有勾上的,因?yàn)槲覀円婚_始并不希望他們就起作用,需要我們點(diǎn)擊開始游戲才發(fā)揮作用,所以用PlayForward()方法就可以讓他起作用了。 效果展示: 開始運(yùn)行

接著點(diǎn)擊開始游戲

場景加載中 場景

上面那個Button是我為了方便弄的返回菜單的功能,實(shí)現(xiàn)和切換場景的方法大同小異;

接下來完場設(shè)置界面的顯示以及參數(shù)調(diào)整; 下圖是我根據(jù)原型再次優(yōu)化的界面效果


總結(jié)

以上是生活随笔為你收集整理的UGUI开发实例练习——游戏菜单的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。