Unityを始める前に・・・C#,WindowsFormでシューティングゲームを作る【連載】

C#を使って弾幕シューティングゲームを作ってみる

C#とWindows Formを使ったゲームプログラミングを勉強していこうと思っています。なぜC#?なぜWindows Form?という話なのですが、本当のところゲームエンジンであるUnityを使ってゲームを作りたいと思っているんです。で、早速Udemyでちょうど作りながらUnityを学ぼう系の教材を買って一巡しました。さすが人気ゲームエンジンUnityだけあって、2Dアクション、シューティングなどのジャンルに合った便利な機能が満載といった感じです。ただ、ゲーム制作もまともにやったことがないうえ、Unityも初めて、さらには使用言語のC#も書いたことがない、という状態なのでちょっと苦しくなりそうだな~と思ったわけです。いざ上記の環境でゲーム開発をするときに、「わからない、やったことない」状態のものを一つでも減らしておきたいな~と思ったわけです。というわけでせっかくなのでC#の言語に慣れて、さらにはゲームプログラミングの基本的な構造などを勉強しながらゲームを作っていこうと思います。


作ってみたいゲームの案は色々ありますが、最初はシューティングゲームを作ってみようと思います。いわゆる「弾幕シューティング」みたいな感じの、敵の弾が大量に放たれるようなシューティングです。
では初めてのC#によるシューティングゲーム作成をやっていきます。

斑鳩(イカルガ)っぽいシューティングゲームを作りたい

今回つくるシューティングゲームのモデルにしたのはイカルガ(斑鳩)というゲーム。2001年にアーケードゲームとしてデビューして以来、ドリームキャスト・XBox・Nintendo
Switch・プレステ4と様々なプラットフォームで発売された人気タイトルです。このゲームは自機プレイヤーの弾にはパワーアップ要素はなく、通常の弾とBombだけというシンプルな設定なのですが、特徴的な独自ルールがあります。敵の弾には白と黒の2つの属性があり、プレイヤーの属性を白と黒を切り替えながら進んでいきます。自分の属性と同じ色の弾に当たってもミスにはならず吸収してBomb用のエネルギーになり、違う属性の弾に当たるとダメージを受けます。そして敵の弾幕の軌道がとても美しいゲームでもあります。ただ純粋に全ての弾を避けるのでなく、色をチェンジして避けるための進路を自分で見いだすという戦略も必要になります。いや~素晴らしい独自ルール(*・ω・)
、、、さて。という感じの素晴らしいゲームなんですが、さすがにあんなクオリティのゲームは今回作りません。というか作れません(死 拙いコーディングで、なんとか斑鳩っぽいエッセンスを表現したシューティングが作れればいいかなと思っています。まず必須となる要件を定義していきます。

  • 敵の弾が美しい軌道で大量に放たれる
  • 直線的な動きだけでなく複雑な動きをする敵を登場させる
  • 敵の弾とプレイヤーに白黒の属性を持たせる
  • プレイヤーは属性をボタンで切り替えることができる
  • 同じ属性の弾に当たるとエネルギー獲得
  • 違う属性の弾や敵に当たるとダメージ
  • エネルギーが満タンになるとBombを発射できる
  • タイトル、ゲーム中、ゲームオーバーなどをシーン分けして実装する
  • ステージを簡単に増やしやすい構成にする
  • 敵キャラを簡単に増やしやすい構成にする

だいたいこんな感じでしょうか?ゲーム内容としての必須要件とコーディングの構成的な部分をざっと書き出してみました。図形などを表示させてとりあえず動かすだけなら簡単なのですが、立ち上げから終わりまでちゃんとゲームとして成立するものを目指したいと思います。

目次にもどる

C#はゲーム作成に向いている言語なのか?

C#については現時点で僕にはほとんど知識がありません。Microsoft製のプログラミング言語である、Javaを参考にしてより分かりやすく書けるように工夫して作られたオブジェクト指向言語である、Unityで使われている言語である、ぐらいの知識しかないですね(汗 とりあえずJavaと同じくオブジェクト指向型の言語だということなので、ゲームのキャラクターのように動く物体を作るならそれなりに書きやすそうな感じはします。ゲームっぽいプログラムのサンプルなどを見ると、Javascriptで書かれているものを見かけることが多いような気がします。が、これはそもそもWeb上でプログラムの動きとかを解説しながら書くのに適しているから、という理由が大きいのではないかと思っています。JSなら簡単にブラウザ上に物体を表示できますからね。一方、本当にゲーム作成をガチるのなら、より低級言語であるC言語やC++を使うことでハイパフォーマンスなゲームが作れるかもしれません。が、ちょっと挑戦するにはあまりに難易度が跳ね上がりそうなので却下です(
;∀;) ってことでC#。C#プログラミングで気軽にゲーム画面を描画するなら、次章で紹介するWindows
Formが便利そうです。ブラウザを使うJavascriptとは違い自分のPC上で専用のWindowが起動してゲームが始まります。
またオブジェクト指向言語であるというのは、ゲームプログラミングがしやすい要因になるだろうと個人的には思っています。初めてオブジェクト指向言語に触れたのはJavaだったのですが、そのときの参考書などでも簡単なゲームっぽいサンプルコードを使ってオブジェクト指向の解説をしていました。物体をイメージしてプログラミングができるので、Javaと同じくオブジェクト指向のC#は相性が良さそうです。
またUnityの使用言語であるということについてなのですが、UnityではもともとC#だけでなくJavascriptを使ってコーディングすることもできたようです。今はC#が主流のようですが。そのあたりの理由はよくわかりませんし、政治的理由があるのかもしれません。(もし詳しくご存知の方がいらっしゃいましたら教えていただけるとうれしいです。)Unityを使ってゲーム作成をするにしても、C#言語そのものでしっかりプログラミングできる方があとあと楽だろうと思います。

目次にもどる

Windows Formって何?

前章でも少し触れましたWindows
Form。フォームアプリという呼び方もあるようで、簡単にGUIのスタンドアロンアプリを作れるツールです。JavaでいうところのSwingとかJavaFXみたいな感じでしょうか。XMLを使わないのでSwingに似てるのかなと思っています。プログラムを書いて起動すると、専用のウィンドウが立ち上がってその中でいろいろなプログラムが動きます。Windows
Formにはボタンやテキストフィールドなどのパーツ(コントロールといいます)があり、それらを配置してGUIのシステム画面を構築していくことができます。ここまではJavaのSwingと変わりませんが、C#はWindowsOSと連携してあれこれするための言語なので、OS機能と連携させて便利なシステムが作れるんでしょう。きっと。そういったツールです。
そしてこのWindows
Formには図形の描画をする関数や、ゲームに必須であるキーフレーム関数が用意されています。キーフレーム関数とはゲームループを作る関数です。ゲームループ関数がない場合、ゲームスタート時と現在時刻の差分を計測してループ用の自作関数を呼び出すコードを書く必要がありますので、楽ですね。これらのことを考えると、Windows
Formはシステムだけでなくゲームを作る環境としてもなかなか便利なのではないかと思います。

目次にもどる

SNSでもご購読できます。


このエントリーをはてなブックマークに追加

コメントを残す

*