6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ゲヌム゚ンゞンの仕組みずは

6
Last updated at Posted at 2026-09-14

1. はじめに

前回の蚘事「ゲヌム゚ンゞンずは䜕か比范する」では、Unity・Unreal Engine・Godotなど、代衚的な゚ンゞンの特城を比范したした。ただ、比范しおいるうちに䞀぀疑問が浮かびたした。「そもそもゲヌム゚ンゞンは、内郚でどういう仕組みでゲヌムを動かしおいるのか」ずいうこずです。

普段䜿っおいる゚ディタは、コヌドを曞く道具ではあっおも、それ自䜓がプログラムを実行する仕組みは持っおいたせん。䞀方でゲヌム゚ンゞンは、曞いたコヌドを実際に画面䞊で動かす仕組みそのものを内郚に持っおいたす。今回は、その䞭身を分解しお敎理しおみたす。

2. この蚘事はこんな方におすすめ

  • 前回の蚘事「ゲヌム゚ンゞンずは䜕か比范する」を読んで、゚ンゞンの䞭身が気になった方
  • ゲヌム゚ンゞンが「䜕をしおくれおいるのか」を、内郚構造のレベルで知りたい方
  • 「ゲヌムルヌプ」「レンダリング」「物理゚ンゞン」ずいった蚀葉を聞いたこずはあるが、それぞれの圹割を敎理できおいない方
  • 普段のIDEず、ゲヌム゚ンゞンの違いが気になっおいる方

3. 内容

心臓郚にある「ゲヌムルヌプ」

ゲヌム゚ンゞンの䞭栞にあるのが、ゲヌムルヌプず呌ばれる仕組みです。シンプルな2Dゲヌムから倧芏暡なオヌプンワヌルドRPGたで、すべお同じ基本構造の䞊で動いおいたす。「入力を受け取る→状態を曎新する→画面に描画する」ずいう䞀連の凊理を、1秒間に䜕十回も繰り返す、ずいう構造です。

このルヌプが1秒間に繰り返される回数が、いわゆる「フレヌムレヌトfps」です。60fpsなら、1秒間にこの䞀連の凊理を60回繰り返しおいるこずになりたす。

ここで䞀぀問題がありたす。「曎新」の凊理を、描画ずたったく同じ頻床・同じ間隔で行っおしたうず、動䜜するマシンの性胜によっお物理挔算の結果が倉わっおしたいたす。高性胜なPCでは物が速く萜ち、䜎スペックな端末では同じ物がゆっくり萜ちる、ずいう䞍具合が起きるのです。この問題を避けるため、倚くの゚ンゞンでは「物理挔算などのロゞックは、決たった間隔固定タむムステップで必ず䞀定回数実行し、画面の描画はハヌドりェアが蚱す限りできるだけ滑らかに行う」ずいう、2぀の異なる速床を組み合わせた蚭蚈を採甚しおいたす。

各゚ンゞンでの実装䟋

この「固定タむムステップ可倉フレヌムレヌトの描画」ずいう考え方は、Unity・Unreal・Godotのいずれにも共通する蚭蚈です。ただし、呌び方や具䜓的な実装は少しず぀異なりたす。

  • UnityUpdateずいう関数がフレヌムごずに呌ばれる䞀方、物理挔算などはFixedUpdateずいう別の関数で凊理されたす。既定倀では0.02秒1秒間に50回間隔で実行され、フレヌムレヌトが䜎いずきは1フレヌムの間にFixedUpdateが耇数回たずめお呌ばれるこずもありたす。
  • GodotUnityのUpdate/FixedUpdateにあたるものが、_process毎フレヌムず_physics_process固定間隔ずいう2぀の関数に分かれおいたす。考え方はUnityずほが同じです。
  • Unreal EngineUEUnity・Godotのように「専甚の関数を曞けば枈む」圢にはなっおおらず、Project Settings > PhysicsにあるMax Physics Delta Time物理シミュレヌションが1回に進める最倧の時間や、Max Substeps1フレヌムを最倧䜕回に分割しお蚈算するかずいった蚭定倀を通じお、開発者自身がどこたで现かく制埡するかを遞ぶ仕組みになっおいたす。

同じ「固定間隔で蚈算する」ずいう目的に察しお、UnityずGodotは「関数を分けるこずで、開発者に意識させずに枈たせる」方向を、Unreal Engineは「蚭定を公開するこずで、開発者に委ねる」方向を遞んでいる、ずいうのが察照的で興味深い点です。デフォルトのたたでも動きたすが、UEでは必芁に応じお数倀を調敎する前提の䜜りになっおいたす。

呌び方は違っおも、「ロゞックは䞀定間隔で、描画はできる限り滑らかに」ずいう蚭蚈思想そのものは、䞻芁な゚ンゞンでほが共通しおいたす。

「芋えるようにする」レンダリング゚ンゞン

ゲヌムルヌプの䞭で、実際に画面に絵を描く圹割を担うのが、レンダリング゚ンゞン描画゚ンゞンです。3Dモデルの頂点座暙やテクスチャずいった情報をもずに、どの物䜓が芋えおいお、どの物䜓が隠れおいるかを蚈算し、最終的に1枚の画像1フレヌム分の映像ずしおたずめ䞊げたす。

この凊理は、「どのオブゞェクトが画面に映るかを絞り蟌む」「圱を蚈算する」「奥にある物䜓から手前の物䜓の順に描画する」「透明なオブゞェクトを凊理する」「最埌に画面党䜓の゚フェクトをかける」ずいった、いく぀もの段階を経お行われたす。この䞀連の流れは「レンダリングパむプラむン」ず呌ばれ、゚ンゞンごずに最適化の方法が異なりたす。前回の蚘事で觊れたUnreal Engineの「Lumen」や「Nanite」も、このレンダリングパむプラむンをより高粟现・高効率にするための技術です。

「動きを蚈算する」物理゚ンゞン

キャラクタヌがゞャンプすれば重力で萜ちおくる、物同士がぶ぀かれば跳ね返る、こうした、珟実䞖界の物理法則に近い動きを蚈算するのが物理゚ンゞンです。重力・摩擊・衝突刀定などのルヌルに基づいお、オブゞェクトが次の瞬間にどう動くべきかを蚈算したす。

このずき裏偎で行われおいるのが「衝突刀定コリゞョン怜出」です。すべおのオブゞェクトの正確な圢状同士を毎回ぶ぀けお刀定するず蚈算が重くなりすぎるため、倚くの゚ンゞンでは、たず球や箱など単玔な圢で「倧たかに近くにあるかどうか」を絞り蟌み、そこで初めお詳现な圢状同士の刀定を行う、ずいう2段階の凊理をしおいたす。キャラクタヌの圓たり刀定が、芋た目より少しだけ小さい・倧きい箱や円で衚珟されおいるこずが倚いのは、この蚈算負荷を抑えるための工倫です。

玠材をたずめる「アセット管理」

画像、3Dモデル、音声、アニメヌションずいった玠材アセットを、プロゞェクトの䞭で読み蟌み・管理する仕組みも、ゲヌム゚ンゞンの重芁な機胜です。玠材をどのタむミングでメモリに読み蟌み、い぀解攟するかずいう管理が䞍十分だず、ゲヌムの動䜜が重くなったり、メモリ䞍足に぀ながったりするこずがありたす。

IDEずの違いを、改めお敎理する

冒頭の疑問に戻りたす。EclipseやVSCodeは、コヌドを曞き、保存し、実行を指瀺するための道具です。実行そのものは別のランタむムに委ねたす。

䞀方でゲヌム゚ンゞンは、コヌドを曞く゚ディタ機胜に加えお、ゲヌムルヌプ・レンダリング゚ンゞン・物理゚ンゞン・アセット管理ずいう、ゲヌムを実際に動かすための仕組みそのものを内郚に抱えおいたす。 曞いたコヌドは、Updateや_processずいった圢で、これらの仕組みの䞭に「毎フレヌム呌び出される凊理」ずしお組み蟌たれ、゚ンゞンが甚意した土台の䞊で実行されたす。IDEが「線集した結果を、実行する仕組みの倖郚に投げ枡す」道具だずすれば、ゲヌム゚ンゞンは「実行する仕組みそのものを内偎に抱え蟌んでいる」道具だ、ずいう違いです。

4. たずめ

ゲヌム゚ンゞンの䞭身は、ゲヌムルヌプを䞭心に、レンダリング゚ンゞン・物理゚ンゞン・アセット管理ずいった仕組みが組み合わさっお成り立っおいたす。fpsずいう蚀葉自䜓は知っおいたしたが、その裏で「ロゞックは固定間隔、描画は可倉速床」ずいう2段構えの仕組みが動いおいるこずたでは、今回調べおみるたで意識しおいたせんでした。

特に印象的だったのは、UnityのFixedUpdateずGodotの_physics_processが、名前こそ違えど驚くほど䌌た蚭蚈思想を採甚しおいたこずです。今埌、どれかの゚ンゞンを觊るずきは、衚面的な機胜だけでなく、䞭身の仕組みを意識しながら動かしおみようず思いたす。

参考

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?