?學(xué)unity的同學(xué)委托事件傻傻分不清楚,今天我就給大家來講講什么是Unity的委托的幾個(gè)要點(diǎn):
??1: 定義一個(gè)委托的類型。
委托是一種容器,容器里面放的是函數(shù)方法。而函數(shù)的形式各不相同,參數(shù),返回值各不相同,所以你做委托之前,先得要定義好這個(gè)委托容器存放的函數(shù)的類型,即委托類型。
delegate void
Delegate_func(參數(shù)1, 參數(shù)2)
?這句是定義了一個(gè)Delegate_func的委托類型,里面存放的函數(shù)的類型為: void Delegate_func (參數(shù)1, 參數(shù)2)
??2: 定義一個(gè)委托容器變量,來存放函數(shù)
當(dāng)我們定義好委托類型后,也就定義了這個(gè)容器存放什么樣的函數(shù),接下來我們定義一個(gè)委托變量, 這個(gè)就比較簡單了,?Delegate_func clicks,如何往容器里面加入函數(shù)呢?
一個(gè)是賦值=,一個(gè)+= 一個(gè)是-=;
clicks = xxxx函數(shù); clicks += xxxx函數(shù); clicks -= xxxx函數(shù);
?3: 觸發(fā)委托:
?? 定義了好了函數(shù)類型后,將函數(shù)加入到委托容器后,你只要觸發(fā)委托調(diào)用,委托就會幫你把容器里面的每個(gè)函數(shù)都調(diào)用一次, 觸發(fā)的時(shí)候和調(diào)用普通函數(shù)沒有區(qū)別,例如clicks(參數(shù)1, 參數(shù)2);
4: 委托有什么用呢?
??我們經(jīng)常希望某個(gè)事件發(fā)生了以后,就做某種處理, 比如,收到網(wǎng)絡(luò)事件后做響應(yīng)的處理。這個(gè)時(shí)候,我們可以定義一個(gè)委托變量,將有事件發(fā)生后要處理的函數(shù)對象都保存進(jìn)去, 當(dāng)有事件發(fā)生的時(shí)候,觸發(fā)這個(gè)委托,這樣,之前的那些函數(shù)都會被調(diào)用到。有事件了,做哪些處理。
5: event又是什么鬼?
??會有這種情況,一個(gè)模塊A定義了一個(gè)委托變量, 外部模塊B,要給這個(gè)委托變量添加回掉函數(shù), 這樣,我們一般會把這個(gè)變量設(shè)置成public,直接可以訪問,可是問題來了,觸發(fā)的時(shí)候,A模塊可以觸發(fā),B模塊也可以觸發(fā),可是我如果只想要A模塊觸發(fā),B模塊只能添加,不能觸發(fā),而public權(quán)限B模塊也可以觸發(fā),這種如何解決呢?這個(gè)時(shí)候定義委托變量的時(shí)候,在前面加event, 這樣外部模塊B,只能往委托里面來添加函數(shù),而不能觸發(fā)函數(shù)調(diào)用,觸發(fā)函數(shù)調(diào)用,只有模塊A,這個(gè)就是event修飾的作用。
如果還有疑問,可以加unity學(xué)習(xí)交流群一起交流學(xué)習(xí)哦