-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Entity hierarchy #55
Comments
仕様子 Entity 追加時に Graphic の有無をチェックするGraphic ひもづけ時に、親の有無をチェックする自分に親がいたら、親に Graphic があるかをチェックし、親がグラフィックを持っていたら Graphic ひもづけ時に、子が Graphic を持っているかチェックするGraphic を持っていたら、自分の Graphic の子ノードとして 子の取り合いをしない(親が複数存在する状態をつくらない & 同じ子を持たない)Graphic と紐づいていないときもこのチェックは必要になります。 Graphic と紐づけることを必須とする場合は、SKNode が自動的に検知して実行時エラーになるので、特に注意する必要はないです。 親がデスポーンしたら子もデスポーンする
注意点として、先に SKNode が削除されてしまう場合、unown let の参照先が消えることで despawn 時の自動 remove from parent 実行機能がエラーになる可能性があることです。SKNode 削除前に entity との繋がりをなくす何らかの仕組みを実装したいところです。 |
let child = commands.spawn().id()
commands.spawn()
.addChild(child) |
struct Child: Component {
var _parent: Entity
var parent: Entity {
self._parent
}
}
struct Parent: Component {
var _children: Set<Entity>
var children: Set<Entity> {
self._children
}
} |
Graphic が entity に紐づいていない場合はクラッシュする、という実装も考えられます。これは、entity hierarchy の機能が graphic の座標系に関するものだからです。 上記の実装の場合、 また、一度 entity に紐づけられた SKNode, SCNNode を取り外せないようにするべきかもしれません。こうすることで、entity hierarchy 内の graphic が勝手に ECS 管理外になるのを観測する手間が省けます。 |
Graphic は spawn 後の entity に割り当てられ、基本的に Scene resource で指定された Scene に配置されます。したがって、Add child command はすでに scene を親に持った SKNode を操作することになります。SKNode の removeFromParent を実行すればエラーなしで階層に追加できますが、「親を複数持つ entity の禁止」ができなくなります。
|
Entity hierarchy と node hierarchy の連動内部コンポーネントとして 内部親 entity を nil 許容型で保持します 以下のような System を作成します。
Set graphic 内の addChild 処理はすべて削除し、
追記 上記のシステムの中で、コンポーネント |
以下の Component を追加します。
Entity 間で親子関係が作られた際に、Child と Parent がそれぞれ子と親に追加されます。Child は親の Entity が含まれています。Parent はこの Entity の配列が含まれます。
The text was updated successfully, but these errors were encountered: