我试图使用新的输入系统来调用统一事件,但是由于某种原因,在触发一个事件之后,无法触发其他事件。更准确地说,我正在尝试将输入系统与这段视频的撤销/重做系统的稍微修改的版本结合起来。
首先,我使用public static List<ICommand> Undoable;和public static List<ICommand> Redoable;代替了视频中显示的public static List<ICommand> CommandHistory。
我尝试触发的函数的一个例子:(这来自Test类)
int i = 0;
public void Execute()
{
Test();
}
private void Test()
{
i++;
Debug.Log($"test No.{i}");
}
public void Undo()
{
Test();
}我试着从CommandInvoker中使用
public void Test()
{
CommandInvoker.AddCommand(new Test());
}然后我试着在上面使用撤销:
public void Undo(InputAction.CallbackContext ctx)
{
Debug.Log(CommandInvoker.Undoable.Count - 1);
ICommand c = CommandInvoker.Undoable[CommandInvoker.Undoable.Count - 1];
c.Undo();
CommandInvoker.Undoable.Remove(c);
CommandInvoker.Redoable.Add(c);
}为了安全起见,我甚至添加了callbackContext,但这一点也没有帮助。
我不知道代码有什么问题,所以我添加了一些调试日志:
Debug.Log($"buffer count after adding command: {commandBuffer.Count}");中的AddCommand()
Debug.Log($"buffer count after execution: {commandBuffer.Count}");到update()
最后,在我将c添加到Update()中的列表之后,
这就是我在控制台中得到的:第一次调用测试操作:
添加命令后的缓冲区计数:1 添加命令后的缓冲区计数:2 第1号试验 执行后的缓冲区计数:1 不可撤销的行动:1 执行后的缓冲区计数:0 不可撤销的行动:2 可撤销的操作:3第二次调用测试操作: 无法采取的行动:4 不可撤销的行动:5 可撤消的操作:6调用撤消操作后: -1 ArgumentOutOfRangeException:索引超出了范围。必须是非负的,并且小于集合的大小。参数名称:索引 ArgumentOutOfRangeException在执行“已执行”的密钥绑定和快捷方式/撤消/键盘/ctrl、/Keyboard/z的回调时 -1 ArgumentOutOfRangeException:索引超出了范围。必须是非负的,并且小于集合的大小。参数名称:索引 ArgumentOutOfRangeException在执行'keybinds和快捷方式/撤消/键盘/ctrl,/Keyboard/z‘的“取消”回调时
除了关闭范围错误之外,在解决第一个问题后,我将尝试修复这些错误:测试操作只执行一次。
发布于 2022-09-25 15:00:16
因此,不管怎么说,结果是关掉你的电脑真的会对一些错误产生奇迹。
https://stackoverflow.com/questions/73476482
复制相似问题