【问题标题】:Subclassing SCNNode子类化 SCNNode
【发布时间】:2015-06-19 10:44:24
【问题描述】:

我正在导入一个简单的 dae 文件。我希望某些节点成为 SCNNode - MySCNNode 的子类。

 MySCNNode *node = [scnView.scene.rootNode childNodeWithName:@"Box1" recursively:YES];
 //additional initialization goes here 

也尝试转换为 (MySCNNode *)。
但这行不通。 “节点”仍然是一个 SCNNode。为什么?

我需要向 SCNNode 添加一些属性和方法。所以我将 SCNNode 子类化。我希望场景中的节点(从 dae 导入)具有属性和行为。场景中的节点始终是 SCNNode。我希望它属于 MySCNNode 类。

【问题讨论】:

  • 这不是投射的工作方式。您没有修改被投射的对象。
  • 另外,子类化 SCNNode 不是一种常见的模式。你想做什么?
  • 我需要给 SCNNode 添加一些属性和方法。所以我将 SCNNode 子类化。我希望场景中的节点具有属性和行为。场景中的节点始终是 SCNNode。我希望它属于 MySCNNode 类。
  • 为什么子类化 SCNNode 不是一种常见的模式?它在哪里说不是一个好习惯?我可以在哪里阅读更多相关信息?

标签: scenekit


【解决方案1】:

我知道需要一个子类。我明白为什么它是非典型的。就我而言,我正在制作 RTS 并创建它的“任务编辑器”,因此我可以拍摄 1 个场景,其中填充了在搅拌机中创建的各种对象,并在编辑器中构建自定义场景。所以我需要知道瓷砖什么时候可以建造、可以通过(以及在哪个级别)等。 这可能并不完美,但应该可以:

+(instancetype)mySCNNodeWithNode:(SCNNode*)node{

SCNVector3 min,max;
[node getBoundingBoxMin:&min max:&max];
MySCNNode *newNode = [MySCNNode node];
newNode.position = node.position;
newNode.rotation = node.rotation;
newNode.transform = node.transform;
[node setBoundingBoxMin:&min max:&max];
newNode.geometry = [node.geometry copy];
SCNMaterial * material = [node.geometry.firstMaterial copy];
newNode.geometry.firstMaterial = material;

return newNode;

}

【讨论】:

  • 您好,我也在尝试制作类似 RTS 的 3D 游戏,但我遇到了新的和新的性能问题 - SceneKit 是否足以支持 RTS?
猜你喜欢
  • 2017-10-03
  • 2023-03-17
  • 2018-10-14
  • 2017-05-16
  • 1970-01-01
  • 2017-06-28
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多