Default Actions
Coding Style wiki
ActionSystem 內建 5 種預設動作 (皆繼承 ActionBase),透過組合即可建構出各種運行組 (序列、並行、延遲、回調),並可互相巢狀組合 (序列包並行、並行包序列),最後交由 ActionRunner 啟動運行。
| 命名空間 | OxGKit.ActionSystem |
| 類型 | SequenceAction、ParallelAction、ParallelDelayAction、DelayAction、DelegateAction (皆繼承 ActionBase) |
| 原始碼 | SequenceAction.cs、ParallelAction.cs、ParallelDelayAction.cs、DelayAction.cs、DelegateAction.cs |
using OxGKit.ActionSystem;
快速上手
using OxGKit.ActionSystem;
using UnityEngine;
// 並行組:同時執行,全部完成後結束
var parAction = new ParallelAction("Burst");
parAction
.AddAction(DelayAction.CreateDelayAction(1f, () => Debug.Log("Delay 1s done")))
.AddAction(DelayAction.CreateDelayAction(2f, () => Debug.Log("Delay 2s done")));
// 序列組:依序執行 (Step 1 -> 延遲 1 秒 -> Step 2 -> 並行組)
var seqAction = new SequenceAction("OpenFlow");
seqAction
.AddAction(DelegateAction.CreateDelegateAction(() => Debug.Log("Step 1")))
.AddAction(DelayAction.CreateDelayAction(1f))
.AddAction(DelegateAction.CreateDelegateAction(() => Debug.Log("Step 2")))
.AddAction(parAction);
// 透過 ActionRunner 啟動 (由擁有者驅動 DriveUpdate)
this._runner.RunAction(seqAction);
通用規則
組合規則
- 預設動作皆繼承 ActionBase,可互相巢狀組合,
AddAction皆可鏈式呼叫。 - 每種預設動作皆提供
()、(int uid)、(string name)、(string name, int uid)四種建構子,可自定義名稱 (日誌識別) 與 UID (供RemoveAction移除)。
注意 組合動作 (SequenceAction / ParallelAction / ParallelDelayAction) 內部以 SetDuration(-1) 運行,完成時機由子項動作決定 (全部完成才結束)。
動作總覽
| 動作 | 說明 |
|---|---|
| SequenceAction | 序列動作,依序執行子項動作 (一次一個)。 |
| ParallelAction | 並行動作,同時執行所有子項動作。 |
| ParallelDelayAction | 交錯並行動作,依延遲間隔依序啟動子項動作後並行執行。 |
| DelayAction | 延遲動作,延遲指定秒數後結束 (可附帶結束回調)。 |
| DelegateAction | 委派動作,啟動時觸發回調 (可附帶延遲)。 |
SequenceAction
public class SequenceAction : ActionBase
序列動作:依加入順序一次一個執行子項動作,前一個動作全部完成 (IsAllDone) 後才會啟動下一個;所有子項動作完成後,序列動作即完成 (若啟動時沒有任 何動作會直接標記完成)。
建構子
public SequenceAction()
public SequenceAction(int uid)
public SequenceAction(string name)
public SequenceAction(string name, int uid)
方法總覽
| 方法 | 說明 |
|---|---|
| AddAction | 加入動作 (啟動前組合)。 |
| QueueAction | 排隊動作 (運行中追加)。 |
| RemoveAction | 依 UID 移除動作。 |
AddAction
public SequenceAction AddAction(ActionBase action)
加入動作至準備清單 (同一實例不會重複加入),回傳序列動作本身,可鏈式呼叫。
注意 AddAction 需於序列動作啟動前加入 (啟動時會將準備清單轉入待執行佇列);若序列已在運行中要追加動作,請改用 QueueAction。
var seqAction = new SequenceAction("OpenFlow");
seqAction
.AddAction(DelegateAction.CreateDelegateAction(() => Debug.Log("Step 1")))
.AddAction(DelayAction.CreateDelayAction(1f))
.AddAction(DelegateAction.CreateDelegateAction(() => Debug.Log("Step 2")));
this._runner.RunAction(seqAction);
QueueAction
public SequenceAction QueueAction(ActionBase action)
於運行中排隊追加動作 (可鏈式呼叫),於下一次更新時併入待執行佇列,接續於現有動作之後依序執行。