【Unity插件】Super Invoke 超級調用插件 官方文檔翻譯

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!

Super Invoke插件Unity商店頁面

PDF文檔,請到這個鏈接進行下載:http://gad.qq.com/article/detail/35413

下載方法請參考:http://gad.qq.com/article/detail/35416


Super Invoke 插件 官方文檔翻譯

Time-control?your?code- 時間控制你的代碼

? ? ? ? ? ? ? ? ? ? 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


絮醬翻譯

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容