如何永久更改统一编辑器标题格式

时间:2018-08-22 13:36:57

标签: c# unity3d

当前统一编辑器标题格式如下:

Unity - Unity 2017.4.6f1 Personal (64bit) - TestMoveAndJump.unity - Ro.Unity - PC, Mac & Linux Standalone <OpenGL 4.5>

在应用切换器和任务栏中很难识别,因为“ Unity-Unity 2017.4.6f1 Personal(64bit)”太长了,我希望将Unity项目名称放在首位,例如:

Ro.Unity Unity - Unity 2017.4.6f1 Personal (64bit) - TestMoveAndJump.unity - Ro.Unity - PC, Mac & Linux Standalone <OpenGL 4.5>

我应该怎么做,我可以在系统c ++中更改统一窗口标题,但是我发现统一编辑器标题在很多情况下会被重置,所以我希望在统一编辑器脚本中设置统一编辑器标题的方法

2 个答案:

答案 0 :(得分:0)

我不确定您尝试过什么,如果这是“系统c ++”的意思,则无法确定,但是我已经成功地使用它更改了标题。 (您需要将此附加到GameObject)

仅适用于Windows tho。但是无论如何我都会把它扔在这里。

<a href="https://example" ping="https://example/trackpings">

有很多统一的方法来获取标题中的信息,[ExecuteInEditMode] public class TitleChanger : MonoBehaviour { [DllImport("user32.dll", EntryPoint = "SetWindowText")] public static extern bool SetWindowText(System.IntPtr hwnd, System.String lpString); [DllImport("user32.dll")] private static extern System.IntPtr GetActiveWindow(); void Start() { IntPtr windowPtr = GetActiveWindow(); SetWindowText(windowPtr, Application.productName + " [" + Application.unityVersion +"]"); } void OnRenderObject() { IntPtr windowPtr = GetActiveWindow(); SetWindowText(windowPtr, Application.productName + " [" + Application.unityVersion + "]"); } } 有几种方法,如果您想使用当前场景,可以进行Application等。

编辑: 我注意到保存项目时标题会下降,但是在将SceneManager.GetActiveScene().name添加到上面的代码中之后,这不再是问题。

答案 1 :(得分:0)

我当前的解决方案是在EditorApplication.update中检查并更改标题,我使用linux xdotool来获取和设置标题,我认为Windows和Mac具有类似的解决方案,如果我打开太多的unity编辑器会非常慢,我仍然想找到一种获取和设置统一编辑器标题的本地方法

    [InitializeOnLoad]
    public class ChangeUnityEditorWindowTitle : MonoBehaviour
    {
        // unity editor will auto reset editor title in many cases
        static ChangeUnityEditorWindowTitle()
        {
            EditorApplication.update += ChangeTitleWhenSceneOnRuntime;
        }

        private static DateTime lastTime;

        private static void ChangeTitleWhenSceneOnRuntime()
        {
            if ((DateTime.Now - lastTime).TotalSeconds > 1)
            {
                lastTime = DateTime.Now;
                ChangeTitle();
            }
        }

        static string GetCurEditorTitle()
        {
            if (curWid != null)
            {
                return Shsu($"xdotool getwindowname {curWid}").Trim();
            }

            return null;
        }

        private static string _curWid;

        private static string curWid
        {
            get
            {
                if (_curWid == null)
                {
                    var cmd = $"xdotool search --onlyvisible --name \"Unity - Unity.*- {GetProjectName()} -\"";
//            var cmd = $"xdotool search --onlyvisible --pid {pid}";
                    _curWid = Shsu(cmd).Split("\n")[0].Trim();
                }

                return _curWid;
            }
        }

        private static string GetProjectName()
        {
            return RoFile.Basename(EditorUtil.GetProject());
        }

        private static string newTitle;

        [MenuItem("Ro/Change Unity Editor Window Title")]
        static void ChangeTitle()
        {
            var title = GetCurEditorTitle();
            var pjName = GetProjectName();
            if (title.IsMatch(@"Unity - Unity"))
            {
                if (!title.IsMatch($"^{pjName}"))
                {
                    if (newTitle == null)
                    {
                        newTitle = $"{pjName} - {title}";
                    }

                    Debug.Log($"Set unity editor title as \"{newTitle}\" ");
                    Shsu($"xdotool set_window --name \"{newTitle}\" {curWid}");
                }
            }
        }
    }