kvfreedom wrote: ↑2024/07/11 16:18
如果添加了覆盖功能,LogicPlayer是否能像LogicBehavior一样可以在运行后被外部C#脚本临时修改变量,而不是把资产中的变量永久改掉。
如果有一个需求不是想修改LogicBehavior黑板变量的初始值,而是在LogicBehavior运行后的某个时刻,由外部的C#脚本来修改变量值,目前是不是只能通过Blackboat.GetVariableAt方法来修改,index和变量名一样不容易维护,期待有更好的方法。
目前,此添加应该满足覆盖功能的要求。
我们将在实施过程中继续提高可用性。
请注意,这可能需要一段时间。
kvfreedom wrote: ↑2024/07/11 16:51
我不明白为什么要分TaskGraph和EvaluateGraph,TaskGraph不是包含了EvaluateGraph所有功能吗,如果一个TaskGraph中只有Action节点是不是和EvaluateGraph没有区别?
如果LogicGraph可以作为子图执行,LogicGraph包含了TaskGraph的所有功能又能使用事件节点,是不是TaskGraph和EvaluateGraph就不需要了?
EvaluateGraph 明确只使用了 Actions。
这样一来,在判断SignalEvaluation或Decorator时,保证不使用Task,即时做出判断。
TaskGraph 和 EvaluateGraph 之间的区别类似于 C# 中常规方法和 async/await 方法之间的区别。
Code: Select all
bool Equals(int a, int b)
{
return a == b;
}
很少有人特意将其写成如下。
Code: Select all
async Task<bool> Equals(int a, int b)
{
return await Task.FromResult(a == b);
}
LogicGraph(LogicController)在概念上与MonoBehavior类似。
例如,这是使用 Start 方法、Update 方法等实现组件行为的地方。
也称为“事件驱动”。
也就是说,事件驱动和函数从宏观和微观角度来看是不同的,因此是分开创建的,以避免混淆。
如果 TaskGraph 也可以使用事件节点,我认为能够在 TaskGraph 中构建如下所示的代码将是一个优势。
Code: Select all
async Task Wait(Button button, int timeout)
{
var tcs = new TaskCompletionSource<bool>();
try
{
button.onClick.AddListener(OnClick);
await Task.WhenAny(tcs.Task, Task.Delay(timeout));
return;
}
finally
{
button.onClick.RemoveListener(OnClick);
}
void OnClick()
{
tcs.SetResult(true);
}
}
(这不是确切的代码,因为它是一个概念解释)
我们目前尚未决定如何实施,但我们将探索更易于使用的规范,因此请等到那时。