物理世界
在第十一節(jié)中,我們看到,給物體了一個動態(tài)的身體,的身體,物體就自動的掉落下來,大家有沒有思考過為什么,因為在我們創(chuàng)建的場景中可能存在著一種力,這個力很有可能是重力。我沒有深究它,今天我們就詳細的了解一下饮焦,這個物理世界到底是什啥玩意!
先從類(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);
輸出結(jié)果:
x:0.000000
y:-9.800000
z:0.000000
我們發(fā)現(xiàn)我們創(chuàng)建創(chuàng)景的時候,系統(tǒng)已經(jīng)給我添加了一個向下的重力,如果把重力加速度設置為(0,0,0)所有物體都會失重。
模擬運行的速度(默認值為1)
@property(nonatomic) CGFloat speed;
用法:
如果你想要增加或者減小模擬運行的速度,可以調(diào)節(jié)這個屬性,但是會影響模擬的物理世界的真實性氏堤。
執(zhí)行時間的步伐值(默認為1/60s 即60HZ)
@property(nonatomic) NSTimeInterval timeStep;
碰撞檢測代理
@property(atomic, assign, nullable) id <SCNPhysicsContactDelegate> contactDelegate;
友情提示
物體的碰撞檢測,內(nèi)容比較多,我們在中級篇會詳細講解
增加和刪除行為
- (void)addBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeAllBehaviors;
友情提示
這個暫時不講解,因為我們還沒有講物體的行為的內(nèi)容,后面專門來講搏明。
下面是一些測試的方法
- (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;
這些測試方法,后面用到會講,莫著急鼠锈。
立即執(zhí)行碰撞檢測
- (void)updateCollisionPairs
提示
默認情況下,執(zhí)行碰撞檢測是在下一次模擬運行的時候,如果此次運行有碰撞,想要立刻執(zhí)行碰撞檢測,則調(diào)用這個方法星著。
物理世界對象主要干那些事情:
1. 控制全局屬性 (比如重力和其他類型的力 還有它的速度)
2. 間接修改或者注冊場景中的物理身體的連接等行為
3. 管理物理身體的碰撞行為
4. 執(zhí)行特殊的接觸測試(如發(fā)射,掃射)
本節(jié)內(nèi)容先了解一下,后面我們有詳解的章節(jié),對各個方法進行講解!