Unityのゲーム(スタンドアロン、Windows向け)で、ウィンドウタイトルを変更する方法を書いていきます。
注意事項
これから記載していく方法だと、エクスプローラーのウィンドウタイトルが変わってしまうことがありました。
例えば、
- ゲームの EXE名(Unity の
Product Name
)がsample-game
- エクスプローラーで
sample-game
のフォルダを開いている
といった状態だと、ゲームとエクスプローラーのタイトル名が同じになります。その結果、FindWindow関数でエクスプローラーのウィンドウハンドラを取得して、そのタイトルを変更してしまう感じです。
ウィンドウタイトルを変更する場合は、上記の点などにご注意頂ければと思います。
変更後イメージ
下の画像の赤枠箇所が変更される感じです。
また、下のように、タスクバーのタイトルも変わります。
変更方法
C#スクリプトを用意して、以下のコード例のように書いていきます。
using UnityEngine; using System.Runtime.InteropServices; public class Title : MonoBehaviour { public string txt; #if UNITY_STANDALONE_WIN [DllImport("user32.dll", EntryPoint="FindWindow", CharSet=CharSet.Unicode)] static extern System.IntPtr FindWindow(string className, string windowName); [DllImport("user32.dll", EntryPoint="SetWindowText", CharSet=CharSet.Unicode)] static extern bool SetWindowText(System.IntPtr hwnd, string txt); void Start() { System.IntPtr hwnd = FindWindow(null, Application.productName); SetWindowText(hwnd, txt); } #endif }
条件付きコンパイル #if ... #endif
で、スタンドアロンのWindowsだけタイトルを変更するようにしています。
あとは Unity Editor で GameObject を作成して、上のコードをアタッチします。タイトル名は、プロパティ txt
で設定します。
注意1. 日本語について
関数 SetWindowText
の DllImport で、CharSet=CharSet.Unicode
を設定しないと、日本語のタイトル名が文字化けしました。
日本語のタイトルを設定する場合は少し注意が必要です。
注意2. 変更タイミング
上のコード例だと Start()
が呼び出されてから、ウィンドウタイトルが変わります。それまでは EXE名がタイトルになるようです。
補足1. EXEの名称
今回のような設定をしないと、ウィンドウタイトルはEXEの名称になります。例えば sample-game.exe
だと、タイトルは sample-game
のようです。
EXE名の変更方法は以下のリンク先にも書いています。