如何使用 Xcode 精灵套件场景编辑器将实体添加到精灵套件场景?



根据实体和组件的精灵工具包文档

当您在 Xcode SpriteKit 场景

编辑器中将实体(及其组件(添加到场景中时,Xcode 会自动将这些实体与 SpriteKit 场景内容一起存档。

这意味着您可以使用场景编辑器添加实体,但我找不到任何方法。我可以使用节点组件检查器添加组件,但不能添加实体。这是怎么做到的?

您的实体不会添加到 SpriteKit 场景中 - 它们被添加到抽象的 GKSceene 中。

当你使用SpriteKit编辑器时,你可以把你的节点看作是你的实体;比如说,如果你向一个精灵添加一个组件,然后加载GKScene,你将拥有一个包含两个组件的实体:你添加到精灵的组件,以及一个指向节点的GKSKNodeComponent。

精灵套件场景编辑器允许您做的是,通过自动创建代表 SKScene 节点的实体,从 GKScene(它对 SpriteKit 场景或其结构没有特别了解(和 SpriteKit 场景进行很好的映射,并为您提供一种方法将组件附加到与 SKSceene 中的姊妹节点关联的实体, 这样您就不必以编程方式执行此操作。

当然,您可以添加自己的抽象实体,并将组件附加到它们,而不是 SpriteKit 场景编辑器提供的组件。 但目前,您必须在场景编辑器之外以编程方式执行此操作,因为场景编辑器没有与节点无关的实体的概念。 (但是,我怀疑您会发现您可以使用空的SKNode作为这些类型组件的容器,并且管理起来要容易得多,开销很小。 换句话说,我认为与能够在 SpriteKit 场景编辑器中将它们与其他所有内容一起使用相比,在代码中手动管理这些实体和组件不会获得太大价值。

在场景编辑器中将组件添加到SKNode时,将自动创建实体并将其添加到SKScene中的实体数组中:

  1. 创建GKComponent的子类。
  2. 打开场景编辑器(单击您的 GameScene.sks(。
  3. 选择场景中的某个项目(或从库中添加一个项目(。
  4. 打开组件检查器 (opt-cmd-7( 并单击加号 (+( 以 选择您的GKComponent子类。

可以看到通过将以下代码片段添加到场景的update(_:)方法来创建实体。该代码段访问每个实体,搜索组件以查找GKSKNodeComponent(这是在将组件添加到SKNode时由场景编辑器添加的(,然后访问其节点(场景中添加了组件的项目(:

for entity in self.entities {
if let node = entity.component(ofType: GKSKNodeComponent.self)?.node {
print("node: (node)")
}
}

自 iOS 13 以来,出现了一个错误,即从GKScene加载rootNode时会出现问题,因此 GameplayKit 项目和上述技术将不起作用......除非您将以下内容添加到自定义GKComponent子类中:

override class var supportsSecureCoding: Bool {
return true
}

最新更新