PDF文檔,請到這個鏈接進行下載:http://gad.qq.com/article/detail/35413
下載方法請參考:http://gad.qq.com/article/detail/35416
Super Invoke插件Unity商店地址:https://www.assetstore.unity3d.com/cn/#!/content/7070
Super Invoke插件,是專門用來做方法體調用的。
比如,延遲多少秒調用這個方法體。
比如,重復調用這個方法體多少次,每次的間隔時間是多少秒。
而且他還可以像協程一樣,中斷正在運行的工作(應該就是封裝了Unity的協程)。
還可以判斷這個工作是否運行完、是否被中斷、是否正在運行中。
就像評論里說的:
“這是一個簡單而不可思議的資產(Unity商店中的所有東西,都被稱為資產)。
很簡單,這是我購買過的最有用的資產之一。 沒有它,我無法想象我是如何做游戲的!”
而且值得一提的是,這個插件的官方文檔,是我目前讀過的所有官方文檔(大概20多個)中,最最最最易讀的!!!!
瘋狂為作者打Call!
PDF文檔,請到這個鏈接進行下載:http://gad.qq.com/article/detail/35413
下載方法請參考:http://gad.qq.com/article/detail/35416
Super Invoke 插件 官方文檔翻譯
Time-control?your?code- 時間控制你的代碼
Super Invoke超級調用 由 handcrafted by Jacob Games Stay 制作保持聯系以獲取新聞和更新
https://twitter.com/JacobGameshq
1 - Introduction 介紹
1.1 - How to use Super Invoke 如何使用超級調用
超級調用是一種允許您輕松地控制任何代碼的工具。
您可以延遲無參數方法以及參數化方法。 您還可以使用方法之間的方法和自定義延遲創建高可讀序列等等。
要使用超級調用,您需要將以下using語句添加到源文件中:
using JacobGames.SuperInvoke;
所有API都通過SuperInvoke類提供。
1.2 - Initialization (optional) 初始化(可選)
Super Invoke將在您第一次使用時自動初始化其內部結構。 如果您喜歡控制此操作,請使用:
SuperInvoke .Init ();
一個可選的bool參數用于在SuperInvoke游戲對象管理器上設置DontDestroyOnLoad標志。(bool參數用于選擇是否在切換場景時銷毀SuperInvoke)
1.3 - Beware of C# limitations 小心C#限制
請參閱本文檔的第8部分,了解如何在使用Super Invoke時克服C#限制。
1.4 - Online version 在線版
本文檔的實時版本可在線獲取:https://drive.google.com/open?id=1mAM_70_lGEL5ZSWsw5seM-z7a26Ij08kCnsGPfH2WxY
2 - Delays 延遲
2.1 - Delay a parameterless method 延遲無參數的方法
要延遲無參數方法,只需使用 S uperInvoke.Run , 指定
- The method 方法
- The delay 延時的時間
- An optional tag (discussed later) 可選標簽(稍后討論)
SuperInvoke .Run ( ()=> PlaySound(), 1f);
您也可以使用(合約形式):
SuperInvoke .Run (PlaySound, 1f);
并且您還可以在方法之前指定延遲:
SuperInvoke .Run (1f, PlaySound);
2.2 - Delay a method with parameters 延遲具有參數的方法
要使用參數使用與無參數方法完全相同的語法來延遲方法。 合約形式不能使用。
SuperInvoke .Run ( ()=> PlaySound(VictoryJingle), 1f);
2.3 - Delay any block of code 延遲任何代碼塊
如果需要,您可能會延遲任何代碼塊。 下列代碼塊中的任何行將在5秒后執行:
SuperInvoke .Run ( ()=> {
Debug .Log( "Prefab instantiation." );
Instantiate( prefab );
},
5f);
3 - Sequences 序列
3.1 - Create sequences 創建序列
要使用序列,您必須首先創建一個類型為 I SuperInvokeSequence 的對象 :
ISuperInvokeSequence sequence = SuperInvoke. CreateSequence ();
CreateSequence 方法是一個工廠:每次調用它將返回一個不同的序列對象。(把序列中的對象一個一個取出來,每次調用,都取一個出來,下次調用取下一個)
3.2 - Compose sequences 撰寫序列
創建序列對象后,您可以編寫序列添加方法和延遲:
sequence. AddMethod (RemovePinAndThrowGrenade)//添加方法
. AddDelay (5f) //添加延遲
. AddMethod (ExplodeGrenade);
3.3 - Run sequences 運行序列
組合序列后,可以如下所示運行:
sequence. Run ();
Equivalent way to compose the previous sequence 和上一個序列方法等效的方法:
以前的序列也可以用以下方式寫:
sequence. AddMethod (RemovePinAndThrowGrenade)
. AddMethod (5f, ExplodeGrenade)
根據您的喜好,您可以互換使用這兩種方式。
當您使用多種方法和延遲創建序列時,使用AddDelay可能更易讀。
3.4 - Add a delay to the entire sequence 向整個序列添加延遲
有時,您可能需要在組合完成后延遲整個序列的執行。 您可以通過三種不同的方式完成此任務。
Method 1 - Add a starting delay 方法1 - 添加啟動延遲
sequence. AddDelay(2f)
. AddMethod(RemovePinAndThrowGrenade)
.AddDelay(5f)
.AddMethod(ExplodeGrenade)
.Run();
Method 2 - Add a delay to the first method 方法2 - 向第一種方法添加延遲
sequence.AddMethod(RemovePinAndThrowGrenade, 2f )
.AddDelay(5f)
.AddMethod(ExplodeGrenade)
.Run();
Method 3 - Pass the delay to R un 方法3 - 將延遲傳遞給運行
sequence . AddMethod(RemovePinAndThrowGrenade)
.AddDelay(5f)
.AddMethod(ExplodeGrenade)
. Run(2f) ;
方法3可能是最可讀的,因為您在Run中添加了一個不會干擾編譯序列延遲的全局延遲。
(感覺:這里的添加延遲應該是修改延遲的意思吧)
4 - RunRepeat 重復運行
4.1 - Repeats 重復
要重復執行方法或任何代碼,請使用 S uperInvoke.RunRepeat 和以下參數:
SuperInvoke .RunRepeat (Delay, RepeatRate, Repeats, Method);
- Delay: 初始延遲(以秒為單位),之后重復開始
- RepeatRate : 每次重復之間的時間,以秒為單位
- Repeats : 重復次數(固定次數或無限次)
- Method: 要重復的代碼/方法
4.2 - RunRepeat - Example 1 - Specific number of repeats示例1 - 具體的重復次數
每秒播放一次聲音5次,沒有初始延遲:
SuperInvoke .RunRepeat (0f, 1f, 5, PlaySound);
4.3 - RunRepeat - Example 2 - Infinite repeats 示例2 - 無限重復
要無限重復,您可以使用SuperInvoke.INFINITY 或直接寫入“-1”作為 R epeats 參數 。
SuperInvoke .RunRepeat (0f, 1f, SuperInvoke.INFINITY, PlaySound);
N. B.: RunRepeat works for sequences too. RunRepeat也適用于序列。
5 - Job and JobRepeat 工作和JobRepeat工作重復
5.1 - What is a Job 什么是工作
任何執行Run,通過 SuperInvoke.Run 或s equence.Run 返回一個 IJob 對象。
任何執行 RunRepeat ,通過SuperInvoke.RunRepeat或sequence.RunRepeat返回一個IJobRepeat對象。
工作job(和重復工作job-repeat)是由其延遲及其延遲動作構成的概念對象。 除非另有說明,以下幾點與Jobs和JobRepeats有關。
5.2 - Job states 工作狀態
工作和工作重復可以在以下狀態之一:
● Scheduled 計劃(已安排)
● Paused 已暫停
● Killed 已殺害
● Completed 已完成
Scheduled Job 計劃工作:這是工作最初運行時的默認狀態。 在這種狀態下,工作的延遲已經過去了。 當延遲時間過去時,如果當前正在執行該方法并且尚未完成,該作業仍被視為已安排。
Paused Job 暫停工作:當其方法Pause被調用時,作業暫停。停頓基本上凍結延遲。 如果Resume被調用,則作業將返回到“計劃scheduled”狀態。
Killed Job 殺死工作:當它的方法Kill被調用時,一個工作被殺死。這意味著它不會在所有執行。 如果在序列作業中被調用,則序列將被突然中斷。
Completed Job 完成工作:當其延遲已經過去并且所有相關代碼已經被完全執行時,作業完成。
5.3 - Job - OnComplete 工作 - 完成
OnComplete是一個回調函數,您可以在作業完成后通知您,即其延遲已經過去,并且操作已經完全執行。 當您無法預測執行延遲操作需要多少時間時,這是特別有用的。
例如:
SuperInvoke .Run (2f, CallServer).OnComplete(PlaySound);
5.4 - Job - Pause & Resume 工作 - 暫停和恢復
您可能需要暫停一個特定的工作,并在外部事件發生后恢復。 使用暫停方法暫停工作的延遲,使其進入暫停狀態,使用恢復恢復其恢復到計劃狀態。
如果工作的延遲已過,其方法正在執行,則調用暫停不會產生任何影響。
在通過調用sequence.Run創建的工作中調用暫停將具有在序列中任何延遲的中間凍結序列的效果。
5.5 - Job - Kill 工作 - 殺死
Kills the job. 殺死工作。
5.6 - Job - KillOnDestroy 工作 - KillOnDestroy
當您在連接到游戲對象的MonoBehaviour中運行作業時,KillOnDestroy非常有用,該對象可能在工作發生延遲之前被破壞。
將游戲對象傳遞給KillOnDestroy可以確保您的工作不會被完成并且游戲對象被破壞。
例如:
SuperInvoke .Run (2f, CallServer).KillOnDestroy(this);
5.8 - Job - PauseOnDisable 工作 - 暫停不可用
當游戲對象被禁用時,PauseOnDisable會自動暫停該作業,并且默認情況下,當游戲對象隨后啟用時,它將自動恢復該作業。
5.9 - JobRepeat-only features 僅限JobRepeat功能
IJobRepeat提供了所有的IJob方法,因為它擴展了IJob。 IJobRepeat的其他方法有:
● GetCompletedRepeats 獲得完成重復
● GetRemainingRepeats 獲得剩余重復
● GetTotalRepeats 獲取總重復
6 - Tags 標簽
6.1 - What are Tags 什么是標簽
標簽是用于將多個工作分組的字符串。 當您執行Run或RunRepeat時,您可以選擇使用所選字符串對工作進行標記。
6.2 - SuperInvoke.CreateTag() 創建標簽
SuperInvoke.CreateTag()是一個有用的工廠方法,它可以在任何時間調用時返回不同的字符串。在運行時需要多個不同的標簽時,這是非常有用的。
為了進一步降低自定義使用與SuperInvoke.CreateTag()創建的字符串相同的字符串的概率,SuperInvoke.CreateTag()創建的所有字符串都以大寫西格瑪符號“Σ”開頭。
6.3 - Important note for versions compatibility 版本兼容性的重要說明
在3.0版本中,我們簡化了標簽功能。 以前,有兩種方式來標記作業:通過使用字符串或使用ISuperInvokeTag對象。我們已經消除了ISuperInvokeTag界面降低復雜度。
如果您在項目中使用ISuperInvokeTag,只需搜索并替換該字符串即可“ISuperInvokeTag”與字符串“string”,一切都會一樣。
7 - Additional global features of S uperInvoke 其他全局功能
7.1 - Global Killing 全局殺戮
殺死一個單獨的工作前面已討論過。
您可以使用標簽殺死一組工作。
或者您可以殺死項目中的所有當前工作,除非你選擇哪些作業必須活著,否則您將殺死所有:
● SuperInvoke.Kill(tags)
● SuperInvoke.KillAll()
● SuperInvoke.KillAllExcept(tags)
7.2 - Global Pause & Resume 全局暫停&恢復
以前已經討論過暫停和恢復單一工作。
使用標簽,您可以使用以下方式暫停和恢復工作組:
● SuperInvoke.Pause(tags)
● SuperInvoke.Resume(tags)
7.3 - Skip Frames 跳幀
功能SkipFrames允許您通過指定要等待的幀數來輕松延遲執行任何方法:
SuperInvoke .SkipFrames (100, rotateCube);
8 - C# Limitations that affect Super Invoke C#限制
注意
由于關于操作和范圍的c#內部結構,當您使用參數化方法使用SuperInvoke時,必須采取安全步驟。
以下示例顯示了以下問題:
int amount = 100;
SuperInvoke .Run(()=> withdraw(amount), 1f);
amount = 500;
實際撤回多少?
答案是500, 因為可變數量在延遲方法提交實際執行之前已更改。
基本上,方法withdraw(提取)只能知道變量的最后一個amount(值)。
對于循環也受c#限制的影響:
for(int i = 1; i <= 3; i++) {
SuperInvoke .Run(()=> Debug .Log(i), 1f);
}
日志輸出為:
3
3
3
它總是記錄“3”,因為延遲的方法(登錄在這種情況下)只能知道最后的值i,當SuperInvoke.Run被實際執行時(在這種情況下為1秒之后)為3。
為了克服c#限制,您需要在循環體內指定一個新變量,您可以在其中分配變量i的當前循環值:
for(int i = 1; i <= 3; i++) {
int k = i;
SuperInvoke .Run(()=> Debug .Log( k ), 1f);
}
日志輸出為:
1
2
3
絮醬翻譯