一些廢話
我在上一篇“一點兒不會”的系列隨筆中說大概一周會發個2~3篇關於Unity的學習筆記。可這就兩周過去了,我還停留在一篇的進度上,主要是這兩周發生了一些事情導致我更新緩慢。其實截至目前為止,上一篇的隨便的閱讀數量只有可憐的29次,我估計至少有9次是我用不同設備、不同IP訪問的結果。
哈哈,不過本來這隨筆的目的也就是個隨筆,那就無所謂閱讀量啦。
另外我這人嘴上沒啥把門兒的,以前想到啥說啥,現在好點兒了,但還是偶爾會有臟話,沒轍,這是秉性,改不了了,所以如果以后的文章里出現了臟話啥的,絕對沒有針對誰的意思。完全可以理解是我傻逼就行了。
ok,繼續了。這次學習GUI控件中的Button。
創建腳本
上一篇已經介紹了各個視圖的作用和他們所存放的東西。這次主要用到Hierarchy視圖中Main Camera以及在Project試圖中創建腳本。對,腳本,它就叫腳本,因為它綁定在游戲對象上。其實他娘的最為一個寫程序的屌絲,我挺不喜歡“腳本”這個詞兒的。我們今天就是要創建個腳本並綁定在Main Camera上,來把Button搞出來。
進來我們的IDE,你會發現在Hierarchy視圖中Main Camera已經默認被創建好了,對吧。
然后就要創建腳本,在Project視圖上邊兒的Create然后選擇第三個項,C# Script。對,C#,我深愛的C#。
將該腳本重命名為Test_Button。然后就創建了個C#腳本。
想編輯?雙擊它。如果你安裝Unity 的時候使用的是默認設置,這個時候就會自動打開MonoDevelop IDE來讓你編輯這個C#腳本,並且為你生產了.csproj和.sln等文件。我擦我一直是用VS寫C#的好么?於是乎,直接雙擊生成的.sln,進入了熟悉的VS嘍,然后就開始C#的編碼了。用VS沒法兒直接調試,要調試的話還得用MonoDevelop,這個是后話了。我是喜歡用VS寫代碼,到需要調試的時候直接用Mono就行了。
代碼中繪制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的綁定。是不是很爽?
然后,點擊上邊的運行按鈕。ok,出來了。點擊兩個Button下邊的Log就會顯示出來,與代碼中寫的一致吧?點擊下邊的Log,Console視圖窗口會彈出來,更方便我們查看輸出Log信息。
簡單吧?但你有沒有發現一個問題?兩個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四被點擊了!"); } }
運行,看圖:
我們在代碼中不再需要設置Button的位置了,GUILayout.Button幫我們自動排列了。如果想讓兩個控件增加距離也很簡單,使用GUILayout.Space()方法即可,該方法的參數為int,指像素的個數。
總結和廢話
OK。
以上就是今天學習的Button。
總覺得自己用不小的篇幅介紹如此簡單的控件有些裝逼。其實主要是介紹了腳本的創建和如何編輯,下一篇我估計會介紹盡量多的GUI控件和我的一些心得體會。
學得比較慢,我是想踏實下來,不再浮躁地急於求成。
最近狀態特別不好,對自己產生了懷疑。包括能力、夢想,還有對現實的態度。
老大不小了,依舊迷茫不堪。
想明白活着的意義,特別想。