從一點兒不會開始——Unity3D遊戲開發學習(二) ——GUI控件之Button

一些廢話

我在上一篇「一點兒不會」的系列隨筆中說大概一週會發個2~3篇關於Unity的學習筆記。可這就兩週過去了,我還停留在一篇的進度上,主要是這兩週發生了一些事情致使我更新緩慢。其實截至目前爲止,上一篇的隨便的閱讀數量只有可憐的29次,我估計至少有9次是我用不一樣設備、不一樣IP訪問的結果。程序員

哈哈,不過原本這隨筆的目的也就是個隨筆,那就無所謂閱讀量啦。學習

另外我這人嘴上沒啥把門兒的,之前想到啥說啥,如今好點兒了,但仍是偶爾會有髒話,沒轍,這是秉性,改不了了,因此若是之後的文章裏出現了髒話啥的,絕對沒有針對誰的意思。徹底能夠理解是我傻逼就好了。編碼

ok,繼續了。此次學習GUI控件中的Button。spa

 

建立腳本

上一篇已經介紹了各個視圖的做用和他們所存放的東西。此次主要用到Hierarchy視圖中Main Camera以及在Project試圖中建立腳本。對,腳本,它就叫腳本,由於它綁定在遊戲對象上。其實他孃的最爲一個寫程序的屌絲,我挺不喜歡「腳本」這個詞兒的。咱們今天就是要建立個腳本並綁定在Main Camera上,來把Button搞出來。3d

進來咱們的IDE,你會發如今Hierarchy視圖中Main Camera已經默認被建立好了,對吧。調試

image

而後就要建立腳本,在Project視圖上邊兒的Create而後選擇第三個項,C# Script。對,C#,我深愛的C#。code

image

 

將該腳本重命名爲Test_Button。而後就建立了個C#腳本。對象

image

想編輯?雙擊它。若是你安裝Unity 的時候使用的是默認設置,這個時候就會自動打開MonoDevelop IDE來讓你編輯這個C#腳本,而且爲你生產了.csproj和.sln等文件。我擦我一直是用VS寫C#的好麼?因而乎,直接雙擊生成的.sln,進入了熟悉的VS嘍,而後就開始C#的編碼了。用VS無法兒直接調試,要調試的話還得用MonoDevelop,這個是後話了。我是喜歡用VS寫代碼,到須要調試的時候直接用Mono就好了。blog

image

 

代碼中繪製Button

建立的腳本文件中,Unity默認爲咱們提供了兩個方法。Start() 和 Update()。遊戲

這裏說一下Start()是腳本加載的時候執行的,只執行一次,通常用來初始化一些私有成員的時候用;Update方法是更新的,遊戲運行每一幀都執行一次,它的做用很是大。

而咱們在建立今天要學習的Button,須要在OnGUI方法中,這個方法沒有被默認建立,須要咱們本身寫。OnGUI用來繪製控件的,很相似咱們之前作桌面程序的OnPaint事件。

接下來就是繪製Button的代碼,在OnGUI方法中,使用GUI.Button()方法建立,第一個參數是Rect類型的,用來設置Button 的位置;第二個參數爲內容,能夠是string類型的,也能夠是Texture類型的,也就是圖片。該方法的返回類型爲Bool類型的,點擊了就返回True,不然是False。

以下:

void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 100, 50), "第一個Button"))
        {
            Debug.Log("第一個Button被點擊了!");
        }

        if (GUI.Button(new Rect(20, 20, 100, 50), "第二個Button"))
        {
            Debug.Log("第二個Button被點擊了!");
        }
    }

而後,回到Unity界面。點擊Test_Button,你會在Inspector看到,Unity裏的腳本已經顯示出來修改過的內容了。

再而後,關鍵的一步也是很是簡單的一步到了,直接把Test_Button拖到Hierarchy視圖中的Main Camera上,就完成了腳本到Game Object的綁定。是否是很爽?

image

而後,點擊上邊的運行按鈕。ok,出來了。點擊兩個Button下邊的Log就會顯示出來,與代碼中寫的一致吧?點擊下邊的Log,Console視圖窗口會彈出來,更方便咱們查看輸出Log信息。

image

image

簡單吧?但你有沒有發現一個問題?兩個Button重疊了啊我操!相信你剛開始就看到了,爲何重疊了?

沒錯兒,兩個GUI.Button()的第一個參數,Rect的位置設置的問題。太近了,挪遠點兒就行了。可是,你有沒有發現,這個Rect的位置是絕對的!若是部署在不一樣分辨率上,有可能會形成越界、顯示不全的問題啊!我操,蛋疼的多分辨率啊,作設備應用程序員永遠的痛啊!!!因而,咱們能夠這樣搞————————

GUILayout.Button()

使用GUILayout.Button()能夠解決剛纔那個覆蓋的問題,Unity很貼心。上代碼:

void OnGUI()
    {
        //if (GUI.Button(new Rect(0, 0, 100, 50), "第一個Button"))
        //{
        //    Debug.Log("第一個Button被點擊了!");
        //}

        //if (GUI.Button(new Rect(20, 20, 100, 50), "第二個Button"))
        //{
        //    Debug.Log("第二個Button被點擊了!");
        //}

        if (GUILayout.Button("GUILayout搞出來的Button三", GUILayout.Width(200), GUILayout.Height(50)))
        {
            Debug.Log("GUILayout搞出來的Button三被點擊了!");
        }

        if (GUILayout.Button("GUILayout搞出來的Button四", GUILayout.Width(200), GUILayout.Height(50)))
        {
            Debug.Log("GUILayout搞出來的Button四被點擊了!");
        }
    }

運行,看圖:

image

咱們在代碼中再也不須要設置Button的位置了,GUILayout.Button幫咱們自動排列了。若是想讓兩個控件增長距離也很簡單,使用GUILayout.Space()方法便可,該方法的參數爲int,指像素的個數。

 

本篇對應的Unity 工程,請下載。

總結和廢話

OK。

以上就是今天學習的Button。

總以爲本身用不小的篇幅介紹如此簡單的控件有些裝逼。其實主要是介紹了腳本的建立和如何編輯,下一篇我估計會介紹儘可能多的GUI控件和個人一些心得體會。

學得比較慢,我是想踏實下來,再也不浮躁地急於求成。

 

最近狀態特別很差,對本身產生了懷疑。包括能力、夢想,還有對現實的態度。

老大不小了,依舊迷茫不堪。

想明白活着的意義,特別想。

相關文章
相關標籤/搜索