UnrealEngine4で2Dゲームを作ろう! その1 FPSと解像度
※ 最新の情報で2Dゲーム制作についてまとめ直しましたので、「UnrealEngine4で2Dゲームを作ろう! 「2Dゲームを作るために必要なこと 基本編」 - GameProgrammar's Night」をご覧ください
UE4が無料化されたので、ソースを落として読んでみた所
昨日UE4のコードを読んで、今日自分のコードの続きを書こうとプロジェクト開いたら、あまりの差になんかゲームエンジンでいいかなって思ってしまうなど……
— katze (@katze_7514) March 6, 2015
という境地に達してしまったので、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コマンドを生成してゲーム起動直後に実行
iniファイルを使う
[/Script/Engine.GameUserSettings] ResolusionSizeX=800 ResolusionSizeY=600
を適切なiniに書けばいいはずなんですが、自分の環境だと動いたり動かなかったりしてちゃんと動いてくれなかったです。
最大化ボタンを潰す
2Dゲーム制作の最大の敵であるウインドウの最大化ボタンなのですが、現状ソースをいじらずに潰す方法がありません。
最大化ボタンを表示させないようにするには、SWindowクラスのSupportsMaximaize変数をfalseにしてからWindowを作成すれば良いのですが、ゲームのメインウインドウ作成前に処理を差し込む口が用意されていないようです。
対処方は考え中ですが、起動後にスタイル変更APIを直呼びするか、解像度変更イベントが受け取れるなら、そこで強引に処理を潰すか、そんな所でしょうか。
プラグイン的な仕組みでなんとかできないかなー、と思いつつ。
最大化ボタンを潰せないので、解像度を変更してもユーザーにいじられてしまうので、どうしたものかという感じです。
まー、3Dゲームエンジンを半ば無理矢理2Dゲーム制作に使ってるので仕方が無いところではあるのですが。
※追記
ゲームカメラをちゃんと設定すれば、アス比維持では拡縮してくれるので、最悪のケースはなさそうです。