Skip to content

Object ​

GameObject ​

モジュール:Object.GameObject、名前空間:object。ゲーム内オブジェクトの抽象基底です。

公開関数引数・戻り値・役割
GameObject() / virtual ~GameObject()生成・破棄。ComponentManagerを管理
void Init()引数なし。派生側で必須実装
void Update() / void LateUpdate()通常更新/衝突処理後の更新。既定は空
void Draw()描画。派生側で必須実装
void UpdateComponents() / void DrawComponents()登録Componentを更新/描画
uint32_t NowState() const状態のビット値を返す
PropVector2<float> AccessPos() / AccessVel()座標/移動量への参照を包んだアクセサーを返す
ObjectTag MyObjectTag() constタグを返す。派生側で必須実装
void SetColliderManager(ColliderManager* mgr)非所有の所属管理ポインタを設定。通常ObjectManagerが呼ぶ
void OnAttach()所属直後の処理。既定は空
void GetReferenceObject(std::function<std::vector<std::shared_ptr<GameObject>>(uint32_t)> referenceObj)タグ検索関数を受け取るフック。既定は空

派生側はprotectedのm_pos、m_velocity、m_state、m_compMgr、ColMgr()を利用できます。ColMgr()は未所属なら有効ではありません。AccessPos()の戻り値も元オブジェクトより長く保持しないでください。

ObjectManager ​

モジュール:Object.ObjectManager。シーン内のオブジェクトとコライダーを管理します。

公開関数引数・戻り値・役割
AddObject(GameObject* object, Args&&... args)void。管理するオブジェクトを受け取る。通常はnewしたポインタを渡す
RemoveObject(GameObject* object)void。一致する登録を除去。外部共有所有があれば即破棄とは限らない
InitBeforeUpdate()void。参照取得と各Initを実行
Update()void。Component→Object→衝突→LateUpdate→カメラ→追加削除
RefreshObjects()void。DEAD状態を除去し、追加予約を反映
GetObjForTag(uint32_t tag)vector<shared_ptr<GameObject>>。該当群のコピー、未登録なら空
Draw()void。ComponentとObjectを描画

AddObjectは所有権を引き受けます。更新中は生ポインタの一時配列へ保存するため、追加の独自deleter等を前提にする使い方は避けます。RemoveObjectは即時の配列変更なので更新中の削除には使わず、派生クラスでm_state = MainState::DEADとし更新後の除去を利用します。

タグ・状態・サンプル ​

ObjectTagはNONE/MAP/PLAYER/ENEMY/GOALです。更新対象はOBJECT_TAGSを巡回します。新規タグは列挙値だけ増やしても更新対象に入りません。

Playerは入力・ジャンプ・矩形衝突・アニメーション・歩行音の例、Enemyは接触で体力を減らす静的な円、MapはJSON/CSVとタイルの例、Goalは接触でクリアフラグを立てる例です。Mapのコンストラクターは有効なLoadingContextを必要とします。

使用例 ​

SceneBaseの派生クラスのコンストラクター内で、登録済みの教材用モジュールを使います。

cpp
m_objManager->AddObject(new object::LessonBox);

続くInit()でm_objManager->InitBeforeUpdate()を呼びます。完全なクラス例は01 GameObject、寿命の制約は所有権、宣言は全モジュールを参照してください。

コード確認基準:08f9fa53 · C++実機検証は別途実施