ID規則 - actnwit/RhodoniteTS GitHub Wiki
Rhodoniteでは殆どのオブジェクトにIDが割り当てられており、IDで物事を識別・管理できるようになっています。
IDの種類
(以下の説明で出てくる「XXX」は同じ要素を意味する)
TypeID(XXX_TID)
- XXXについての種類を表すID。番号空間はXXXの中で閉じており、またその中でユニーク。
- 実例としては、
ComponentTID
UniqueID(XXX_UID)
- 「XXX」の実体(複数生成可能なインスタンスで生死を問わない)を識別するためのID。
- 一度でも生成された実体にはすべてUniqueIDが割り振られ、実体の生死にかかわらず、割り当てが変更されることはない。
- 実例としては、
EntityUID
やObjectUID
ScopedID(XXX_SID)
- 基本的にユニークなIDだが、番号空間は対応するTypedIDの中で閉じていてその中ではユニークな識別番号。つまり、異なるTypedID範囲同士では番号が重複する場合がある。
- 実例としては、
ComponentSID
他規則
- 同じ「XXX」であっても、UniqueID、ScopedID, TypeIDで互いに番号空間は別である。
- 全ての種類のIDについて、採番は0起算である。負の値(特に運用上-1)は「無効または指定なし」と解釈する。
代表的なID
EntityUID
Entityのインスタンスに割り当てられるUniqueIDです。特定のEntityを取り出したり指定したりするときによく使います。
const entityRepository = Rn.EntityRepository.getInstance();
const meshEntity = entityRepository.createEntity([Rn.TransformComponent, Rn.SceneGraphComponent]);
console.log(meshEntity.entityUID)
ObjectUID
RnObjectを継承しているクラスのインスタンスに割り当てられるUniqueIDです。EntityはRnObjectでもあるので、EntityはentityUIDとobjectUIDの両方を持っています。
const rnObject = new RnObject();
console.log(rnObject.objectUID);
const entityRepository = Rn.EntityRepository.getInstance();
const entity = entityRepository.createEntity([]);
console.log(entity.objectUID);
ComponentTID
コンポーネントの種類を表すTypeIDです。コンパイル時点で値が確定している静的なIDでもあります。 代表的なComponentTIDは Rhodonite内のこのファイルに記述されています。
ComponentSID
コンポーネントのインスタンスのScopedIDです。
const entityRepository = Rn.EntityRepository.getInstance();
const meshEntity = entityRepository.createEntity([Rn.TransformComponent, Rn.SceneGraphComponent]);
const transformComponent = meshEntity.getTransforom();
console.log(transfomrComponent.componentSID);