Unity HTFramework框架StepEditor步骤编辑器(下)

Posted 神码编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity HTFramework框架StepEditor步骤编辑器(下)相关的知识,希望对你有一定的参考价值。

更新日期:2019年9月26日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]

索引

使用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:当前存在的自定义顺序。

以上是关于Unity HTFramework框架StepEditor步骤编辑器(下)的主要内容,如果未能解决你的问题,请参考以下文章

Unity HTFramework框架(十六)AssetBundleEditor打包工具

Unity HTFramework框架StepEditor步骤编辑器(下)

Unity HTFramework框架Resource资源管理器

Unity HTFramework框架(二十一)Debug调试器

Unity HTFramework框架(四十三)标准化命名

Unity HTFramework框架(四十)Debug的性能监控