実行ファイル起動時の画面解像度の強制変更スクリプト

福島ゲームジャムに
参加してたお……
先生ェ……!
身体張りすぎっす……!
30時間は短かったけど
いちおー形にはできたよ
また小手先のテクニック
おぼえたし参加して良かったわ……


さて、色々レポートもしていきたいが今回は実用的なスクリプトを1個共有しておこう。Unityで開発したプロジェクトをビルドし、実行ファイルを起動するとPC環境によって解像度が変わり、表示物やUIの比率がずれてしまうことがよくある。開発中はエディタ上でテストプレイするのが普通なので、いざビルドしたときにこの不具合に見舞われてパニックになってしまう事は多い。

起動時に解像度を変更できないようにする

1024*768ピクセルの画面サイズを想定して作ったものを、プレイヤーが別のサイズ(またはフルスクリーン)で起動したら表示が崩れてしまうのなら、必ず1024*768ピクセルで起動して変更できないようにする。


Unity上部メニューの File → BuildSettings を選択し、左下の PlayerSettings を選択するとインスペクタービューに設定が表示される



この設定でデフォルトの画面サイズを指定したり、実行ファイル起動時に画面サイズを選択するウィンドウを出さなくする(プレイヤーが別のサイズを指定できないようにする)ことができる


しかしこの設定
うまく動かないことがあるんだよね
えっ そんなことあるっすか!?
Unityが前に開いた時の
画面の解像度を記憶していて
変わらないことがあるんだ


という、なんだか腑に落ちない設定なのだ。

解像度の強制指定スクリプト

このやり方はスクリプト側で強引に「画面の表示をxxxx×yyyyにする」という命令を出すものなので、本当はもっとスマートなやり方があると思うのだけど、調べてうまくいかなかったのでこのやり方をメモしておく(Windows、Mac、Linuxに対応)。


コメントにもあるが、プロジェクト実行時、最初に読み込まれるC#スクリプトの中に記述しておく。void Awakeはスクリプト読み込み時に1回だけ処理されるので、その中で画面解像度を指定しているわけだ


スクリプトが読み込まれるたびに命令が飛ぶので、実装するスクリプトファイルによってはシーンをまたいだ時に再度読み込まれる可能性がある。その場合、Screen WidthとScreen Heightの値はデフォルトではゼロになっているので、画面サイズがゼロになってしまう。この不具合が起きる時はシーンごとにインスペクタービュー上で数値を入力する必要がある

Private変数にしたら
うまく機能しなかったんだよね
何でなんすかねぇ……
他にいいやり方があるかも

知ってる人がいたら
そめ先生に教えてくれぃ
助け合いながら
生きていくスタイルっすね!


Windows、Mac、Linux以外のプラットフォームを使用する場合はスクリプト内のプラットフォーム名を変更したらうまくいくかもしれない(未検証)。各プラットフォームの表記はこちらのページを参照してみてくれっ。