HTFramework框架使用手册(八)StepEditor任务步骤编辑器(下)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq992817263/article/details/87858014

使用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:是否瞬间抵达?如果勾选,则忽略动画,瞬间移动到目的地。

其他的节点就不再一一赘述,这里我们为任务找到NPC张三添加一个Action节点:
在这里插入图片描述
当主角点击NPC以后,NPC会看向主角,然后就直接触发下一个任务“开始对话”,所以没有其他的操作。

操作节点连线

上一步添加的节点并未激活,因为从Enter节点进入,没有任何一条连线可以抵达张三看向主角这个节点。

我们在Enter节点上点击右键,在弹出菜单中选择:Connect or break -> 张三看向主角!连线完成后,步骤从Enter节点进入,会首先执行张三看向主角节点,多个节点根据连线顺序依次执行。
在这里插入图片描述

编辑操作节点属性

在面板选中张三看向主角节点,将角色张三拖拽到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()
    {
        
    }

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

	/// <summary>
	/// 帧刷新
	/// </summary>
    public override void OnUpdate()
    {
        
    }

	/// <summary>
	/// 销毁
	/// </summary>
    public override void OnTermination()
    {
        
    }

	/// <summary>
    /// 步骤执行
    /// </summary>
    private void Execute()
    {
        Target.State = StepTargetState.Done;
    }
}

Helper生命周期
1.OnInit():会在本次任务步骤激活时呼叫一次。
2.OnUpdate():会在步骤激活后按帧执行,直到任务进入执行状态。
3.OnSkip():会在步骤跳过时执行一次。
4.SkipLifeTime:步骤跳过时等待时长。
5.OnTermination():会在步骤结束后呼叫一次。

修改目标身上的State状态为StepTargetState.Done便是触发这个步骤(仅当触发类型为State Change时),所以这里在触发条件满足时,调用Execute方法便可达到这个目的(Execute方法为快捷创建Helper时自动附加的)。

CustomHelper为指定本助手在面板的显示层级与名称,如下:
在这里插入图片描述
接下来,我们要判断主角已经杀死了100只大黄蜂,从而触发此任务步骤,我们在OnUpdate生命周期中写点东西:

	/// <summary>
	/// 帧刷新
	/// </summary>
    public override void OnUpdate()
    {
        //击杀记录池中大黄蜂数量
        if (KillManager.KillRecord.Bumblebee.Count == 100)
        {
            Execute();
        }
    }

这样的话,Helper便可以正常的工作了,当杀死100只大黄蜂时,此任务步骤便会进入执行状态,接下来在任务操作面板中加入一些节点,在任务完成后需要做的某些事就可以了,比如获得任务奖励等。

如下,略微复杂的节点连线,从Enter进入后,会根据连线从左到右执行,每个节点执行完成后等待Elapse Time设置的时间(Instant状态则不等待),不同支路的节点不影响其他支路节点的执行。
在这里插入图片描述

在代码中总控

需要将StepContentAsset资源指定给StepMaster
在这里插入图片描述
开始整个StepEditor流程:

        //StepEditor流程开始
        Main.m_StepMaster.Begin();

终止整个StepEditor流程:

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

跳过步骤:

        //设置跳过速度
        StepMaster.SkipMultiple = 10;
        //跳过到步骤3,步骤3之前的步骤会自动:激活、触发、执行
        Main.m_StepMaster.SkipStep(3);

监听事件:

        //整个流程开始事件
        Main.m_StepMaster.Begin += OnBegin;
        //整个流程结束事件
        Main.m_StepMaster.End += OnEnd;
        //任意步骤被激活事件
        Main.m_StepMaster.BeginStepEvent += OnBeginStepEvent;
        //任意步骤执行事件
        Main.m_StepMaster.ExecuteStepEvent += OnExecuteStepEvent;

猜你喜欢

转载自blog.csdn.net/qq992817263/article/details/87858014
今日推荐