3Dアクションゲームの中でVeEngineの基盤を作る
3Dアクションゲームと、その中で作るEngineの基本構成を考える。
背景
ゲーム完成後に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を実際のゲーム内で利用できることを重視して進めていく。