auto model = MeshModel::load(u"model.gltf");
auto obj1 = StaticMesh::create(model);
auto obj2 = SkinnedMesh::create(model);
現行↓
auto model1 = StaticMeshModel::load(u"model.gltf");
auto model2 = SkinnedMeshModel::load(u"model.gltf");
auto obj1 = StaticMesh::create(model1);
auto obj2 = SkinnedMesh::create(model2);
動的データの操作
WorldObject(Component) からアクセスする。
auto obj2 = SkinnedMesh::create(model);
// フォーマルな方法
SkinnedMeshBone* bone = obj2->skinnedMeshComponent()->findBone(u"腕");
bone->setRotation(...);
// ユーティリティ
SkinnedMeshBone* bone = obj2->findBone(u"腕");
bone->setRotation(...);
Proposal
Instantiate
WorldObject を作るときは次のようにできるようにする。
現行↓
動的データの操作
WorldObject(Component) からアクセスする。
SkinnedMeshBone は Transform の派生とし、Editor 上からアクセスできるようにする。 (Unity と同じ仕組み)
Motivation
データの分離
MeshModel(StaticMeshModel と SkinnedMeshModel) は静的なデータと動的なデータが統合されていて、リソースの共有が難しい。 これを分離したい。
静的なデータは次の通り。
動的なデータは次の通り。
継承関係の廃止
SkinnedMeshModel は StaticMeshModel の派生クラスとなっているが、 例えば .gltf をインポートしただけではどちらのインスタンスを作るべきか判断できないことがある。 そのため MeshModel クラスに統合し、Bone の有無などはコンポーネント志向の考え方で持たせたい。
Note
Model:Instance の対応関係は次のようなイメージ
*: ユーザープログラムに積極的に公開することになるクラス。