ロゴ ロゴ

Den3GameJamでゲームを作った

OpenSiv3Dを使ってみました

前回の記事ではC++対応のゲームライブラリを紹介しました。Den3の活動の一部である1週間でゲームを作るDen3GameJamに参加しました。テーマは「増える」でした。

ソースコードに関しては公開やこの記事で解説をする予定はありません。またゲームの配布も今のところしない予定です。OpenSiv3Dの公式ホームページにあるゲームのサンプルプログラムをそのまま真似た部分があること、そしてあまりソースファイルを分けずにとりあえず実装できれば良いやと思い雑なプログラムになってしまったためです。解説はOpenSiv3Dのホームページにあるチュートリアルやリファレンスページを閲覧したほうが良さそうなので細かいことは書きません。とは言えゲームを作ったことは確かなので概要は紹介していきます。

シューティングゲームを作ることにした

テーマが「増える」ということで最初にイメージしたのはスライムでした。私がイメージしたスライムは攻撃を受けると分裂するタイプのものです。OpenSiv3Dで作ってみたいジャンルにシューティングを考えていたため敵が弾に当たることでが分裂して画面上にいる敵の数でスコアを記録していくゲームにしようと思いました。ただし、画像を用意するのは面倒だったので丸の図形を使うことにしました(スライムじゃなくなった…)。

使った機能

OpenSiv3Dには便利な機能が備わっています。今回使った機能は当たり判定、乱数、シーンの遷移、マウスカーソル位置取得、キー入力(長押し)といったものです。この機能を使う上でさらにイテレータという機能も利用することになりますが、ここら辺は私はまだあまり理解できていないのでサンプルコードを参考にもしくは一部をそのまま真似して実装しました。

実際に遊んでみた

上の画像はプレイ画面です。自機は高さを画面下部に固定して、横方向はマウスカーソルに追従して移動するようにしました。スペースキーを押すことで弾を発射できて、一定間隔で動きを変える敵に弾を当てます。制限時間を7秒に設定して、「7秒以内にどれだけ敵を”増やせる”か」というゲームにしました。丸と矢印(先端以外は画面の下に隠れてしまいました)しかありませんが、ゲームということにしてください。

OpenSiv3Dでゲームを作ってみた感想

実はC++でゲームを作ったのは初めてだったので、C++の基本的な機能を勉強しながらの実装になりました。ただC言語とJavaを扱ったことがあるのでクラスの作り方などは少し勉強したらできました。ただ、いきなり一からの実装となると時間がかかりそうだったのでサンプルコードに頼りました。ゲームのサンプル、さらにはOpenSiv3Dの開発者であるRyo Suzukiさんがゲームのテンプレートをgithubに公開してくださっているのでそれを使わせていただきました。本格的なゲーム開発をすぐに始められるプロジェクトテンプレートとのことで基本的なファイル・クラス分けがなされて、C++ファイル・ヘッダーファイルの作り方はわかりやすかったです。OpenSiv3Dの「サンプル」の「ゲーム開発のテンプレート」というページにテンプレートのプログラムを1つのファイルにまとめたときのソースコードが載っていて、先程のゲームのテンプレートのリンクもあるのでこちらも参照してください。

同じくC++で書けるゲームエンジンとして Unreal Engine というものがあります。これは描画機能が強力でUnityよりもグラフィック性能が優れているエンジンとなっているようです。C++で本格的なゲーム(格闘ゲームのようなリアルタイム性を求められるものや3D描写が必要なもの)を作りたい場合はこちらも候補に入りますが、PCの必要スペックが高いことが難点で私のノートパソコン(しかもゲーミング仕様でもない)では重くてゲーム開発どころではありませんでした。そのうちデスクトップパソコンを買おうか検討していますが、今持っているパソコンで問題なく動き、軽めの2Dゲームを作りたいとなればOpenSiv3Dが最適なのではと思ってしまうくらい使いやすいと感じました。しかしUnityの方がもっと簡単かもしれません…

かつてはDXライブラリでゲームを作っていましたが、開発速度はこちらの方が格段に速く仕上げることができたと思います。特にシーン遷移の実装が本当に楽です。これをDXライブラリで実装するときは色々と方法を調べましたが理解できず、switch文で無理やり作っていました。この機能もOpenSiv3Dのファイル群の中身を見て勉強してみようとも思いました。

次回のブログの内容

3/2(月)までに別のお題でゲームを作ることになりました。次回の記事もDen3GameJamで作ったものを紹介することになります。

コメント入力

関連サイト