1. 程式人生 > >遊戲製作之路(35)從開始選單切換到遊戲迴圈

遊戲製作之路(35)從開始選單切換到遊戲迴圈

前面學習了怎麼樣製作遊戲執行之後的遊戲選單,這個都是遊戲最基本的功能,標配的,學完選單之後,就心裡想著怎麼樣切換到遊戲迴圈裡了吧?也就是把選單怎麼樣隱藏掉,根據使用者的選擇顯示不同的遊戲迴圈,比如選擇“開始”選單就進行遊戲主迴圈,選擇“退出”就退出遊戲,選擇“引數”就進入引數配置的設定介面。

 

下面就來學習這個方面的內容,首先來看一下前一節的內容,“退出”選單的內容,如下:

        if (GUI.Button(btnExitRect, "退出", skin.button))

        {

            Application.Quit();

        }

退出按鈕點選之後,GUI.Button()函式就會變為true,就進入if語句的複合語句裡執行,也就是執行Application.Quit(),這個函式的意思就是這樣:

退出應用程式。在編輯器或網頁播放器內退出無效。重要:在大多數情況下,iOS應用終止應由使用者決定。

通過這個按鈕,就可以退出應用程式了。

 

接著下來新增開始選單的響應程式碼,在這個例子裡主要新增點選之後在螢幕上建立一個星星,但上面的例子沒有實現這個功能,因此先要新增一個指令碼檔案作為遊戲的主迴圈指令碼,如下圖:

通過這裡A、B、C三步的操作,就可以建立一個新的指令碼,把指令碼命名為:StarGame,如下圖:

看到上圖這樣,就已經建立遊戲主迴圈的指令碼成功了,不過你有沒有仔細看一下,主攝像機下面的兩個指令碼都是打勾的,如下圖:

一個元件被勾選中,就說明這個元件可以使用,如果把勾去掉,就是這個元件不能使用, 相當元件的enabled屬性為false狀態。在這個例子裡,我們想先顯示遊戲進入選單,因此只能勾選中StartMenu,把StarGame前面的勾去掉,如下圖:

這時候,當程式執行起來時,就不會呼叫StarGame指令碼運行了。只有當在開始選單裡點選之後才把這個指令碼執行,同時把選單的元件隱藏掉,這樣就達到切換不同遊戲介面的目標。所以在StartMenu.cs裡新增下面的程式碼:

if (GUI.Button(btnStartRect, "開始", skin.button))

{

    StarGame g = gameObject.GetComponent<StarGame>();

    g.enabled = true;

    this.enabled = false;

}

當你使用者點選開始按鈕時,就會進入這個函式執行,第一行語句定義了一個StarGame類的物件g,而這個物件g是從StarGame類創建出來的,這裡通過GetComponent函式獲取主攝像機裡相關的元件。緊接著設定遊戲物件g的屬性enabled 為true,就是執行這個物件的程式碼,同時把當前選單類元件enabled 設定為false,就是禁用當前選單類程式碼執行,從而到達切換的目的。

 

接著下來的過程就比較簡單了,就是新增遊戲主迴圈的邏輯,在這裡主要實現點選一下就出現一顆星星,所以新增如下程式碼到StarGame.cs裡:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StarGame : MonoBehaviour
{
    public GameObject starPrefab;    

    // Use this for initialization
    void Start()
    {
                
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //
            Vector3 pos = Input.mousePosition;
            pos.x /= Screen.width;
            pos.y /= Screen.height;

            //
            GameObject g = (GameObject)Instantiate(starPrefab, pos, Quaternion.identity);            
        }
    }

    void OnGUI()
    {

    }
}

在這段程式碼裡,定義了一個全域性的預製件starPrefab物件,它是遊戲物件,可以從編輯器上拖動設定,就是把前面建立的星星的預製件拖動過去。接著就在Update()函式加入滑鼠操作的響應程式碼,Input.GetMouseButtonDown(0)是獲取滑鼠的左鍵點選,就進入if語句裡執行,因此獲取滑鼠當前座標位置到pos 裡,然後調整之後,呼叫函式Instantiate來建立星星顯示出來。這裡使用四元數Quaternion.identity單位向量來旋轉,這樣就在滑鼠點選的位置建立星星了。執行一下這個遊戲,發現沒有星星出來,哈哈......

 

好吧,前面建立的預製件有點問題,我們再來修改它,把預製件改成這樣,如下圖:

一定記得按上圖修改,有的元件就刪除,同有元件就新增進去,比如component -> rendering -> GUI Texture順序新增顯示圖片。

按下面的圖片拖動預製件到指令碼程式碼的變數裡,如下圖:

按A、B、C的順序搞好之後,這次大功告成,可以點選執行按鈕了,然後在介面點選幾下,就可以放置星星了,如下圖:

到這裡實現從遊戲選單切換到遊戲主迴圈的過程。

https://blog.csdn.net/caimouse/article/details/51749579