【趣味】【ゲーム開発】どんなゲーム開発にも当てはまるプログラミングの基本概念

2019-09-30

僕がゲームプログラミングの専門学生3年間で築き上げた、
ネイティブ開発にも通用するゲームプログラミングの基本概念をまとめます。

まず、最初に断言します。
他のプログラミング教本がどのように教えていたとしても、
ゲームプログラミングにおける概念は以下の5つに分類できます。

ネイティブ開発で右も左もわからない方は、
まずはこの5種類に分けてclassやstructを作ることを強くお勧めします。

・Data :単体の元データ
・Factory :Dataを準備する
・Repository :複数のDataを管理
・Controller :ゲーム上でDataを動かす
・Manager :複数のControllerを管理

 

これらの概念をわかりやすいように「空港運営」で例えます。

・Data :→飛行機(本体)
・Factory :→飛行機工場
・Repository :→空港(倉庫という理解の方が近い)
・Controller :→パイロット(飛行機を所有(操縦))
・Manager :→管制塔

つまり…
ゲーム(空港運営)開始前に、Factory(飛行機工場)は
せっせとData(飛行機)を製造して、Repository(空港)に送ります。

こうすることでゲーム(空港運営)開始時点ではすでに、
Repository(空港)はData(飛行機)を保有している状態です。

実際にゲームを動かす(空港運営)時には、
Manager(管制塔)の指示に従って、Controller(パイロット)が
Repository(空港)からData(飛行機)を取り出して、運転する。
という構図。

 

リアルの空港運営と違うところは、
ゲームの場合、バーチャル世界なので、
Data(飛行機)を瞬時にコピーして使えます。

なのでゲームの場合、Repository(空港)に
常時、固有のData(飛行機)を配置しておけば、
必要な時にController(パイロット)はコピーしたData(飛行機)を使って
ゲーム内で動き回ることが出来る。というわけなんです。

ネイティブ開発ではこの全てを自前で開発しないといけません…

…が!しかし、最近ではUnity等のゲームエンジンが生まれ、
実装方法は著しく楽になりました。

Unityで例えるなら、このように当てはめて考えられます。

・Data :→PrefabファイルやScriptableObject
・Factory :→エディタ上でPrefabファイルを作ればいい
・Repository :→ResourceからPrefabを直接読めばいい
・Controller :→MonoBehaviourで開発。GameObjectとして利用可能
・Manager :→SceneですべてのGameObjectを管理出来ちゃう

 

…つまり、Unityプログラミングでは、
5つの概念のうちControllerの一つだけ開発すれば終わり!ですね。
他は特にコーディングを意識しなくても、ちょちょいのちょいで出来ちゃう。
そりゃ楽だわー

…ただし。楽すぎるせいで、今までのネイティブ開発で
明確に分けて作っていた5つの概念の境があやふやになっています。

例えば、Managerは管理する対象によって分けて作った方がいい。
管制塔はあくまでも、パイロットが運転する飛行機運行のManagerであって、
パイロットが所属する飛行機会社や、飛行機に乗る乗客等まで関与しないですよね。
そういうのは別のManagerを作った方が解りやすくなります。

でも、作らなくても出来ちゃうから、ゴリゴリ作り進めてしまって、
後々よく解らない挙動をしまくってバグの温床…!なんてことが結構あります。

 

つまり、楽ちんだけど解りにくい!!
こういうのを解っていないと、込み入った開発で
頭が追い付かなくなって急にしんどくなりますよ!
っていう自己啓発でした。

ちゃんちゃん