読者です 読者をやめる 読者になる 読者になる

GameProgrammar's Night

ゲームプログラム系の覚え書き

UnrealEngine4で2Dゲームを作ろう! その1 FPSと解像度

※ 最新の情報で2Dゲーム制作についてまとめ直しましたので、「UnrealEngine4で2Dゲームを作ろう! 「2Dゲームを作るために必要なこと 基本編」 - GameProgrammar's Night」をご覧ください


 UE4が無料化されたので、ソースを落として読んでみた所

 という境地に達してしまったので、1年近く掛けて書いたオレオレライブラリを捨てて、UE4の軍門に下ることにしました。
 UnityじゃないのはUEはソースが公開されてるからです。いざとなったらソースからいじっちゃおうというのと、コードリーディングでプログラミングの学習を改めてしたいからです。

 というわけで、UE4をいじってて気づいたことなどをぼちぼち更新して行きます。

FPSの固定

 FPSの固定は、コマンドライン引数でのみ可能のようです。
 パッケージ化して出力したProjectName.exe に対して以下のようにコマンドラインから実行することで固定化されます。

ProjectName.exe -BENCHMARK -FPS=60

 
 上記の例だと60FPSで固定されます。
 FPS固定したゲームでユーザーに実行させるには、上記のコマンドラインを内包したbatファイルなどをインストーラーなどに同梱しておき、それから起動するようにするしかありません。

 なお、FPSを固定してゲームを作るならばEditorでもそのFPSで動かすべきなので、Editorではコンソールに

t.MaxFPS 60

 とでも打ち込んで、擬似的にFPSを固定すると良いと思います。
 疑似なのは、MaxFPSは最大FPSの設定なので下限が無いためです。

(起動時)解像度の設定

 解像度の設定はいくつかやり方があります。

コマンドライン引数

ProjectName.exe -ResX=800 -ResY=600

ゲーム内コンソール

ゲーム内コンソールを立ち上げて、

r.SetRes 800x600w

解像度指定の後に、wをつけるとウィンドウモード、fを付けるとフルスクリーンになります。

ゲーム内コンソールをBP/C++から実行する

上記で紹介したr.SetResコマンドを生成してゲーム起動直後に実行

BP

[Execute Consol Command]ノードで実行する

https://answers.unrealengine.com/storage/attachments/4212-setres.png

 教えてもらったAnserHubからのリンク画像

C++
 PC->ConsoleCommand("r.SetRes 800x600w");

 PCはPlayerControllerのインスタンス

iniファイルを使う

[/Script/Engine.GameUserSettings]
ResolusionSizeX=800
ResolusionSizeY=600

を適切なiniに書けばいいはずなんですが、自分の環境だと動いたり動かなかったりしてちゃんと動いてくれなかったです。

注意?

 コマンドライン/iniだと、ユーザーにいじられるおそれがあるのでBP/C++で内部で実行するのが良いかもしれません。

最大化ボタンを潰す

 2Dゲーム制作の最大の敵であるウインドウの最大化ボタンなのですが、現状ソースをいじらずに潰す方法がありません。
 最大化ボタンを表示させないようにするには、SWindowクラスのSupportsMaximaize変数をfalseにしてからWindowを作成すれば良いのですが、ゲームのメインウインドウ作成前に処理を差し込む口が用意されていないようです。
 対処方は考え中ですが、起動後にスタイル変更APIを直呼びするか、解像度変更イベントが受け取れるなら、そこで強引に処理を潰すか、そんな所でしょうか。
 プラグイン的な仕組みでなんとかできないかなー、と思いつつ。

 最大化ボタンを潰せないので、解像度を変更してもユーザーにいじられてしまうので、どうしたものかという感じです。
 まー、3Dゲームエンジンを半ば無理矢理2Dゲーム制作に使ってるので仕方が無いところではあるのですが。

 ※追記
 ゲームカメラをちゃんと設定すれば、アス比維持では拡縮してくれるので、最悪のケースはなさそうです。