本文主要是介绍SceneKit_入门10_物理世界,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
SceneKit_入门01_旋转人物SceneKit_入门02_如何创建工程SceneKit_入门03_节点SceneKit_入门04_灯光SceneKit_入门05_照相机SceneKit_入门06_行为动画SceneKit_入门07_几何体SceneKit_入门08_材质SceneKit_入门09_物理身体SceneKit_入门10_物理世界SceneKit_入门11_粒子系统SceneKit_入门12_物理行为SceneKit_入门13_骨骼动画SceneKit_中级01_模型之间的过渡动画SceneKit_中级02_SCNView 详细讲解SceneKit_中级03_切换照相机视角SceneKit_中级04_约束的使用SceneKit_中级05_力的使用SceneKit_中级06_场景的切换SceneKit_中级07_动态修改属性SceneKit_中级08_阴影详解SceneKit_中级09_碰撞检测SceneKit_中级10_滤镜效果制作SceneKit_中级11_动画事件SceneKit_高级01_GLSLSceneKit_高级02_粒子系统深入研究SceneKit_高级03_自定义力SceneKit_高级04_自定义场景过渡效果SceneKit_高级05 检测手势点击到节点SceneKit_高级06_加载顶点、纹理、法线坐标SceneKit_高级07_SCNProgram用法探究SceneKit_高级08_天空盒子制作SceneKit_高级09_雾效果SceneKit_大神01_掉落的文字SceneKit_大神02_弹幕来袭SceneKit_大神03_navigationbar上的3D文字
在SceneKit_09_物理身体中,我们看到,给物体了一个动态的身体,的身体,物体就自动的掉落下来,大家有没有思考过为什么,因为在我们创建的场景中可能存在着一种力,这个力很有可能是重力。我没有深究它,今天我们就详细的了解一下,这个物理世界到底是什啥玩意!
先从类(SCNPhysicsWorld)的属性开始探究
- 重力加速度: 可以设置方向和大小
@property(nonatomic) SCNVector3 gravity;
我们试着日志输出一下场景中的这个值
NSLog(@"x:%f",scnView.scene.physicsWorld.gravity.x);NSLog(@"y:%f",scnView.scene.physicsWorld.gravity.y);NSLog(@"z:%f",scnView.scene.physicsWorld.gravity.z);
输出结果:
x:0.000000
y:-9.800000
z:0.000000
我们发现我们创建创景的时候,系统已经给我添加了一个向下的重力,如果把重力加速度设置为(0,0,0)所有物体都会失重。
- 模拟运行的速度(默认值为1)
@property(nonatomic) CGFloat speed;
用法:
如果你想要增加或者减小模拟运行的速度,可以调节这个属性,但是会影响模拟的物理世界的真实性。
- 执行时间的步伐值(默认为1/60s 即60HZ)
@property(nonatomic) NSTimeInterval timeStep;
- 碰撞检测代理
@property(atomic, assign, nullable) id <SCNPhysicsContactDelegate> contactDelegate;
友情提示
物体的碰撞检测,内容比较多,我们在中级篇会详细讲解
- 增加和删除行为
- (void)addBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeAllBehaviors;
友情提示
这个暂时不讲解,因为我们还没有讲物体的行为的内容,后面专门来讲。
- 下面是一些测试的方法
- (NSArray<SCNPhysicsContact *> *)contactTestBetweenBody:(SCNPhysicsBody *)bodyA andBody:(SCNPhysicsBody *)bodyB options:(nullable NSDictionary<NSString *, id> *)options;
- (NSArray<SCNPhysicsContact *> *)contactTestWithBody:(SCNPhysicsBody *)body options:(nullable NSDictionary<NSString *, id> *)options;
- (NSArray<SCNPhysicsContact *> *)convexSweepTestWithShape:(SCNPhysicsShape *)shape fromTransform:(SCNMatrix4)from toTransform:(SCNMatrix4)to options:(nullable NSDictionary<NSString *, id> *)options;
这些测试方法,后面用到会讲,莫着急。
- 立即执行碰撞检测
- (void)updateCollisionPairs
提示
默认情况下,执行碰撞检测是在下一次模拟运行的时候,如果此次运行有碰撞,想要立刻执行碰撞检测,则调用这个方法。
物理世界对象主要干那些事情:
- 控制全局属性 (比如重力和其他类型的力 还有它的速度)
- 间接修改或者注册场景中的物理身体的连接等行为
- 管理物理身体的碰撞行为
- 执行特殊的接触测试(如发射,扫射)
代码库,听说经常给人点赞都当老板了!
这篇关于SceneKit_入门10_物理世界的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!