返回

ETConsoleComponent

ConsoleComponent

用于监听控制台输入,和创建ReplComponent组件

  1. 在该组件的Start事件中,开启一个监听玩家输入的循环
    //等待用户输入任务,阻塞循环
    string line = await Task.Factory.StartNew(() =>
    {
        Console.Write($"{this.Mode}> ");
        //返回用户输入
        return Console.In.ReadLine();
    }, this.CancellationTokenSource.Token);
  1. 在接收到用户输入后,校验输入的字符串

    • 如果等于“reload“

      重新加载热更的程序集

    • 如果等于"repl"

      添加ReplComponent组件,并切换到命令模式,在命令模式中收到的字符串将直接转发给ReplComponent执行

ReplComponent

该组件用于编译命令代码,运行到程序中

  1. 在该组件的Awake事件中,创建了ScriptOptions对象,并指定执行程序集为组件当前所在的程序集

  2. 接收到ConsoleComponent传入的命令后进行分析

    • 如果是"exit"

      退出命令模式,并卸载自身组件

    • 如果是"reset"

      清空前面指令编译的结果(将ScriptState对象设为空)

    • 其他指令

      调用CSharpScript.RunAsync编译并执行传入的C#指定,并将结果保存到ScriptState对象中

示范

Licensed under CC BY-NC-SA 4.0
0