在玩遊戲時可以看到什麼按鈕,文本,下拉列表等?所有這些都是所謂的用戶界面(UI)的一部分。大多數遊戲都具有某種UI,這使玩家更容易在級別之間切換並激活某些控件(例如暫停遊戲或重新啟動級別)。在上一篇描述如何創建Dodger的文章中,我們創建了一個小按鈕,以刷新遊戲,如果玩家丟失了。 在本教程中,我們將將其提升到一個新的水平,並允許用戶暫停或重新啟動遊戲並在不同場景之間切換。我們還將研究如何僅在某些時間顯示某些UI元素 - 例如游戲暫停或玩家死亡/失敗時。
>大多數遊戲都包含暫停菜單,屏幕上的遊戲和主菜單。由於這些是“完成”遊戲所需的幾個元素中的一些,因此我們將將所有三個元素插入我們的躲避克隆中。此外,我們還將創建一個指令屏幕,以便玩家能夠在開始玩遊戲之前可以學習可以使用的控件。 >
鑰匙要點
>通過提供必需的UI控件和場景管理來實現Unity的屏幕上的暫停,主菜單和遊戲。
>使用`time.timescale`控制遊戲狀態,將其設置為0暫停遊戲,然後恢復1個,啟用有效的暫停菜單功能。
- >
- >創建不同遊戲狀態的不同的UI元素,例如按鈕和文本,並使用諸如“ ShowonPause”之類的標籤來管理其可見性。
- >開發一個主菜單場景,其中包含啟動遊戲的選項,利用``sceemanager''進行場景過渡來增強用戶導航。
- >使用碰撞檢測和UI更新將屏幕上的遊戲與分數顯示和重新啟動選項合併,以告知玩家遊戲End。
- 創建基本暫停屏幕
- >暫停屏幕具有一組通用的控件,玩家可以使用該控件來重新啟動一個級別,轉到主菜單或取消遊戲。暫停屏幕僅在暫停遊戲時才能看到。一般而言,我們可以使用Times.Timescale來區分暫停和未陷入困境的遊戲。如果時間尺度為零,則遊戲將被暫停。如果大於零,則該遊戲將不會引起(我們稍後將討論)。讓我們開始!
首先,我們將需要創建一個標題,該標題告訴玩家暫停遊戲。我們應該通過在層次結構窗格中右鍵單擊並選擇UI->文本來創建一個文本對象。讓我們命名新創建的對象pauseText。
我們需要創建一個標題,該標題告訴玩家暫停遊戲。我們應該通過在層次結構窗格中右鍵單擊並選擇UI->文本來創建一個文本對象。讓我們命名新創建的對象pauseText。
>現在我們可以格式化文本對象,以使其在遊戲屏幕中看起來更好。為了更改文本對象的文本,我們必須在“新文本”單詞所在的文本屬性下單擊“檢查器”窗格。在文本屬性中,我們可以將暫停文本的文本更改為“暫停”。為了保持遊戲的配色方案,我們應該將文本的顏色更改為白色。這可以通過在顏色對象(可以選擇黑色或其他顏色)下單擊並選擇白色來實現。
>
>讓我們調整文本的位置。暫停文本應水平集中在屏幕上,並位於遊戲屏幕的最高三分之一。可以通過更改RECT變換屬性內部的x和y的值或使用Unity編輯器左上角的鼠標控件中的四個方式箭頭來移動暫停文本。如果需要或需要,我們還可以通過更改值和更改寬度和高度屬性的大小(在Rect Transform下)來更改文本大小。
>>我們現在要做的就是標記對象,以便在添加代碼後的程序將能夠說我們只希望該對象顯示遊戲何時暫停。我們可以單擊“暫停文本”的名稱,其中顯示“未標記”,然後單擊“添加標籤……”。現在,我們可以創建一個名為“ ShowonPause”的標籤。創建此標籤後,我們需要將其添加到暫停文本中。
>創建暫停的按鈕
>由於我們創建了暫停文本並為遊戲對象添加了一個新標籤,該標籤應該在暫停遊戲時出現,因此我們可以開始創建構成暫停遊戲菜單的按鈕。
>我們將創建三個不同的按鈕:播放按鈕,重新啟動按鈕和主菜單按鈕。播放按鈕將取消遊戲,重新啟動按鈕將重新啟動遊戲,並且主菜單按鈕將使玩家重新回到遊戲的主菜單場景。開始,讓我們從創建一個新按鈕(右鍵單擊層次結構 - > ui->按鈕),然後將其命名為“ PlayButton”。我們應該將播放按鈕的標籤設置為ShowonPause,以便僅在暫停遊戲時才顯示它。現在,讓我們將播放按鈕的文本設置為“播放”。這可以通過在檢查員中打開文本子對象(單擊層次結構中的播放按鈕旁邊的下拉列表,然後選擇文本對象),然後將文本屬性更改為“ play”。我們應該將播放按鈕與屏幕的中心對齊,以便它在暫停文本下。
創建其他兩個按鈕的快速方法是在層次結構中選擇“播放”按鈕,併兩次重複(命令 / ctrl d)。我們可以將新按鈕命名為“ RestartButton”和“ Mainmenubutton”。我們還應該給每個新按鈕提供適當的文本。重新啟動按鈕應表示“重新啟動”,主菜單按鈕應為“主菜單”。現在,讓我們刪除上一個教程中創建的刷新按鈕。現在我們可以看到我們有一個基本的暫停菜單。但是,菜單什麼也沒做任何事情,因為我們還沒有將任何代碼附加到對像上。
>
>讓我們打開上一個教程中創建的uimanager腳本。我們應該編輯我們的uimanager腳本,以使其看起來像下面的代碼。
>GameObject<span>[] pauseObjects; </span> <span>// Use this for initialization </span> <span>void Start () { </span> Time<span>.timeScale = 1; </span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause"); </span> <span>hidePaused(); </span> <span>} </span> <span>// Update is called once per frame </span> <span>void Update () { </span> <span>//uses the p button to pause and unpause the game </span> <span>if(Input.GetKeyDown(KeyCode.P)) </span> <span>{ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Debug<span>.Log ("high"); </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>} </span> <span>//Reloads the Level </span> public <span>void Reload(){ </span> Application<span>.LoadLevel(Application.loadedLevel); </span> <span>} </span> <span>//controls the pausing of the scene </span> public <span>void pauseControl(){ </span> <span>if(Time.timeScale == 1) </span> <span>{ </span> Time<span>.timeScale = 0; </span> <span>showPaused(); </span> <span>} else if (Time.timeScale == 0){ </span> Time<span>.timeScale = 1; </span> <span>hidePaused(); </span> <span>} </span> <span>} </span> <span>//shows objects with ShowOnPause tag </span> public <span>void showPaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(true); </span> <span>} </span> <span>} </span> <span>//hides objects with ShowOnPause tag </span> public <span>void hidePaused(){ </span> <span>foreach(GameObject g in pauseObjects){ </span> g<span>.SetActive(false); </span> <span>} </span> <span>} </span> <span>//loads inputted level </span> public <span>void LoadLevel(string level){ </span> Application<span>.LoadLevel(level); </span> <span>} </span>
>現在,我們已經有了可以在Uimanager腳本中訪問的代碼,我們可以返回Unity。在Unity內部,讓我們選擇“播放”按鈕,然後將PauseControl方法附加到它。為此,我們可以選擇“播放”按鈕並將Uimanager Game對象拖到Inspector Pane中OnClick()屬性下的遊戲對象空間上。添加了Uimanager遊戲對象,我們現在可以使用第二個下拉列表選擇PauseControl函數(uimanager-> pausecontrol)。
>>使用相同的步驟,我們可以將Reload()方法添加到重新啟動按鈕和LoadLevel()方法到主菜單按鈕。由於LoadLevel()方法採用字符串參數,因此我們應該在函數下拉列表下的框中鍵入“ mainmenu”。
>
>如果我們現在打播放,我們會注意到播放和重新啟動按鈕可以正常工作。另外,如果我們在遊戲玩遊戲時達到P,我們就可以暫停並取消遊戲。唯一的問題是主菜單按鈕不起作用。這是因為我們還沒有在構建設置中添加名為“ Mainmenu”的場景。
創建主菜單場景創建場景
>在播放場景中創建的暫停菜單後,我們現在可以創建一個新的場景,該場景將充當遊戲的主菜單。我們將創建的主菜單將很簡單,並且只包含一個播放按鈕,該按鈕將使玩家進入播放場景。
首先,我們應該保存我們正在工作的當前場景,以便我們完成的工作不會被刪除。讓我們創建一個新場景(命令 / ctrl n或file->新場景)。場景打開後,保存並將其命名為“ Mainmenu”。
>
>
>現在已經保存了場景,我們可以開始對其進行努力。讓我們從選擇主攝像機遊戲對象並將其背景更改為與遊戲場景相同的顏色(R:0,G:223,B:255)。
在此場景中,我們將需要能夠訪問Uimanager腳本中的LoadLevel()方法。這意味著我們需要創建一個uimanager遊戲對象並將Uimanager腳本附加到它,以便我們可以將功能添加到我們的按鈕中。 >讓我們創建一個空的遊戲對象(在層次結構中右鍵單擊 - >“創建空”),然後將其命名為Uimanager。現在,我們可以將Uimanager腳本添加到Uimanager遊戲對像中。
>完成遊戲 添加分數 我們將用來更新分數的條件將是從屏幕上脫離屏幕的塊(這意味著玩家已經躲避的塊)。為了使這種情況保持活躍 >讓我們創建一個空的遊戲對象並將其命名為“ Bottomborder”。我們在底部邊框中添加了一個BoxCollider2D,並將X尺寸設置為一個略微超過相機邊界的大數字。現在,我們可以在底部邊框對像中添加一個剛體2D,並將重力刻度屬性設置為0,以免底部邊框對象落下。我們可以將底部邊框對象稍微對準播放器下方,以確保其不在屏幕上。 >
>
我們應該將PointUpDater腳本添加到得分文本遊戲對像中。底部邊框遊戲對象應添加到點計數器值中,以便可以更新分數。 >讓我們在我們的IDE中打開PlayerController腳本,下面是最後一個變量聲明添加: >
開始播放菜單,我們可以創建一個新的文本遊戲對象並將其命名為“ GameOverText”。文本應設置為“遊戲”,文本顏色應為白色。我們應該將游戲通過文本對齊,以略高於屏幕中心的上方。為了確保只有在玩家死亡時才會出現此菜單,我們應該創建一個名為“ ShowonFinish”的新標籤,並通過文本將其添加到遊戲中。 >
>問題?評論?請把它們留在下面! Unity的UI系統包含一個稱為Canvas Scaleer的功能,該功能使創建UI易於製作並調整到不同屏幕尺寸的UI。通過將Canvas Scaleer的UI量表模式設置為“與屏幕尺寸進行縮放”,您可以確保您的UI元素在不同設備上保持一致的尺寸和佈局。 > >我如何了解有關Unity的UI系統的更多信息? API參考和最佳實踐。此外,在許多在線社區和資源中,您可以從其他Unity開發人員那裡學習,例如Unity論壇,堆棧溢出和各種教程網站。創建菜單
>我們應該保存當前的場景並打開播放場景。播放場景打開,我們可以創建一個文本對象並將其命名為“ ScoreText”。得分文本對象應與屏幕頂部對齊。通過選擇的分數文本對象,我們可以通過查看RECT變換屬性並單擊錨點菜單來添加頂部拉伸錨點。我們還應該將文本置於中心並使其為白色。
GameObject<span>[] pauseObjects;
</span>
<span>// Use this for initialization
</span> <span>void Start () {
</span> Time<span>.timeScale = 1;
</span> pauseObjects <span>= GameObject.FindGameObjectsWithTag("ShowOnPause");
</span> <span>hidePaused();
</span> <span>}
</span>
<span>// Update is called once per frame
</span> <span>void Update () {
</span>
<span>//uses the p button to pause and unpause the game
</span> <span>if(Input.GetKeyDown(KeyCode.P))
</span> <span>{
</span> <span>if(Time.timeScale == 1)
</span> <span>{
</span> Time<span>.timeScale = 0;
</span> <span>showPaused();
</span> <span>} else if (Time.timeScale == 0){
</span> Debug<span>.Log ("high");
</span> Time<span>.timeScale = 1;
</span> <span>hidePaused();
</span> <span>}
</span> <span>}
</span> <span>}
</span>
<span>//Reloads the Level
</span> public <span>void Reload(){
</span> Application<span>.LoadLevel(Application.loadedLevel);
</span> <span>}
</span>
<span>//controls the pausing of the scene
</span> public <span>void pauseControl(){
</span> <span>if(Time.timeScale == 1)
</span> <span>{
</span> Time<span>.timeScale = 0;
</span> <span>showPaused();
</span> <span>} else if (Time.timeScale == 0){
</span> Time<span>.timeScale = 1;
</span> <span>hidePaused();
</span> <span>}
</span> <span>}
</span>
<span>//shows objects with ShowOnPause tag
</span> public <span>void showPaused(){
</span> <span>foreach(GameObject g in pauseObjects){
</span> g<span>.SetActive(true);
</span> <span>}
</span> <span>}
</span>
<span>//hides objects with ShowOnPause tag
</span> public <span>void hidePaused(){
</span> <span>foreach(GameObject g in pauseObjects){
</span> g<span>.SetActive(false);
</span> <span>}
</span> <span>}
</span>
<span>//loads inputted level
</span> public <span>void LoadLevel(string level){
</span> Application<span>.LoadLevel(level);
</span> <span>}
</span>
>現在,讓我們創建一個名為“ PointUpdater”的腳本,該腳本將更新分數文本。我們可以在IDE和類型中打開pointupdater腳本:public <span>int score;
</span>
<span>// Use this for initialization
</span> <span>void Start () {
</span> score <span>= 0;
</span> <span>}
</span>
<span>// Update is called once per frame
</span> <span>void Update () {
</span>
<span>}
</span>
<span>//checks for entering a trigger
</span> <span>void OnTriggerEnter2D(Collider2D other){
</span> <span>//checks other collider's tag
</span> <span>if(other.gameObject.tag == "Enemy"){
</span> score<span>++; //increments score
</span> <span>Destroy (other.gameObject); //destroys other collider's gameobject
</span> <span>}
</span> <span>}
</span>
為了完成遊戲,我們需要在玩家死亡時出現的菜單上添加一個遊戲。
>內部的敵方腳本腳本,讓我們添加:public PointCounter pointCounter<span>;
</span> <span>// Use this for initialization
</span> <span>void Start () {
</span> text <span>= gameObject.GetComponent<text>();
</text></span> text<span>.text = "Score: 0";
</span> <span>}
</span>
<span>// Update is called once per frame
</span> <span>void Update () {
</span> text<span>.text = "Score: " + pointCounter.score.ToString();
</span>
<span>}
</span>
現在,讓我們複製重新啟動和主菜單按鈕。我們應該將按鈕重命名為“ FinrestartButon”和“ FinmainMenubutton”,然後將ShowonFinish標籤添加到兩個按鈕中。 public bool alive<span>;
</span> <span>// Use this for initialization
</span> <span>void Start () {
</span> alive <span>= true;
</span> <span>}
</span>
<span>void OnTriggerEnter2D(Collider2D other){
</span>
<span>//Checks if other gameobject has a Tag of Player
</span> <span>if(other.gameObject.tag == "Player"){
</span> other<span>.gameObject.GetComponent<playercontroller>().alive = false;
</playercontroller></span> Time<span>.timeScale = 0;
</span> <span>}
</span><span>}
</span>
>
完成的項目可以從GitHub下載。
>>在Unity中添加暫停,主菜單和遊戲的常見問題(常見問題解答)
>如何添加Unity的暫停按鈕? >在Unity中添加暫停按鈕涉及創建UI按鈕並將腳本附加到控制遊戲時間尺度的腳本。時間尺度是一個全球乘數,會影響遊戲時間進步的速度。通過將其設置為零,您可以有效地暫停遊戲。暫停按鈕附加的腳本應包含一個函數,該函數在單擊按鈕時切換時間尺度(正常速度)和0(暫停)。 >
如何自定義UI元素的外觀? Unity提供了多種選擇,以自定義UI元素的外觀。您可以在Unity編輯器中直接調整顏色,大小和位置等屬性。對於更高級的自定義,您可以使用UI系統的功能強大的動畫功能,甚至可以通過擴展現有類來創建自己的自定義UI組件。 如何在UI元素中添加聲音效果? >
>可以通過將AudioSource組件附加到元素上並在與元素進行配置時將聲音效果添加到UI元素中,並在與該元素進行交互時播放聲音。例如,您可以在按下按鈕時配置一個按鈕以播放單擊聲。>如何使我的UI響應統一的不同屏幕尺寸?
>優化UI以統一性的性能涉及各種策略,例如最大程度地減少複雜圖形的使用,避免不必要的更新,並使用Canvas Scaleer來減少分辨率您在低端設備上的UI。 Unity的Profiler工具可以是確定UI中性能瓶頸的寶貴資源。
>
以上是在Unity中添加暫停,主菜單和遊戲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

中国女性科技力量在AI领域的崛起:荣耀与DeepSeek合作背后的女性故事女性在科技领域的贡献日益显著。中国科技部数据显示,女性科技工作者数量庞大,在AI算法开发中展现出独特的社会价值敏感性。本文将聚焦荣耀手机,探究其率先接入DeepSeek大模型背后的女性团队力量,展现她们如何推动科技进步,重塑科技发展价值坐标系。2024年2月8日,荣耀正式上线DeepSeek-R1满血版大模型,成为安卓阵营首家接入DeepSeek的厂商,引发用户热烈反响。这一成功背后,女性团队成员在产品决策、技术攻坚和用户

DeepSeek公司在知乎發布技術文章,詳細介紹了其DeepSeek-V3/R1推理系統,並首次公開關鍵財務數據,引發業界關注。文章顯示,該系統單日成本利潤率高達545%,創下全球AI大模型盈利新高。 DeepSeek的低成本策略使其在市場競爭中佔據優勢。其模型訓練成本僅為同類產品的1%-5%,V3模型訓練成本僅為557.6萬美元,遠低於競爭對手。同時,R1的API定價僅為OpenAIo3-mini的1/7至1/2。這些數據證明了DeepSeek技術路線的商業可行性,也為AI大模型的高效盈利樹立了

美的即将发布搭载DeepSeek大模型的首款空调——美的鲜净感空气机T6,发布会定于3月1日下午1点30分举行。这款空调配备先进的空气智驾系统,可根据环境智能调节温度、湿度和风速等参数。更重要的是,它集成了DeepSeek大模型,支持超过40万条AI语音指令。美的此举引发业界热议,尤其关注白电产品与大模型结合的意义。不同于传统空调简单的温度设定,美的鲜净感空气机T6能够理解更复杂、更模糊的指令,并根据家庭环境智能调节湿度等,显著提升用户体验。

網站建設只是第一步:SEO與反向鏈接的重要性 建立網站只是將其轉化為寶貴營銷資產的第一步。您需要進行SEO優化,以提高網站在搜索引擎中的可見度,吸引潛在客戶。反向鏈接是提升網站排名的關鍵,它向谷歌和其他搜索引擎表明您的網站權威性和可信度。 並非所有反向鏈接都有利:識別並避免有害鏈接 並非所有反向鏈接都有益。有害鏈接會損害您的排名。優秀的免費反向鏈接檢查工具可以監控鏈接到您網站的來源,並提醒您注意有害鏈接。此外,您還可以分析競爭對手的鏈接策略,從中學習借鑒。 免費反向鏈接檢查工具:您的SEO情報員

DeepSeek-R1賦能百度文庫與網盤:深度思考與行動的完美融合短短一個月內,DeepSeek-R1已迅速融入眾多平台。百度憑藉大膽的戰略佈局,將DeepSeek作為第三方模型夥伴,整合進自身生態系統,這標誌著其“大模型 搜索”生態戰略的重大進展。百度搜索和文心智能體平台率先接入DeepSeek及文心大模型的深度搜索功能,為用戶提供免費的AI搜索體驗。同時,“百度一下,你就知道”的經典slogan回歸,新版百度APP也整合了文心大模型和DeepSeek的能力,推出“AI搜索”、“全網信息提煉”

AI及時的代碼生成工程:開發人員指南代碼開發的景觀已準備好進行重大轉變。 掌握大型語言模型(LLM)和及時工程對於未來幾年對開發人員至關重要。 Th

此基於GO的網絡漏洞掃描儀有效地確定了潛在的安全弱點。 它利用了GO的並發功能的速度功能,包括服務檢測和漏洞匹配。讓我們探索它的能力和道德


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),