1.首先我們需要構造一個用於傳輸數據並承載回調函數的類
比如:(根據需要自定義構造)
1 using UnityEngine; 2 using System.Collections; 3 4 //回調函數 5 public delegate void WarningResult(); 6 public class WarningModel : MonoBehaviour 7 { 8 //回調函數 9 public WarningResult result; 10 //警告文本 11 public string value; 12 13 //構造警告結構體 14 public WarningModel(string s_value, WarningResult s_result = null) 15 { 16 this.value = s_value; 17 this.result = s_result; 18 } 19 }
2.然后在需要的時候實例化出來構造結構體
比如:
1 /// <summary> 2 /// 進入游戲按鈕觸發 3 /// </summary> 4 void OnLoginClick() 5 { 6 //驗證賬號密碼 7 //如果賬號密碼有誤,則顯示警告面板並return返回 8 if (m_inputAccount.text == "" || m_inputPassWord.text == "") 9 { 10 //警告信息 //回調函數 11 WarningManager.instance.AddWarringError("輸入的賬號密碼不正確,請重新輸入",Result); 12 return; 13 } 14 15 16 //進入游戲,按鈕棄用 17 m_enterGameBtn.interactable = false; 18 19 20 } 21 //測試用回調函數 22 void Result() 23 { 24 Debug.Log("登錄界面回調函數"); 25 } 26
3.最后在需要實現該函數的類中承接回調函數,並實現該方法
如下:
1 //處理警告后的回調函數 2 private WarningResult result; 3 4 /// <summary> 5 /// 供外部調用傳遞顯示的警告信息方法 6 /// </summary> 7 /// <param name="s_warning">警告信息結構體</param> 8 public void DoShowWarring(WarningModel s_warning) 9 { 10 //激活警告界面 11 gameObject.SetActive(true); 12 13 //如果游戲物體沒來的及找到,則先賦值游戲物體 14 if (m_warningTex == null) 15 { 16 Init(); 17 } 18 19 //顯示警告信息 20 m_warningTex.text = s_warning.value; 21 //填充回調函數 22 this.result = s_warning.result; 23 24 //如果回調函數不為空,則執行回調函數 25 if (result != null) 26 { 27 result(); 28 } 29 }