• 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/
  • 相关阅读:
    升讯威微信营销系统开发实践:(3)功能介绍与此项目推广过程的一些体会( 完整开源于 Github)
    Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)【2.源代码简要说明】
    Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!
    Github 开源:高效好用的对象间属性拷贝工具:升讯威 Mapper( Sheng.Mapper)
    Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)
    Github 开源:升讯威 Winform 开源控件库( Sheng.Winform.Controls)
    解决 mysql from_base64 函数返回乱码的问题
    最新版Python开发环境搭建
    判断多边形(含凸多边形)是顺时针方向还是逆时针方向
    vertica 列转行的sql
  • 原文地址:https://www.cnblogs.com/CodeGize/p/11742156.html
Copyright © 2020-2023  润新知