Skip to main content

[ChaEngine] 基本思想

ChaEngineは C++ で DirectX 11 を学び、その知識を活かしつつ
ゲームを完成させることを最大の目標にして作られています。

ゲームの完成というゴールを第一においているため、
一部の機能は一般的に言われるプログラミングのアンチパターンを意図的に採用しています。

その象徴的な機能の一つが、強力な参照機能であるGod Get(Get関数)です。
クラスGameObjectBaseObjectBaseを継承したクラス内では、Get関数を使うことができます。
Get関数を呼び出すだけでManagerクラス、Systemクラス、SystemObject、他GameObjectなObjectなど
あらゆるオブジェクトへ即座にアクセスします。
これは、依存関係を複雑にするというデメリットがあります。
しかしその代わりに、参照したいオブジェクトを直感的に書き表すことができ、
参照先のクラスの所属(Manager/System/GameObject)SystemObject/Object)を気にしなくて良い状態、
ゲームプログラマーとしてこれ以上に無い快適な書き心地を実現します。

他のエンジン・ベース・ライブラリとの違い

C++でDirectX 11 を学んでいる方はきっと以下の名前を聞いたことがあり、
学習していると思います。

  • DxLib
  • Unity
  • Unreal Engine
  • 提供されたエンジン (DxLibを使ったエンジン)
  • 学校のゲームベース (DirectX 11のエンジン)

ここでは違いとChaEngineである理由について説明します。

DxLibは、DirectXでの描画関連を扱いやすくしていますが、
シーンやゲームオブジェクトの処理を自分で書く必要があります。
また、C言語で書けるよう設計されているため、C++言語の機能をうまく行かせない部分があります。
※主にマクロ多用やリソースのハンドル部分
ある程度機能が整っている分、今まで学んだ知識を活かせる自由度と、
ブラックボックスの部分が多く、今まで学んだことを活かしづらいです。

Unityはゲームエンジンとして広く認知されていて、
使う言語もC#と学習コストも低く、誰でもゲームを作りやすい環境です。
しかし、私たちが学んできたC++の知識を活かすことは難しいです。

🚧このページは書き途中です。🚧

Unreal Engineは高品質な3Dゲームを作りやすく、
C++言語を使うことができます。開発に必要な機能は統一されているため、

ゲームオブジェクトの位置付け

🚧このページは書き途中です。🚧

TODO: ゲームオブジェクトはシーンに所属します。ゲームオブジェクトはコンポーネントを持ちます。