State

UNLang 状态是状态机的状态类型,因为状态机是一种处理游戏逻辑的通用方式。使用状态, 只要这个状态没有结束,使用者就可以实现循环逻辑。

当然,使用者可以通过重写LangNode来实现基础的状态,只是UNLang已经提供了一个内建的状态供使用者重定义。

状态

UNLang状态提供了一些默认的LangSpot

管脚 描述
Begin 状态入口。
Abort 强制状态退出。
OnEnter 状态初始化触发器。
OnUpdate 状态帧循环触发器。
OnExit 状态终止触发器。
Substate 状态的子状态.

如何使用状态

有两种方式使用UNLang状态。

让我们用状态实现每一帧打印一次Hello UNLang!

使用状态触发其他模块

直接使用UNLang状态来驱动其他逻辑。

unlang-state

使用OnUpdate输出管脚来触发UNLang节点章节创建的MyModule模块,因为OnUpdate会被每一帧触发一次。

扩展状态

实现MyStateModule来做同样的事情。

using UNLang;
using UNode;

[NodeInterface("MyStateModule", "Script/")]
public sealed class MyStateModule : State
{
protected override void OnExecute(LangInstance instance)
{
UnityEngine.Debug.Log("Hello UNLang!");
}
}

重写OnExecute保护方法打印常量字符串。

unlang-mystate

区别

这两种方式的最大区别是是否这段逻辑能在UNLang中控制。如果使用者希望在UNLang中控制,那么将逻辑以模块方式输出,再通过内建的基础模块进行组合;或者在模块内实现所有逻辑,而只是用UNLang来触发。

如何使用主要取决于逻辑的复杂度和可重用性,这全都由使用者决定。