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



当前的 Unity 编辑器标题格式如下所示:

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

在应用程序切换器和任务栏中很难识别,因为"Unity - Unity 2017.4.6f1 个人(64 位("太长了,我希望将 Unity 项目名称放在第一位,例如:

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

我该怎么办,我可以在系统 C++ 中更改 Unity 窗口标题,但我发现 Unity 编辑器标题在许多情况下会被重置,所以我希望有一种在 Unity 编辑器脚本中设置 Unity 编辑器标题的方法

我不确定你试过什么,这是否就是你所说的"系统 c++"的意思,但我已经成功地用这个改变了标题。(您需要将其附加到游戏对象(

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

[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 + "]");
}
}

Unity 中有很多方法可以获取信息以放入标题中,Application有一些方法,如果您想要当前场景,您可以执行SceneManager.GetActiveScene().name等。

编辑: 我注意到保存项目时标题会掉落,但是在我向上面的代码添加OnRenderObject后,这不再是问题。

我目前的解决方案是在EditorApplication.update中检查并更改标题,我使用linux xdotool来获取和设置标题,我认为Windows和Mac有类似的解决方案,如果我打开太多unity编辑器会很慢,我仍然想找到一种本机方法来获取和设置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}");
}
}
}
}

最新更新