1. 程式人生 > >【笨木頭Unity】入門之旅010(完結):Demo之四處找死(五)_UI

【笨木頭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圖來展示了:

u009_5.gif

我只要做了幾件事情:

a.把Text的高度修改為50

b.把Text的文字內容改為“我很好”

c.把Text的字型大小改為25

d.把Text的顏色改為紅色

 

現在,運行遊戲,UI是能跟著BugPlayer移動的。

u009_6.gif

現在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屬性裡(小若:特麼的,這是語文四級考試嗎?)

u009_7.gif

 

接下來,當然就是修改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,運行遊戲,看看我們的效果吧:

u009_8.gif

 

哦,對不起,我玩得太入迷了,一不小心多玩了一會。

細心的笨蛋一定已經發現了,好像有些文字沒有顯示出來,這是因為Text的寬度不夠大,這個大家自己解決,太簡單,不想說。

 

5.結束

特麼的,終於結束了。

這個Demo結束了,木頭的Unity入門之旅系列教程也結束了,耗時將近一個月。

 

我相信,對於入門,這些知識已經夠用了,接下來就需要大家自己去折騰,去看其他的教程了。

Unity其實入門是很難的,我是指入門的前幾天,拖幾個物體、建個場景當然很輕鬆,但想真正寫一個Demo級別的小遊戲,似乎都會很迷茫。

而度過前面的幾天之後,其實就輕鬆多了,習慣了Unity的操作方式,看教程也會容易理解很多。

但,入門後的1個月、2個月、1年、2年,也許會越來越難,畢竟,Unity太強大了,有很多東西值得去研究。

 

請原諒木頭精力有限,無法持續輸出教程,最近公司也到了比較緊張的時期,我得多花心思在公司上面。

 

OK,很高興我能堅持完成這個系列的教程(雖然後面幾篇有點乏力),希望以後還能繼續多寫教程。

 

如果大家有什麼想要了解的,也不妨給我留言,我嘗試去折騰,然後寫成教程。

太難的就別為難我了,畢竟我還處於Unity初級階段。

 

以上。

 

本篇原始碼:Unity_benmutou_010.7z