ゲーム作成の教本って小難しくて意味不明だからゲーム制作の基礎解説してみる(3)

ゲーム作成の本って小難しいし要領を得ないのでゲームの内容を解説します。

今回からゲームのプログラムの仕組みについて解説していきます。

[第一回はこちら](https://qiita.com/OrotiYamatano/items/cb9819ea9f1815886879)
[前回はこちら](https://qiita.com/OrotiYamatano/items/1777564b246141511248)
[次回はこちら](https://qiita.com/OrotiYamatano/items/bde59e8625950a630601)

#今回話すこと

- ゲームのハードウェアの基本構成です。
 
なぜ話すのかというと、この部分を知っているとゲームを作る上での制御をOSレベル(機器自体を動かす処理に近いレベル)で処理考える事が出来るようになります。
それは、すなわち処理速度の向上や描画処理技術の改良のし易さに繋がります。
もちろん詳しく知らなくてもゲームは作れます。
知らなくても良いけど、何がどうなっているのか知っていると有利になります。

今回の内容は言ってしまえば**パソコンとほぼ同じだよ**って内容で終わります。パソコンの構成を基本情報レベルで分かっている方は飛ばして貰っても構わないかなと思います。

では、早速行きましょう。

#ゲームのハードウェアの基本構成
ゲームと言っても様々ありますね。
分類するとこうでしょうか。

 - 筐体(アーケード)
 - コンシューマー(家庭用ゲーム機)
 - コンシューマー(携帯ゲーム機)
 - パソコン
 - スマホ

それぞれ作り方は違いますが、基本的なハードウェア構成や仕組みは、ほぼ同じです。


##OSについて

基本的なハードウェア構成や仕組みが同じと言いましたが、具体的に話をしていきましょう。

パソコンにはOS(オペレーティングシステム)があります。

```
OS(オペレーティングシステム)とは:
入出力の制御、メモリやハードディスクなどのハードウェアの管理、
プロセスの管理といった、コンピュータの基本的な管理・制御をする。
(メモリやハードディスクについては後述します)
```
簡単に言うとハードウェアを動かすためのシステムです。

パソコンのOSには、いくつかあります。MacOS、Windows、Linuxなどなど様々な物があります。
これがパソコンに入っていることで初めてパソコンを動かすことが出来るわけです。
OSが入ってない場合は、動かせなくなります。
つまり、パソコンの場合は機械自体と、それを動かすためのプログラムは別々になっているという訳です。

スマートフォンもパソコンと同じ仕組みで、端末とOSが別々になっています。
iPhoneにはiOSがAndroid端末にはAndroidOSが入っています。
同じ仕組みですのでAndroidOSはパソコンにAndroidを入れることも出来ます。(タッチパネルがついている物しか自由に動かせませんが)
言ってしまえばスマートフォンは小さなパソコンなのです。

携帯ゲーム機、PSVitaのOSはAndroidOSを元にして作られたという噂もあります。
PS3にLinuxを入れたユーザが居るなど事例なども……。
同じく筐体もlinuxやWindowsが入っているケースがあります(朝早くにゲームセンターに行くと起動画面がみれるかも)。
つまり、大体のゲーム機はハードウェア的には、ほぼ同じ仕組みという訳です。
ですので、一つの仕組みを理解していれば大体が応用が効くので覚えていて損はないです。

#具体的な構成
パソコンが説明しやすい＆私が一番理解しているのでパソコンを例に解説していきます。

パソコンの機器構成は主に以下のようになります。

 - マウス/キーボード/ゲームパット(インターフェース・入力装置)
 - ディスプレイ/スピーカー(出力装置)
 - HDD/SDD(補助記憶装置)
 - メモリ(主記憶装置)
 - CPU(演算装置/制御装置)
 - マザーボード
 - その他(グラフィックボード/サウンドカード等)

順番に説明していきたいと思います。

##マウス/キーボード/ゲームパット(インターフェース・入力装置)
入力装置です。
いろんな命令を受け付けるものになります。
家庭用ゲームで言えばボタンになります。
ボタンが押され続ける間は1が返る等接続情報を検出する**API**がOS側用意されています。
Windowsで言えばWindowsAPI(Win32API)にあります。
特に解説することはありませんね。

```
API:ソフトウェアが互いにやりとりするのに使用するための命令の総称
(Webサーバからユーザログイン情報を貰ったり、ハードウェアからの接続情報を貰うために使う)
```

##ディスプレイ/スピーカー(出力装置)
出力装置です。
コントローラを振動させたり、音を出したりします。
これもOS側に命令関数があります。
出力データなので一旦メモリに格納してやる必要があるので入力検知より処理は面倒です。

##HDD/SDD(補助記憶装置)
補助記憶装置です。いわゆる記憶媒体です。
OSを入れる場所でもあります。
パソコンでは3TBの記憶容量がある場合も。
セーブデータやダウンロードコンテツはここへ保存する必要があります。
ゲームそのものもインストールします。

##メモリ(主記憶装置)
主記憶装置です。重要部分です。
ゲームの場面転換でロードが始まるときは大体ネット通信をしているか、メモリに補助記憶装置からデータを読み込んでいます。
それぞれのデータを表示や使う場合は必ずと言っていいほど、メモリに読み込む必要があります。
例えば動画を再生する場合、補助記憶装置からメモリに読み込み、ディスプレイとスピーカから出力します。
大体2GB~16GBです。しかし、動画は2GBを超える場合もありますよね？

それを再生する場合はメモリを挟まず直接補助記憶装置から呼び出す荒業もありますが、
基本的に**ストリーミング**と言ってデータを細切れにして補助記憶装置からメモリに読み込みます。
そして、古いものは破棄することで動画を再生することが出来ます。BGMなんかも同様にストリーミングを使うことが多いです。
画像や3Dモデル、サウンドもメモリに読み込んでは破棄するということをしないとメモリ容量がいっぱい(**メモリリーク**)になり演算ができなくなりゲームが落ちてしまいます。

##CPU(演算装置/制御装置)
CPU(Central Processing Unit)です。
これが実際のゲームの表示処理やキャラクターの操作、戦闘時のパラメータ計算など全てを担います。
描画処理をCPUですることを**ソフトウェアレンダリング**といいます。
CPUは頭脳です。しかしハードウェアの性能を高くする時、CPUだけの性能じゃハードウェアの性能は上がりません。
例えると……。

作業者をCPUとすると机がメモリです。そして引き出しが補助記憶装置です。
作業者は処理をする場合、引き出しから机にとりだして作業をします。
なので、いくら作業者が凄くても机が狭いと物が乗せられません。
逆に作業者はそこそこの能力なのに広すぎる机を用意しても作業者が使い切れないといった問題がおきます。
ですので、何をしまって何を使うかというメモリ管理は重要です。

また、CPUにはcoreというものがあります。
頭脳の数のことです。
画像を表示しながら戦闘の処理をするなど並行して処理をしたい場合、頭脳を2つ使って処理をさせると負荷が減ります。
Unityは**シングルスレッド**と言って基本的に1つの頭しか使いません。ですので、ちょっと処理にムラがあります。
パソコンの場合、最近はcore数8が主流です。
一つ一つの頭(core)の良さ(処理速度)も重要ですが、並行処理(**マルチスレッド**)をプログラムに組み込むだけで劇的に早くなる可能性があります。
ハードウェアによっては処理を変えたほうが良いかもしれません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/173560/1570d19c-c5fc-ef81-d65d-a7074ba6a477.png)
CPUの性能を例えた例↑(家庭用ゲーム機ではAMDが使われている場合が多いです)

##マザーボード
各機能を繋ぐための基盤です。
標準でレンダリング処理をしてくれる**GPU(Graphics Processing Unit)**が載ってる場合もあります(**オンボードグラフィック**)。
GPUでレンダリング処理をすることを**ハードウェアレンダリング**といいます。
ハードウェアレンダリングとソフトウェアレンダリングと併用する場合もあります。
端末ごとに描画処理が激変している場合、レンダリング処理を見直す必要がある場合もあります。

##その他(グラフィックボード/サウンドカード等)
 - グラフィックボード
 
レンダリング専用の機器です。
普通のパソコンには載ってません。
演算処理と描画処理はちょっと違い、単純な演算処理と描画処理の機能は別けることで処理が早くなります。
CPUは演算処理に特化しているのでグラフィックはグラフィックボードのGPUに任せることでCPUは早くなります。
GPUの載っていないスマホは描画処理と演算処理を並行処理にしてやると早くなることもあります。
ゲームを作る上で一番重たい部分はグラフィックの場合がほとんどです。工夫が必要になる部分だと思います。

 - サウンドカード

グラボの音バージョン。ゲームでは無いのが殆ど。曲を作る人でもない限り気にする必要はない。

#まとめ
以上が、ゲームを作る上での機器構成になります。
つくるハードウェアによって適した処理を書けるようになると良いですね。

次回はゲームの処理を解説します。
[次回はこちら](https://qiita.com/OrotiYamatano/items/bde59e8625950a630601)