zoukankan      html  css  js  c++  java
  • unity插件开发:dos(cmd)命令输入窗口

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

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

    image

    image

    在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,核心的代码已经完成,后面需要做一个交互界面,这里打算设计成这样

    image

    要实现这样的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);
                }
            }
        }
    }
    个人博客请访问:http://www.cnblogs.com/CodeGize/
  • 相关阅读:
    2js中的变量的数据类型
    hdu 1022火车进出站问题
    hdu 2412树形dp
    hdu2955 Robberies(java)
    IDEA导入HttpServlet包
    IDEA导入jar包
    Java工程打包成jar可执行文件
    Java基础笔记(一)——JDK、JRE、JVM
    正整数构成的线性表存放在单链表中,编写算法将表中的所有的奇数删除。(C语言)
    已知单链表的数据元素为整型数且递增有序,L为单链表的哨兵指针。编写算法将表中值大于X小于Y的所有结点的顺序逆置。(C语言)
  • 原文地址:https://www.cnblogs.com/CodeGize/p/11742156.html
Copyright © 2011-2022 走看看