项目里,有同事把外部的 cmake 编译 C++ 的脚本集成到 unity编辑器里来 ,并且把编译输出实时打印到 Unity 的控制台里。实现这一功能主要依赖于 .net framework 的 System.Diagnostics.Process 类。
Process 类可以唤起一个进程.
如果想截取控制台输出,则需要设置 进程的 StartInfo 的几个参数
UseShellExecute = false;
RedirectStandardOutput = true;
RedirectStandardError = true;
设置之后,可以使用 OutputDataReceived 和 ErrorDataReceived 事件,注册事件响应函数,异步监听子进程的输出 。 这里可以简单的使用 Debug.Log() 打印到 Unity 控制台。
最后调用 BeginOutputReadLine() 和 BeginErrorReadLine() 截取控制台输出 。
核心代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Diagnostics;
using System.IO;
public class ConsoleProgress
{
public void LaunchWithPath(string path)
{
ProcessStartInfo startInfo = new ProcessStartInfo(path);
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.Redirect