Unity HTFramework框架StepEditor步骤编辑器(下)
Posted 神码编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity HTFramework框架StepEditor步骤编辑器(下)相关的知识,希望对你有一定的参考价值。
索引
使用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资源管理器