【Unity】改变游戏运行时Window的窗口标题
【Unity】改变游戏运行时Window的窗口标题
零、需求
Unity打包好的Windows程序,启动后如何更改窗口标题?因为看着英文的感觉不太好,故有此想法。什么?你说为啥不改项目产品名?产品名会被写到文件夹名中,感觉后面可能会有问题……
壹、解决方案
代码如下:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class ChangeWindowTitle : MonoBehaviour
{
/// <summary>
/// 记录当前的窗口标题
/// </summary>
public static string TitleText = "";
/// <summary>
/// 窗口句柄,只能获取一次,后面获取的无效
/// </summary>
private static System.IntPtr windowHandle;
/// <summary>
/// 是否已经获得窗口句柄
/// </summary>
private static bool isGotWindowHandle = false;
[Header("Windows窗口标题设置")]
[Tooltip("窗口标题文字")]
public string title = "窗口";
[Tooltip("是否自动设置窗口标题文字")]
public bool autoSet = true;
[SerializeField]
[Header("标题设置状态")]
[Tooltip("标题是否已经设置过至少一次")]
private bool isSet = false;
#if UNITY_STANDALONE_WIN
[DllImport("user32.dll")]
private static extern System.IntPtr FindWindow(string className, string windowName);
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool SetWindowText(System.IntPtr hwnd, string title);
#endif
void Update()
{
if (autoSet && !isSet)
{
setTitle(title);
}
}
public void setTitle(string title)
{
isSet = true;
#if UNITY_STANDALONE_WIN
TitleText = title;
if(!isGotWindowHandle)
{
// 获取窗口句柄
windowHandle = FindWindow(null, Application.productName);
isGotWindowHandle = true;
}
// 设置新标题
SetWindowText(windowHandle, title);
#endif
}
}
要注意的都写在注释里了(应该)。把它挂到对象上,直接调用public void setTitle(string title)
来设置标题就好啦,要是不想写代码,也可以在面板里设置,默认会帮你设置一次标题窗口的~
好,以上就是全部内容,点个赞再走呗?不会的评论区见~ (◍•ᴗ•◍)❤