2017年10月31日 星期二

Unity內增加UGUI的Button Event方式

一般要來用UGUI的Button,只要事先在Editor內設定好就可以了,例如像這樣:

那為什麼要特別講這個?因為當在做Runtime產生的清單GUI之類時,就需要將Runtime產生的Button即時賦予特定的參數,好讓OnClick的UnityEvent可以在點擊時傳回這個特定的參數。

本來有想嘗試使用預設定義的UnityEvent,例如像是GameObject.name這種看起來可以在點擊時,便自動傳回該UGUI名稱的方式:

但是查詢網路過後,發現使用方式對我來講有些複雜,所以就想說看能不能直接更改已創造的UnityEvent所指定回傳的參數;結果反而發現直接在Button上增加一個全新的UnityEvent還比較快和方便,這樣就可以在創造即時UGUI時,依照需求來即時賦予相對應的UnityEvent了。

首先即時創造出來的Button部分,並不需要事先在OnClick處設定UnityEvent,因為是要靠程式碼來即時創造並附加上去:

然後假設我即時創造了一個GameObject名為"Action"的Button,並且我需要在點擊這個Button時,讓程式回傳給我這個Button名稱:
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5.  
  6. public class ButtonController : MonoBehaviour {
  7.  
  8.     Button ActionButton;
  9.  
  10.     void Start ()
  11.     {
  12.         ActionButton = GameObject.Find("Action").GetComponent<Button>();
  13.         ActionButton.onClick.AddListener(delegate { GetButton(GameObject.Find("Action").name); });
  14.     }
  15.  
  16.     void Update ()
  17.     {
  18.  
  19.     }
  20.  
  21.     public void GetButton(string tempData)
  22.     {
  23.         Debug.Log(tempData);
  24.     }
  25. }
這樣就等於是在Inspector處設定了這個UnityEvent:

可以隨著即時創造的UGUI來進行即時賦予參數了,程式碼也簡單方便。

沒有留言:

張貼留言