【笨木頭Unity】入門之旅010(完結):Demo之四處找死(五)_UI
UI是遊戲裡必不可少的元素,在Unity裡新增UI是比較輕鬆的事情,但要玩好它,可就不那麼輕鬆了。
沒關係,先入門。
笨木頭花心貢獻,啥?花心?不,是用心。
轉載請註明,原文地址:http://www.benmutou.com/archives/2196
文章來源:笨木頭與遊戲開發
1.建立UI
很早之前也介紹過怎麼建立UI,這裡簡單再回顧一下。
在Hierarchy視窗中點選右鍵,依次選擇【UI】-【Text】。
我們會看到視窗中,多了一個Canvas和Text:
2.讓UI跟隨物體移動
由於我們要建立的UI是屬於BugPlayer的,所以,首先要把整個Canvas拖動到BugPlayer身上:
此時的Canvas雖然是在BugPlayer之下,但是…它的心是不屬於BugPlayer的,它是屬於攝像機的。
要想Canvas隨著物體移動,很簡單,修改Canvas屬性,如下圖:
將Canvas的Render Mode屬性改為【World Space】,很好,這樣UI就能跟著物體移動了(具體原理不解釋)。
此時的Canvas十分龐大,也許是我們的場景太小了。
沒關係,我們修改Canvas的屬性,讓它的Scale變小一些:
由於UI是平面的,所以只需要縮小X和Y,Z可以忽略(Z:特麼的….)
我還偷偷把Canvas的X、Y、Z座標設為0了,因為這樣它才會出現在BugPlayer的正中心。
3.調整UI大小和樣式
接下來的操作有些小繁瑣,我只能用gif圖來展示了:
我只要做了幾件事情:
a.把Text的高度修改為50
b.把Text的文字內容改為“我很好”
c.把Text的字型大小改為25
d.把Text的顏色改為紅色
現在,運行遊戲,UI是能跟著BugPlayer移動的。
現在UI的方向不對,我們可以把Canvas旋轉一下,讓方向變正確,這個我就不演示了,大家自己折騰。
4.在程式碼中操作UI
最後要做的事情,就是在程式碼裡操作UI了。
其實和操作物體是差不多的,主要就是怎麼找到這個UI,之前所說的各種找GameObject方式都可以用在UI身上。
不過,這次,我們有稍微一點點的不同。
開啟BugPlayerLogic指令碼,加上一個屬性和兩個函式,如下所說:
using UnityEngine;
using UnityEngine.UI;
public class BugPlayerLogic : MonoBehaviour {
public Text txt = null;
public void XChange()
{
txt.text = “啊,我的X!”;
}
public void ZChange()
{
txt.text = “啊,我的Y!不,是我的Z!”;
}
}
我把using語句也貼出來了,為什麼呢?因為要使用UI物件,就要引入UnityEngine.UI名稱空間,否則是找不到這些UI類的。
我們現在了一個Text屬性,沒錯,我們使用的是之前的其中一種方式,用屬性來儲存物件。
同時增加了兩個函式,等會會用到。
現在,回到編輯器,把Text拖動到BugPlayer的BugPlayerLogic指令碼元件上的txt屬性裡(小若:特麼的,這是語文四級考試嗎?)
接下來,當然就是修改SomethingGGD指令碼了,如下:
void OnTriggerEnter(Collider other)
{
Debug.Log(“OnTriggerEnter”);
BugPlayerLogic playerLogic = other.gameObject.GetComponent<BugPlayerLogic>();
int rand = (int)Random.Range(1, 100);
if(rand < 50)
{
other.gameObject.transform.position = new Vector3(
other.gameObject.transform.position.x,
other.gameObject.transform.position.y,
other.gameObject.transform.position.z – 20
);
playerLogic.XChange();
}
else
{
other.gameObject.transform.position = new Vector3(
other.gameObject.transform.position.x + 20,
other.gameObject.transform.position.y,
other.gameObject.transform.position.z
);
playerLogic.ZChange();
}
}
只需修改OnTriggerEnter函式。
我做了什麼事情呢?我呼叫了other.gameObject的GetComponent函式,這個函式可以獲取GameObject上的元件物件。
這是很強大的功能,我們只要擁有了GameObject物件,就可以獲取到它所有的元件物件了。
既然已經能獲取BugPlayerLogic物件了,那自然可以呼叫它的函數了。
我們在不同的if條件裡分別呼叫了XChange和ZChange函式。
OK,運行遊戲,看看我們的效果吧:
哦,對不起,我玩得太入迷了,一不小心多玩了一會。
細心的笨蛋一定已經發現了,好像有些文字沒有顯示出來,這是因為Text的寬度不夠大,這個大家自己解決,太簡單,不想說。
5.結束
特麼的,終於結束了。
這個Demo結束了,木頭的Unity入門之旅系列教程也結束了,耗時將近一個月。
我相信,對於入門,這些知識已經夠用了,接下來就需要大家自己去折騰,去看其他的教程了。
Unity其實入門是很難的,我是指入門的前幾天,拖幾個物體、建個場景當然很輕鬆,但想真正寫一個Demo級別的小遊戲,似乎都會很迷茫。
而度過前面的幾天之後,其實就輕鬆多了,習慣了Unity的操作方式,看教程也會容易理解很多。
但,入門後的1個月、2個月、1年、2年,也許會越來越難,畢竟,Unity太強大了,有很多東西值得去研究。
請原諒木頭精力有限,無法持續輸出教程,最近公司也到了比較緊張的時期,我得多花心思在公司上面。
OK,很高興我能堅持完成這個系列的教程(雖然後面幾篇有點乏力),希望以後還能繼續多寫教程。
如果大家有什麼想要了解的,也不妨給我留言,我嘗試去折騰,然後寫成教程。
太難的就別為難我了,畢竟我還處於Unity初級階段。
以上。
本篇原始碼:Unity_benmutou_010.7z