ゲーム開発進捗 2016/02/07 GC とパフォーマンス

来週艦これのイベントが始まるということで、イベントが始まる前にマンスリー任務やEOステージのクリアをやってたのでゲーム開発のほうはあまりはかどりませんでした。それよりもどんどんたまっていくアニメの録画の消化をどうにかしたい…。

さてゲーム開発のほうですが、現在は Ver 0.20 の公開に向けて作っています。ですが、ちょっとパフォーマンスに難ありな状態なので、機能の作りはおいておいてメモリ管理のほうを少しやってました。

Visual Studio 2015 には診断ツールがあり、メモリの使用状況や CG の発生タイミング、メモリのスナップショットなどを見ることができます。

2016-02-07 11_11_05-CpuGameDanke1UAP - Microsoft Visual Studio

ゲームの場合ツール系とは違い、常に処理が回っているのでメモリ(インスタンス)の確保が常に発生します。C言語のような完全なネイティブプログラムの場合、自身でメモリの破棄タイミングを指定しなければならないので、メモリリークさえ気を付ければ GC なんて考えなくてもいいのですが、今回 C# でゲームを作っており、確保したメモリの破棄はほぼすべて GC に任せることになります。

ゲームループ中に GC の発生を抑えることはほぼ不可能です。事前に必要なメモリを確保しておき、その中でやりくりするという方法がゲームでは主流ですが、マネージドなプログラムだと、文字列処理を行うだけで GC 対象になるので相当気を使います。

とは言ってもあまり余計なインスタンスを作成さえしなければ、GC が発生してもゲームに影響することはそんなにありません。上の図で何回か GC が発生していますが、メモリが平行に進んでいる部分のGCは大体ジェネレーション1のものです。1回当たりにかかる時間はミリ秒単位。うまく作ってればコンマミリ秒まで落とせるので支障はあまりないと思います。

ただ、別のシーンに切り替えたときなどに例えば大きな規模の初期化処理などを行うとジェネレーション2が使用されます。これを放置しておくとゲームの最中で突然一気に解放されたりします。これにかかる時間が100ミリ秒単位だったりするので、その間完全にゲームが停止します。リアルタイム性が求められるゲームの場合致命的です。上の図でも途中で一気にメモリが解放されていることが分かります。

変なタイミングで発生されても困るので、初期化処理が終わったらとっとと GC.Collect を呼んで解放してしまうのがいいと思います。

2016-02-07 22_38_37-CpuGameDanke1UAP - Microsoft Visual Studio

プレイヤーが操作中に止まるよりは、次のシーンが始まる前の真っ暗な画面なんかで実行したほうがいいですね。操作中に0.5秒止まるよりは真っ暗な画面で0.5秒止まってたほうが、ユーザーは全然気にならないと思います。

Share this...

しゃべりながらゲーム制作やってみます #25 探索経路自動生成3

投稿まで時間がかかってしまいましたが、探索経路自動生成3回目を投稿しました。1回目2回目は説明ばっかりになってしまいましたが、3回目はデモ中心になります。

実は最近制作のほうが停滞気味になってしまっているため、次の投稿がいつになるかは未定です。今年の投稿はこれが最後になると思います。

一応次回の投稿は Ver 0.20 公開に向けての内容になると思います。

また、今後の投稿内容の方針についてですが、最近実装の説明ばっかりの内容になってしまっているので、なるべく出来上がった機能の紹介を中心にやっていこうかと思います。動画制作にはあんまり時間をかけないで投稿するという当初の目標があったのですが、やっているうちに微妙にずれてきてしまっているので、投稿間隔としては月1ぐらいで投稿していければなーと思ってます。

Share this...

しゃべりながらゲーム制作やってみます #24 探索経路自動生成2

前回の続きです。3回に分割しているのでその中の2回目ですね。説明部分が長すぎてしまったので、今回も半分以上は説明部分になっています。最後のほうでルートポイントの生成についてのデモの一部をやっています。

Share this...

しゃべりながらゲーム制作やってみます #23 探索経路自動生成1

マップに壁を作ったことにより、自動で動くユニットが、道なりに移動できるように経路を探索できるようにする必要があります。

通常は経路をマップに合わせて手動で作るのですが、マップ自体が自動生成されているため、探索経路も自動で作る必要があります。

同人誌、同人ゲーム、同人ソフトのダウンロードショップ - DLsite
Share this...

しゃべりながらゲーム制作やってみます #22 マップの自動生成2

マップの自動生成、後半の動画をあげました。前半は説明が大半だったのですが、後半は実際にマップデータを自動生成する部分の内容と、できたマップをキャラクターを操作して歩くデモを行っています。

Share this...

しゃべりながらゲーム制作やってみます #21 マップの自動生成1

今回マップを作るという実装部分をやりますが、マップはマップエディタなどを使わずに自動で生成する仕組みを使って作ることにしました。

収録が長くなってしまったので前後半2つに分割してアップすることにしました。今回は前半部分となります。前半は主に説明部分となっていて、実装や動作デモについては後編としてアップする予定です。

Share this...

しゃべりながらゲーム制作やってみます #20 壁の当たり判定

制作のほうがなかなか詰まってて進んでいない状態なので動画の公開のほうも滞っているのですが、なんとか3週間ぶりにあげることができました。今回の実装と次回分の実装が形になってきたので、問題なければ数回にかけて毎週1個ずつ動画を上げられるかもしれません。

あと、Ver 0.2 のデモ版についてもそろそろ視野にいれようかと思っています。Ver 0.1 からはそんなに機能は追加する予定はないのですが、大まかに XNA 対応とマップ対応あたりになるかと思います。まだざっくりとしか決めていないので、決まりしだい書いていきたいと思います。

Share this...

しゃべりながらゲーム制作やってみます #19 開発環境移行

すみません、動画を投稿していたのにブログのほうで告知するのを忘れていました。

開発環境を移行していたので、しばらく動画投稿できていなかったのですが、1か月ぶりに再開しました。今回は番外編ということで開発環境移行についていろいろ話しています。

番外編なのでほんとは18.5とかにしようと思ってたのですが、番号を並べた際にここだけ浮いちゃうので19にしました。(^^;)

同人誌、同人ゲーム、同人ソフトのダウンロードショップ - DLsite
Share this...

しゃべりながらゲーム制作やってみます #18 シーンとプレイヤー変更

時間が経ってしまいましたが、#18 を公開しました。今回は現在のシーンから次のシーンに移る際のエフェクトと操作ユニットの変更について説明しています。

現在開発環境を Windows 10 と Visual Studio 2015 に移行中なので、ゲーム制作の方は少し遅れるかもしれません。(今回まで Windows 8.1 と Visual Studio 2013 です)

Share this...

しゃべりながらゲーム制作やってみます #17 XNA!!

ゲームデモ版第1弾をリリースしましたので動作環境を変えてみました。環境は「Silverlight」から「Silverlight + XNA」になってます。また、追加フレームワークとして「Silverlight 5 Toolkit」と「SilverSprite」を導入しています。

新環境に移ったせいもあるか、収録時に予定通りに進まなかったので時間が長くなってしまいました。

Share this...