[ChaEngine] 基本思想
ChaEngineは C++ で DirectX 11 を学び、その知識を活かしつつ
ゲームを完成させることを最大の目標にして作られています。
ゲームの完成というゴールを第一においているため、
一部の機能は一般的に言われるプログラミングのアンチパターンを意図的に採用しています。
その象徴的な機能の一つが、強力な参照機能であるGod Get(Get関数)です。
クラスを継承したクラス内では、GameObjectBaseObjectBaseGet関数を使うことができます。
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: ゲームオブジェクトはシーンに所属します。ゲームオブジェクトはコンポーネントを持ちます。