unity插件开发:dos(cmd)命令输入窗口

CMD命令是windows上开发人员经常会使用的工具,比如copy文件,文件夹软链接等等。

有了它,有时候我们想实现一些快速的操作,都会比较便捷。在windows中,可以按下Win+R,然后输入cmd打开命令提示符输入窗口。这个窗口它对应是cmd.exe

unity插件开发:dos(cmd)命令输入窗口

unity插件开发:dos(cmd)命令输入窗口

在unity中,要启动其他的exe程序,可以使用Process类来启动一个新进程。在《Unity3D集成TortoiseSVN》中,我们就已经使用了Process来启动svn的exe程序。所以要启动cmd.exe,只要小改一下代码即可。如下

        public static void RunCmd(string cmd)
        {
            var process = new Process
            {
                StartInfo =
                {
                    FileName = "cmd.exe",
                    Arguments = "/k" + cmd,
                    CreateNoWindow = false,
                }
            };
            try
            {
                process.Start();
                process.WaitForExit();

            }
            catch (Exception e)
            {
                UnityEngine.Debug.Log(e.Message);
            }
            finally
            {
                process.Close();
            }
        }

OK,核心的代码已经完成,后面需要做一个交互界面,这里打算设计成这样

unity插件开发:dos(cmd)命令输入窗口

要实现这样的unity界面,可以在工程中任意一个Editor目录下创建一个类,继承editorwindows,然后在OnGUI函数中使用EditorGuilayout的相关方法绘制控件即可,如

public class DosCmder : EditorWindow
{
        private string m_cmd = "";
        public void OnGUI()
        {
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
            EditorGUILayout.LabelField("请输入命令行");
            if (GUILayout.Button("保存", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                
            }
            if (GUILayout.Button("导入", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                
            }
            EditorGUILayout.EndHorizontal();
            m_cmd = EditorGUILayout.TextArea(m_cmd, GUILayout.Height(200));
            if (GUILayout.Button("运行"))
            {
                
            }
        }
}

这里保存和导入功能暂时不做,我们只需要在完成运行功能,调用之前的RunCmd函数即可。

为了能从unity的菜单栏中打开这个窗口,我们再写一个方法到DosCmder中

        [MenuItem("Stardust/辅助/Dos命令窗口")]
        public static void Open()
        {
            var win = GetWindow<DosCmder>();
            win.titleContent = new GUIContent("Dos命令窗口");
        }

至此就完成了能够运行cmd命令的窗口了,在输入栏中输入命令,然后点击运行。完美!

最终的cs文件:

using System;
using System.Diagnostics;
using UnityEditor;
using UnityEngine;

namespace StardustEditorTool
{
    public class DosCmder : EditorWindow
    {
        public static void RunCmd(string cmd)
        {
            var process = new Process
            {
                StartInfo =
                {
                    FileName = "cmd.exe",
                    Arguments = "/k" + cmd,
                    CreateNoWindow = false,
                }
            };
            try
            {
                process.Start();
                process.WaitForExit();

            }
            catch (Exception e)
            {
                UnityEngine.Debug.Log(e.Message);
            }
            finally
            {
                process.Close();
            }
        }

        [MenuItem("Stardust/辅助/Dos命令窗口")]
        public static void Open()
        {
            var win = GetWindow<DosCmder>();
            win.titleContent = new GUIContent("Dos命令窗口");
        }

        private string m_cmd = "";

        public void OnGUI()
        {
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);
            EditorGUILayout.LabelField("请输入命令行");
            if (GUILayout.Button("保存", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                UnityEngine.Debug.Log("功能未实现");
            }
            if (GUILayout.Button("导入", EditorStyles.toolbarButton, GUILayout.Width(50)))
            {
                UnityEngine.Debug.Log("功能未实现");
            }
            EditorGUILayout.EndHorizontal();
            m_cmd = EditorGUILayout.TextArea(m_cmd, GUILayout.Height(200));
            if (GUILayout.Button("运行"))
            {
                RunCmd(m_cmd);
            }
        }
    }
}
上一篇:Unity生成简易代码工具


下一篇:Unity3d 错误提示 GUI Error: You are pushing more GUIClips than you are popping. Make sure they are balan