Tinnosuke
← Back

Game

Simple Shooting Game

敵を撃ち倒してスコアを伸ばすことに集中した、短時間で遊べるシンプルなシューティングゲームです。

Simple Shooting Game icon 2025年3月24日 - 5月30日 (68日間) Completed
Simple Shooting Game gameplay preview
Preview 01
1 / 5

Section

Gameplay

敵を撃ってスコアを伸ばす、短時間で分かりやすく遊べるシューティングゲームです。

#

ゲームの概要

本作は、敵を撃破してスコアを伸ばしていくシンプルなシューティングゲームです。

複雑なルールや成長要素は入れず、移動、攻撃、回避、スコア更新という基本的なゲームループに絞って制作しました。
短い時間でも遊び方を理解でき、繰り返しプレイしやすいテンポを目指しています。

プレイ体験

本作では、以下のような体験を重視しました。

  • 操作と結果が分かりやすいこと
  • 敵を倒すことでスコアが伸びる手応えがあること
  • 短いセッションでもリトライしやすいこと

初期作品のためゲームとしての完成度は限定的ですが、ゲームループ、入力、描画、オブジェクト管理など、ゲーム制作の基本構造を理解するための作品になりました。

開発背景

本作は Unity ではなく、OpenGL を C# から扱うためのライブラリである OpenTK を使用して制作しました。

ゲームエンジンを使わずに、ゲームループ、入力処理、描画処理、オブジェクト管理を自分で実装することで、ゲームエンジンが内部で担っている基本的な仕組みを学ぶことを目的にしています。

その分、開発効率は高くありませんでしたが、Unity などのゲームエンジンを使う前に、ゲームの基礎構造を自分で組み立てる経験ができた点は大きな学びでした。

Section

Development

OpenTK を使用し、ゲームループ・入力・描画・オブジェクト管理を自分で実装した学習目的のシューティングゲームです。

#

開発の狙い

本作は、OpenTK を使用して制作した初期のシューティングゲームです。

Unity などのゲームエンジンを使わず、ゲームループ、入力処理、描画処理、オブジェクト管理を自分で実装することで、ゲーム開発の基礎構造を理解することを目的にしました。

当初は OpenGL をより直接的に扱うことも考えましたが、C++ でのメモリ管理やリソース管理の負担を避けるため、C# から OpenGL を扱える OpenTK を採用しました。

実装の構成

実装では、Unity の構造を参考にしながら、GameScene を中心に GameObject を管理する構成にしました。
GameObject は複数の Component を持つ形にし、処理を機能ごとに分けられるようにしています。

ゲームループは、主に以下の流れで構成しました。

  • Update で入力処理と状態更新を行う
  • Draw で描画情報を収集する
  • SpriteBuffer に描画対象を登録する
  • Sprite 管理クラスがまとめて描画する

描画処理では、一度描画用のバッファに Sprite 情報を登録し、最後にまとめて描画する形を取りました。
ただし、描画順やバッチ処理、ステート変更の削減などは十分に最適化できておらず、描画面の効率には課題が残りました。

Transform と階層構造

GameObject には親子関係を持たせ、親の位置を考慮して子オブジェクトの位置を更新する仕組みを実装しました。

これにより、プレイヤーの周囲に表示される魔法陣のような追従演出や、背景スクロールなど、複数のオブジェクトを関連付けた表現を実現しています。

Unity の Transform 階層に近い考え方を自作したことで、親子関係による座標管理や、オブジェクト構造の設計について学ぶことができました。

描画と見た目の課題

Sprite はドット絵に近い見た目で制作しましたが、解像度やカラーパレットに統一感がなく、画面全体の視認性には課題がありました。

特に、背景と弾、敵の色が重なりやすく、プレイ中に重要な情報が見づらくなる場面がありました。
そのため、他のシューティングゲームを参考にしながら、背景は暗めに、弾や敵は明るめにすることで、視認性を改善しようとしました。

一方で、独自実装の描画基盤では調整に時間がかかり、最終的な見た目の品質を十分に高めるところまでは到達できませんでした。

学んだこと

本作の開発を通じて、ゲームエンジンが提供している基本機能の重要性を実感しました。

特に、ゲームループ、入力処理、描画順、Transform 階層、オブジェクト管理、リソース管理などを自分で実装したことで、Unity を使う際にも内部構造を意識しやすくなりました。

また、ゲーム制作では「低レベルな仕組みを自作すること」と「実際に遊べるゲームを完成させること」は別の課題であり、目的に応じて技術選択を行う重要性も学びました。