作業ログ

3Dアクションゲームの中でVeEngineの基盤を作る

3Dアクションゲームと、その中で作るEngineの基本構成を考える。

  • game-engine
  • software-design

背景

ゲーム完成後にEngine部分を切り出すことを想定しているため、開発中からゲーム固有の処理とEngine側の処理を分離する設計を意識する。

方針

3Dアクションゲームを新しく作る。

このゲームでは、ゲームロジックだけを実装するのではなく、Window、Input、Physics、Rendering、Time、Loggingなど、独自Engineの基盤となる仕組みもゲーム内で実装していく。

想定している構成

現時点では、次のような構成をベースに考えている。

classDiagram

class main{
-main()
}
main*--Application

class Application{
	-bool isRunning
	+Run()
	-GameLoop()
}

class Engine{
+Initialize()
+Shutdown()
+Input():InputSystem&
+Physics():PhysicsSystem&
+Renderer():RenderSystem&
+Time():TimeSystem&
+Window():WindowSystem&
+Logger():LogSystem&
}
Application*--Engine

class InputSystem{
+Update()
}
Engine*--InputSystem
Application..>InputSystem

class PhysicsSystem{
+Step(double deltaTimeSeconds)
}
Engine*--PhysicsSystem
Application..>PhysicsSystem

class GameLogic{
+FrameUpdate()
+BeforePhysicsUpdate()
+AfterPhysicsUpdate()
}
Application*--GameLogic

class RenderSystem{
+Render()
}
Engine*--RenderSystem
Application..>RenderSystem

class TimeSystem{
+Update()
}
Engine*--TimeSystem
Application..>TimeSystem

class WindowSystem{
+Update()
}
Engine*--WindowSystem
Application..>WindowSystem

class LogSystem{
}
Engine*--LogSystem
Application..>LogSystem

Applicationがゲーム全体の進行を担当し、Engineが各Systemを保持する。ゲーム固有の処理はGameLogic側に置き、Engine側のSystemと分離する構成を想定している。

この構成は出発点であって、完成形ではない。

実際に3Dアクションゲームを作りながら、責務や依存関係に問題があれば見直していく。

次の作業

次は、最初に作る3Dアクションゲームの規模と基本仕様を決める。

1本のゲームとして完成できることと、VeEngineの基盤となるSystemを実際のゲーム内で利用できることを重視して進めていく。