しゃべりながらゲーム制作やってみます #27 マップ改良とマウス対応

すみません、なんか2か月ぐらい間が空いてしまったのですが、ひさびさに投稿しました。あんまり作業時間とれないのはつらいですね。

今回は Ver 0.30 に向けての途中経過報告となっています。マップを改良しつつ、マウス操作にも対応させるようにしました。動画の公開が伸びた原因はほぼマップ改良でしたね…。


しゃべりながらゲーム制作やってみます #26 Ver 0.20 公開!

ゲーム開発中デモ版 Ver 0.20 を公開したので、その改修内容や変更点について説明をしています。作るにあたって気を付けた点や、Ver 0.20 の内輪話などもしています。

ゲーム画面を実際に動かして説明しているので、画質が悪いです。ご了承ください。(エコ回避で動画イサイズを小さくしているので)

ほんとは昨日のうちに公開できるはずだったのですが、なぜかエンコードするとツールがエラーで落ちまくっていたので、四苦八苦しながら作って遅くなりました。


ゲーム開発中デモバージョン Ver 0.20 を公開しました!

結構時間が経ってしまいましたが、ようやく Ver 0.20 を公開しました。公開 URL は以下のページになります。

2016-03-06 15_41_45-Greenshot_600px

前のバージョン 0.10 と同様にデモ版の公開は Silverlight での動作になります。なのでゲームをプレイされる方は Windows かつ IE11 でページを開いてください。ほかの OS やブラウザの場合、設定などで動かすことはできるかもしれませんが確認はしていません。(例えば Google Chrome では絶対動かない、FireFox は設定変えれば動くなどがあります。)

また、今回のバージョンからゲームを GPU で動かすようにしたので、初めてプレイされる方は Silverlight の設定を変える必要があります。変更手順についてはゲーム公開ページの下のほうに記載しましたので、その手順で変更をお願いします。

そのほか操作方法や、Ver 0.10 からの改良点なども上記のページに記載してありますので、ぜひ遊んでみてください!


ゲームデモ版 Ver 0.20 について

結構時間がかかってしまいましたが、ようやく公開できそうな段階まで出来上がってきました。都合がつけば今週中ぐらいにはアップできると思いますが、仕事がやたら忙しいため、下手すると次の週末になりそうな予感もしています(実際その確率のほうが高い)。

変更内容とかは公開したときに書きたいと思いますが、Ver 0.20 からは GPU 処理に代わりますので、ゲームを始める前に1回 Silverlight の設定を変更する必要があります。変更方法については公開後に、該当ページに説明を入れておきます。1回設定すれば、ほかのバージョンを公開した場合でも再設定の必要はありません(同一ドメインならそうだった気がします)。

パフォーマンスは想定していたよりはいい感じです。まあ結構アルゴリズムの最適化を行ってきたのでそうでないと割と困るのですが(^^;)。一応持っているデスクトップPCとノートで動かしてみましたがほぼ問題ありません。どちらも割と高スペックなのであまり参考にはならないのですが…。試しに DELL の Venue Pro 8 のタブレット PC でも動かしてみたのですが、たぶん 30FPS ぐらいでスムーズに動いている感じでした。ただ Ver 0.20 はまだキーボードしか対応していないので、ちーたんタッチボードを起動して無理やり操作したのですが。

続きは時間が取れた時に。下に載せたイメージは開発中の画面です。

2


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

どういった場合に GC の対象となるか調べてコードをいくつか改善してみました。おおざっぱなキャプチャしかとってなかったのであんまり参考にならないですが、改善前はこんな感じ。

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

10秒の間に2~4回ぐらい GC が発生していました。

改善した結果がこちら。

2016-02-11 20_12_39-CpuGameDanke1UAP - Microsoft Visual Studio - コピー

10秒に1~2回ぐらいまで抑えられました。まだ改善できそうな箇所があるのでもう少し頑張ってみます。

まあ GC の発生を改善すれば処理速度向上するかなーと思ってたんですが、気持ち程度でしたね。ただ、確実によくはなっていると思います。

とりあえず現状のパフォーマンスでユニットをたくさん出してみました。

2016-02-11 23_57_23-CpuGameDanke1UAP.Windows - コピー

ユニットがどれだけいるかわからないのですが、一応開発マシンでは FPS が 50~60 でている感じです。ただ、開発マシンはスペックが高く、ノートでやると明らかに落ちているのでまだまだ改善しないといけないですね。というかそもそもこんなにユニット出すのかっていう前提もあるんですが (^^;)

ロジックを最適化する場合、たいていは無駄な判定とか減らすのですが、それをやると正常に動かなくなることが割と多いです。これを直すのに意外と時間かかったりしますね。


ゲーム開発進捗 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秒止まってたほうが、ユーザーは全然気にならないと思います。


Windows 10 & Windows 10 Mobile 向けのゲーム作ります

※あれ? 前にも同じようなこと書いてなかったけ? と思われた方もいるかもしれませんが、書いたかどうかも忘れてしまったぐらい時間がたってしまったのでとりあえず書きます。

最近日本でも Windows 10 Mobile の端末が増えてきたので、それに乗っかる形でなんかゲームでも作ってみようかと思います。

実は Windows 10 Mobile で動くゲームは、以前 Windows 8 向けのゲーム「エイッとウォーズ」なるものを作った後、Windows Phone に移植しているので、完全に初アプリ(ゲーム)というわけではありません。

ただ、エイッとウォーズはもともと Windows 8 のアプリコンテスト向けに作っていたものだし、実質3日ぐらいで作ったものなので自信作、といえるものではありません。それに Windows タブレット向けに作ったものなので、Windows Phone での操作には若干難があります (まあ、一応普通にクリアする分にプレイはできますが)。なので今回はもう少し作りこみをしたレベルでのゲームを作ろうかと思っています。

で、ゲームの内容とかタイトルが気になる方もいるかもしれませんが、実はほとんど決まっていません。市販のゲームの告知とかだと、大抵はゲームタイトルやロゴ、場合によっては開発中イメージなんかが出てくると思いますが、今回作ろうとしているゲームは、考えている内容が本当に問題なく作れるかどうかの調査の段階から始めているので、そこをクリアしないとタイトルとか決めてもしょうがないかなー、と考えてました。

一応ふわっとした感じではイメージしているのですが、まだきちんとまとめていないので、タイトルとかイメージはおいおい紹介していきたいと思います。

現在プログラムの構築のほうは実は完全に0というわけではなく、いろいろテストしながら作りこんでたりしてます。

ブログを見ていただいている方なら知っていると思いますが、ゲーム制作の内容を動画で撮ってニコニコ動画のほうにアップしています。まあこの動画は他の人に見せるため、というよりかは備忘録的な感じで作っているので内容はぐだぐだなのですが、それでも見てみたいという方がいればご覧ください。現在25回分は上げていたかと思います。

ゲームのデモも、開発中の段階ですが、ホームページのほうに上げたりしています。こちらも段階的に上げていくつもりです。(Silverlight 版です)

もともと Windows 10 や Mobile 向けに作っていたわけではないので、タッチ向けにどうもっていくか、子画面のレイアウトとかどうするか、など課題はまだまだ多いです。

ある程度検証とかが終わり動くものができてきたら、タイトルとかコンセプトとか作りこんでいく予定です。コンセプトなんかは本来一番最初に考えるべきものなんですが、ゲーム内容を発表した後にプログラム作ってみたら実はできませんでした時間が足りませんでした、なんてことにもなりかねないので(実際なる)、そこらへんはできるものからやっていきます。個人開発だし特に周りに影響することもないですからね。

今後の方針なのですが、ゲーム制作動画のほうはあまり更新しない予定です。何個か機能ができたらそれらを簡単に紹介していくような動画になると思います。

代わりに進捗のほうをブログのほうで週一ぐらいで書いていこうかなと思っています。文章を作るのに時間がかかってゲーム制作が遅れるのもあれなので、キャプチャ1~2枚と文章をちょろっとというような感じになると思います。

Twitter のほうも動画紹介ぐらいにしか使っていなかったので、こちらでもちょくちょく書いていこうかなと思ってます。

ということで一応こんな感じでゲーム制作をやっていくつもりです。またなんか決まったらブログに書いていきます。


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

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

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

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

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


Windows Phone 用ゲーム「エイッとウォーズ」をKATANA01で動かしてみた

初の Windows 10 Mobile 端末として KATANA01 を2週間ぐらい前に購入しました。現在スマフォは MADOSMA を使っているのですが、唯一の Windows Phone 8.1 としてこのまま残す予定なので、実際に Windows 10 Mobile でテストする際は KATANA01 を使っていくつもりです。

Twitter でもちょろっと post しましたが、KATANA01 は Windows 10 Mobile 端末の中でも最低限スペックであるため(一応国内では)、これで問題なくアプリやゲームを動かせればほかの端末でのパフォーマンスチェックはすべてクリアできるので、開発にとってはかなり役立ってくれるはずです。(もちろん端末固有の機能があれば別途調査はしないといけないですが)

で、せっかく Windows 10 Mobile を入手したので、なんか動かしたいなと思ったのですが、そういえば以前に、Windows 8.1 向けに作ったゲーム「エイッとウォーズ」を Windows Phone 8.1 に移植して公開したものがあったのでためしに動かしてみました。

KATANA01 をほぼ購入状態のままエイッとウォーズをインストールして起動させてみたのですが、なぜかタッチが反応せず、ゲームが進めない状態に。ほかのアプリは動いいているので、もしや MonoGame が正常に動かないんじゃと思い、ためしに Windows 8.1 UAP を新規で作成したプロジェクトに Mouse や Touch の制御を追加して実行してみたら案の定反応せず。

割と困っていたのですが、そういえば先日 Windows 10 Mobile のアップデートが出ていたので、一応更新をかけて再起動してみました。そうしたらなぜか正常に動かすことができました。

DSC01800_2

原因が単に OS の再起動だけだったのか、電話の更新によるものだったのかはわかりませんが、とりあえずめでたしです。もしエイッとウォーズをダウンロードして動かない方がいらっしゃれば電話の更新をしてみてください。

で、実際に MonoGame Windows 8.1 UAP で作られたゲームなのですが、問題なく動作しています。とりあえず最初のステージから最終ステージまで一気に遊んで確認しました。パフォーマンスも特に問題なく。

DSC01803_2

以前にブログで MADOSMA にインストールして試してみたとき、タッチしまくると画面がフリーズするという現象がありましたが、KATANA01 ではその現象は再現しませんでした。もしかしたら Windows 01 Mobile の影響かもしれません。

とりあえず、MonoGame Windows 8.1 UAP のプロジェクトなら Windows 10 や Windows 10 Mobile でも動かせることが分かったので、ひとまず安心して制作を行うことができます。

(相変わらず Windows 10 UAP のプロジェクトのテンプレートがバージョン不一致で作れないので MonoGame プロジェクトのメンバーの方々なんとかお願いします)


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

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