【Unity】 HTFramework框架(八)StepEditor步驟編輯器(下)

更新日期:2019年9月26日。
Github源碼:[點我獲取源碼]

使用StepEditor

StepEditor流程

對於StepEditor的執行流程,有以下的流程圖可以更形象的說明:
在這裏插入圖片描述

創建任務步驟

接下來,我們在Step Content List面板中創建了三個任務步驟
在這裏插入圖片描述

編輯任務步驟屬性

選中第一個任務步驟,我們編輯他的屬性:
在這裏插入圖片描述
1.勾選Instant:標註此步驟爲立即完成,也就是步驟被觸發並執行後,會立即激活並進入下一個步驟

提示:找到NPC張三以後,我們可能不需要其他任何的延時等待,直接進入下一個任務步驟就可以了。

2.將場景中的角色張三拖拽到Target:將此角色作爲步驟的目標。

提示:如果角色張三是一個動態加載的預製體,也可以先將其拖拽到場景中,在拖拽到Target欄,物體會被標記一個全局唯一的GUID,任何時候任何地方StepEditor都能找到他。

3.設置Trigger:設置步驟觸發方式爲Mouse Click(鼠標點擊),也就是當鼠標點擊Target(張三)時,此步驟便觸發。

提示:請必須確保Tatget上有碰撞盒組件,僅當觸發方式爲Mouse Click時,因爲這裏使用的是射線檢測。目前觸發方式共有四種:(根據情況可以任意擴展)
在這裏插入圖片描述
△ Mouse Click:鼠標點擊目標觸發。

△ Button Click:UGUI Button被點擊時觸發(必須確保目標上有Button組件)。

△ State Change:目標狀態改變時觸發(每個目標都會有一個狀態標記,當該標記變爲Done時觸發)。

△ Auto Execute:自動執行(步驟激活後,自動觸發)。

爲步驟添加操作節點

目前的節點類型共有如下十幾種,大致是封裝了一些較爲常見的基本操作,比如移動、旋轉、縮放動畫(底層封裝DOTween),根據情況可以任意擴展:
在這裏插入圖片描述
例子:比如Move(移動)節點,面板如下:
在這裏插入圖片描述
功能:將目標移動到指定位置。
界面
1.Move to:移動的目的地。
2.Ease:移動動畫的緩動類型。
3.Transformation:是否瞬間抵達?如果勾選,則忽略動畫,瞬間移動到目的地。

其他的節點就不再一一贅述,這裏我們爲任務找到張三添加一個Action節點:
在這裏插入圖片描述
當主角點擊NPC以後,NPC會看向主角,然後就直接觸發下一個任務與張三交談,所以沒有其他的操作。

操作節點連線

上一步添加的節點並未激活,因爲從Enter節點進入,沒有任何一條連線可以抵達張三看向主角這個節點。

我們在Enter節點上點擊右鍵,(也可以鼠標從節點兩側的小耳朵處拖拽連線)在彈出菜單中選擇:Connect or break -> 張三看向主角!連線完成後,步驟從Enter節點進入,會首先執行張三看向主角節點,多個節點根據連線順序依次執行。
在這裏插入圖片描述

操作節點斷開連線

若要斷開節點間的連線,按住Alt鍵,所有連線上會顯示斷開按鈕,直接點擊按鈕便斷開該連線。

編輯操作節點屬性

在面板選中張三看向主角節點,將角色張三拖拽到Target欄,作爲此操作節點的目標。

勾選Instant,這個節點不需要等待,執行完後立即退出,並激活下一個任務步驟。
在這裏插入圖片描述
Action節點爲呼叫一個自定義方法,必須是void返回值、且不帶參數的方法,在Action欄點擊下拉菜單,可以直接在目標身上的所有組件中選擇方法,這裏選擇NPC的LookToHero方法(看向主角)。
在這裏插入圖片描述

爲任務步驟使用Helper

接下來我們遇到了一個特殊的任務,幫張三教訓大黃蜂!這個任務的觸發條件應該是大黃蜂被擊殺到指定數量,Mouse Click或者Button Click觸發條件在這裏明顯不能用於這個步驟。

所以我們要使用State Change。
在這裏插入圖片描述
State Change觸發方式一般情況下都要搭配助手,不然你就得在其他地方來獲取步驟目標,並設置他的狀態,以觸發步驟。

我們點擊Helper後面的下拉框,可以在現有的助手中選擇,也可以一鍵快速創建新的助手,創建後的助手會自動指定給本步驟。

在這裏插入圖片描述
這裏我們創建名爲KillBumblebeeHelper的助手,他會自動生成爲一個.cs類文件,並自動在VS中打開。
在這裏插入圖片描述
Helper類結構如下:

[CustomHelper("任務1/殺死100只大黃蜂")]
public class KillBumblebeeHelper : StepHelper
{
	/// <summary>
    /// 跳過時生命週期(僅在跳過時生效)
    /// </summary>
    public override float SkipLifeTime
    {
        get
        {
            return 0;
        }
    }

	/// <summary>
	/// 跳過步驟(僅在跳過時執行)
	/// </summary>
    public override void OnSkip()
    {
        base.OnSkip();
    }

	/// <summary>
	/// 恢復步驟(僅在倒退時執行)
	/// </summary>
    public override void OnRestore()
    {
        base.OnRestore();
    }

    /// <summary>
    /// 步驟指引
    /// </summary>
    public override void OnGuide()
    {
	    base.OnGuide();
    }

	/// <summary>
	/// 初始化
	/// </summary>
    public override void OnInit()
    {
        base.OnInit();
    }

	/// <summary>
	/// 幀刷新
	/// </summary>
    public override void OnUpdate()
    {
        base.OnUpdate();
    }

	/// <summary>
	/// 銷燬
	/// </summary>
    public override void OnTermination()
    {
        base.OnTermination();
    }
}

Helper生命週期
1.OnInit():會在本次任務步驟激活時呼叫一次。
2.OnUpdate():會在步驟激活後按幀執行,直到任務進入執行狀態。
3.OnSkip():會在步驟跳過時執行一次。
4.OnRestore():會在步驟恢復時執行一次。
5.SkipLifeTime:步驟跳過時等待時長。
6.OnGuide:會在執行指引時呼叫一次。
7.OnTermination():會在步驟結束後呼叫一次。

修改目標身上的State狀態爲StepTargetState.Done便是觸發這個步驟(僅當觸發類型爲State Change時)。

CustomHelper爲指定本助手在面板的顯示層級與名稱,如下:
在這裏插入圖片描述
接下來,我們要判斷主角已經殺死了100只大黃蜂,從而觸發此任務步驟,我們在OnUpdate生命週期中寫點東西:

	/// <summary>
	/// 幀刷新
	/// </summary>
    public override void OnUpdate()
    {
        //擊殺記錄池中大黃蜂數量
        if (KillManager.KillRecord.Bumblebee.Count == 100)
        {
        	//StepHelper 基類中的方法,執行當前步驟
            Execute();
        }
    }

這樣的話,Helper便可以正常的工作了,當殺死100只大黃蜂時,此任務步驟便會進入執行狀態,接下來在任務操作面板中加入一些節點,在任務完成後需要做的某些事就可以了,比如獲得任務獎勵等。

如下,略微複雜的節點連線,從Enter進入後,會根據連線從左到右執行,每個節點執行完成後等待Elapse Time設置的時間(Instant狀態則不等待),不同支路的節點不影響其他支路節點的執行。
在這裏插入圖片描述

在代碼中總控

1、首先,需要將StepContentAsset資源指定給StepMaster(靜態指定和動態指定均可):
在這裏插入圖片描述
2、然後,開始整個StepEditor流程:

		//重新編譯所有步驟內容
		Main.m_StepMaster.RecompileStepContent();
        //StepEditor流程開始
        Main.m_StepMaster.Begin();

3、終止整個StepEditor流程:

        //StepEditor流程終止
        Main.m_StepMaster.End();

4、自定義執行順序:(可以讓整個步驟流程不再線性執行)

        //添加自定義順序,當執行完【id1】步驟時,無條件轉到【id7】步驟
        Main.m_StepMaster.AddCustomOrder("id1", "id7");

		//做一些事

        //移除添加在【id1】步驟上的自定義順序
        Main.m_StepMaster.RemoveCustomOrder("id1");

5、跳過步驟:

        //設置跳過速度
        StepMaster.SkipMultiple = 10;
        //跳過到步驟【id10】,步驟【id10】之前的步驟會自動:激活、觸發、執行
        Main.m_StepMaster.SkipStep("id10");

6、監聽事件:

        //整個流程開始事件
        Main.m_StepMaster.Begin += OnBegin;
        //整個流程結束事件
        Main.m_StepMaster.End += OnEnd;
        //任意步驟被激活事件
        Main.m_StepMaster.BeginStepEvent += OnBeginStepEvent;
        //任意步驟執行事件
        Main.m_StepMaster.ExecuteStepEvent += OnExecuteStepEvent;

運行時檢視面板

在編輯器中運行時將會出現運行時檢視面板(Runtime Data),主要用以調試或數據監測,目前面板如下:
在這裏插入圖片描述
1.Step Count:當前步驟總數。
2.Current Step:當前激活的步驟索引,點擊Skip按鈕可以模擬跳過當前任務步驟。
3.Current Step Name:當前激活的步驟名稱。
4.Current Step Target:當前步驟目標。
5.Current Step Helper:當前步驟的助手。
6.Disabled Steps:當前未啓用的步驟數量。
7.Custom Order:當前存在的自定義順序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章