關於Unity中委托與回調函數的應用


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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM