ugui是unity4.6開始加入的一個新的ui系統,非常強大,下面我們將通過一系列博客的方式一起來學習一下ugui的使用。本篇博客會介紹如何使用ugui制作一個游戲菜單,並且了解如何讓物體與ugui的控件交互,效果圖如下:
首先還是新建一個unity工程,並且新建一個場景,然后新建一個Canvas畫布,我們所有的ui控件,都是要建立在Canvas上面的。然后在Canvas下面建立一個button重命名為StartButton,並調節成效果圖中的樣式。然后再復制兩份出來,把他們放置到如效果圖的位置,調節他們的文字和顏色,大小等。
接着在Canvas下面新建一個Toggle,它類似於checkbox的功能。將它設置為效果圖的樣式。然后在新建一個Slider,設置它的參數如效果圖所示:
接下來我們要設計出游戲的公告欄面板,它是由三個image,2個text,一個scrollbar組成的。
首先還是新建一個image,並將它重命名為Note,設置它的大小如效果圖所示,然后在它的下面再新建一個image並命名為TitileBG,將它設置為紫色,並且放到Note的頂部位置,然后在TitileBG下面新建一個text,將內容設置為公告欄,然后繼續在Note的下面新建一個image,將它命名為Content,用它來承載我們的公告內容。然后在Content的下面新建一個text,然后給text賦值上一段比較長的文字內容,將text拉長以顯示全部的文字內容。為了讓文字具有滾動的功能,我們要為Content加上一個Scroll Rect,只勾選Vertical以便讓文字只能垂直方向移動,並將content屬性設置為text文字,這樣就具備了滾動的功能了。為了讓多余的部分不顯示出來,我們需要為Content添加一個mask組件。
接着讓我們為公告欄設計一個滑塊,在Note下面新建一個Scroll Bar,將他的Direction設置為Bottom to Top,然后將Content中的Vertical ScrollBar屬性設置為我們剛建立的這個ScrollBar。
為了方便,我們新建一個空物體來掛載腳本,新建一個空物體,命名為GameManager,然后為它掛載一個腳本,代碼如下:

1 /* 2 ProjectName: UGUI之游戲菜單 3 Author: 馬三小伙兒 4 Blog: http://www.cnblogs.com/msxh/ 5 Github:https://github.com/XINCGer 6 Date: 2016/09/14 7 */ 8 using UnityEngine; 9 using System.Collections; 10 11 public class GameManager : MonoBehaviour { 12 13 // Use this for initialization 14 void Start () { 15 16 } 17 18 // Update is called once per frame 19 void Update () { 20 21 } 22 23 public void OnStartGame(string sceneName){ 24 Application.LoadLevel (sceneName); 25 } 26 public void OnStartGame(int sceneIndex){ 27 Application.LoadLevel (sceneIndex); 28 } 29 }
里面只有一個重載的OnStartGame函數,用它來加載新的場景。將這OnStartGame函數綁定到StartButton的OnClikc事件上面,然后將參數設置為"Game"(下一個場景的名字),運行預覽,點擊開始游戲即可跳轉到Game場景了。
在Game場景中主要的部分只有一個Cube(已重命名為Player)和一個Slider,我們將用他們來學習控制是如何交互的。為Player添加一個腳本,代碼如下:

1 /* 2 ProjectName: UGUI之游戲菜單 3 Author: 馬三小伙兒 4 Blog: http://www.cnblogs.com/msxh/ 5 Github:https://github.com/XINCGer 6 Date: 2016/09/14 7 */ 8 using UnityEngine; 9 using System.Collections; 10 11 public class Player : MonoBehaviour { 12 13 public float speed=90f; 14 // Use this for initialization 15 void Start () { 16 17 } 18 19 // Update is called once per frame 20 void Update () { 21 transform.Rotate (Vector3.forward*Time.deltaTime*speed); 22 } 23 24 public void ChangeSpeed(float newSpeed){ 25 speed = newSpeed; 26 } 27 }
這個腳本可以控制Cube的旋轉速度,里面有一個ChangeSpeed函數,用來來改變速度。接着將Slider的OnValueChanged事件賦值為ChangeSpeed函數,這樣Slider在滑動時就會通知ChangeSpeed函數去更改speed,Cube的旋轉速度也就隨之而改變了。
本篇博客的工程已經同步到github:https://github.com/XINCGer/Unity3DTraining/tree/master/UGUITraining/UGUIDemo01
作者:馬三小伙兒
出處:http://www.cnblogs.com/msxh/p/5921776.html
請尊重別人的勞動成果,讓分享成為一種美德,歡迎轉載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。留下你的腳印,歡迎評論!