热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SceneKit不会缩放动态体

如何解决《SceneKit不会缩放动态体》经验,为你挑选了1个好方法。

我有一个充满活力的球体.我想动画这个球体的比例,使它的大小增加:

1
2
3
4
let sphere = SCNNode(geometry: SCNSphere(radius: 1))
scene.rootNode.addChildNode(sphere)
sphere.physicsBody = SCNPhysicsBody.dynamicBody()
sphere.runAction(SCNAction.scaleTo(10, duration: 1))

但是,这似乎不起作用.球体由于重力而下落,但尺寸保持不变.如果我注释掉赋予球体物理体的线条,那么缩放动画就像它应该的那样.

甚至在没有动画的情况下观察到这种奇怪现象 简单地直接改变球体的比例是行不通的:

1
2
3
4
let sphere = SCNNode(geometry: SCNSphere(radius: 1))
scene.rootNode.addChildNode(sphere)
sphere.physicsBody = SCNPhysicsBody.dynamicBody()
sphere.scale = SCNVector3(x: 10, y: 10, z: 10)

球体下降但半径为1.除非在添加物理体之前对球体进行缩放.在这种情况下,球体开始缩放到10并下降,保持其半径为10.

有趣的是,在动画假定运行后通过打印出球体的比例进行进一步检查后,观察到比例确实发生了变化,除非物理体被移除,否则它是不可见的:

1
2
3
4
5
6
7
let sphere = SCNNode(geometry: SCNSphere(radius: 1))
scene.rootNode.addChildNode(sphere)
sphere.physicsBody = SCNPhysicsBody.dynamicBody()
sphere.runAction(SCNAction.scaleTo(10, duration: 1), completionHandler: {() in
    println(sphere.scale.x)
    sphere.physicsBody = nil
})

为什么不可能改变动态体的规模?(请注意,静态和运动体可以很好地扩展.)是否有可能以某种方式实现这一点?



1> rickster..:

当一个人改变大小时,你不仅需要一个"缩放速度"与其他对象进行交互,你需要一个"缩放力".在成长过程中,它应该有多强烈地推动它碰撞的东西?如果它处于一种取决于其质量的情况,如跷跷板上的平衡,会发生什么?

游戏引擎已经是现实世界物理学的松散近似,因此要求他们自己找出Ant-Man物理学有点紧张.如果他们能做到这一点,他们可能也会开始制造杀手机器人,这有点毁了你的一天.:)

无论如何,根据您希望扩展球体如何影响事物,您有几个选择.一种是间隔删除并重新创建物理体:

1
2
3
4
5
6
7
let duration = 5.0
node.runAction(.customActionWithDuration(duration, actionBlock: { node, progress in
    let scale = 1.0 + progress / CGFloat(duration)
    node.physicsBody = nil
    node.scale = SCNVector3(x: scale, y: scale, z: scale)
    node.physicsBody = .dynamicBody()
}))

这样做每一帧,这可能是昂贵的 - 你可能想progress在那里抛出一些门控,所以它不常发生.(并且根据球体变化大小需要发生的其他效果,你可以在重新创建物理体时设置像质量一样的东西.)

另一个选择可能是看SCNPhysicsField.使用径向重力场来制作一个区域,将一切都推出其影响区域,然后设置其参数的动画以随时间改变大小和强度.


推荐阅读
author-avatar
倔强的追求
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有