SceneKit_入門01_旋轉(zhuǎn)人物
SceneKit_入門02_如何創(chuàng)建工程
SceneKit_入門03_節(jié)點(diǎn)
SceneKit_入門04_燈光
SceneKit_入門05_照相機(jī)
SceneKit_入門06_行為動(dòng)畫
SceneKit_入門07_幾何體
SceneKit_入門08_材質(zhì)
SceneKit_入門09_物理身體
SceneKit_入門10_物理世界
SceneKit_入門11_粒子系統(tǒng)
SceneKit_入門12_物理行為
SceneKit_入門13_骨骼動(dòng)畫
SceneKit_中級01_模型之間的過渡動(dòng)畫
SceneKit_中級02_SCNView 詳細(xì)講解
SceneKit_中級03_切換照相機(jī)視角
SceneKit_中級04_約束的使用
SceneKit_中級05_力的使用
SceneKit_中級06_場景的切換
SceneKit_中級07_動(dòng)態(tài)修改屬性
SceneKit_中級08_陰影詳解
SceneKit_中級09_碰撞檢測
SceneKit_中級10_濾鏡效果制作
SceneKit_中級11_動(dòng)畫事件
SceneKit_高級01_GLSL
SceneKit_高級02_粒子系統(tǒng)深入研究
SceneKit_高級03_自定義力
SceneKit_高級04_自定義場景過渡效果
SceneKit_高級05 檢測手勢點(diǎn)擊到節(jié)點(diǎn)
SceneKit_高級06_加載頂點(diǎn)、紋理、法線坐標(biāo)
SceneKit_高級07_SCNProgram用法探究
SceneKit_高級08_天空盒子制作
SceneKit_高級09_霧效果
SceneKit_大神01_掉落的文字
SceneKit_大神02_彈幕來襲
SceneKit_大神03_navigationbar上的3D文字
在SceneKit_09_物理身體中,我們看到,給物體了一個(gè)動(dòng)態(tài)的身體,的身體,物體就自動(dòng)的掉落下來,大家有沒有思考過為什么,因?yàn)樵谖覀儎?chuàng)建的場景中可能存在著一種力,這個(gè)力很有可能是重力。我沒有深究它,今天我們就詳細(xì)的了解一下,這個(gè)物理世界到底是什啥玩意!
先從類(SCNPhysicsWorld)的屬性開始探究
- 重力加速度: 可以設(shè)置方向和大小
@property(nonatomic) SCNVector3 gravity;
我們試著日志輸出一下場景中的這個(gè)值
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)景的時(shí)候,系統(tǒng)已經(jīng)給我添加了一個(gè)向下的重力,如果把重力加速度設(shè)置為(0,0,0)所有物體都會失重。
- 模擬運(yùn)行的速度(默認(rèn)值為1)
@property(nonatomic) CGFloat speed;
用法:
如果你想要增加或者減小模擬運(yùn)行的速度,可以調(diào)節(jié)這個(gè)屬性,但是會影響模擬的物理世界的真實(shí)性。
- 執(zhí)行時(shí)間的步伐值(默認(rèn)為1/60s 即60HZ)
@property(nonatomic) NSTimeInterval timeStep;
- 碰撞檢測代理
@property(atomic, assign, nullable) id <SCNPhysicsContactDelegate> contactDelegate;
友情提示
物體的碰撞檢測,內(nèi)容比較多,我們在中級篇會詳細(xì)講解
- 增加和刪除行為
- (void)addBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeBehavior:(SCNPhysicsBehavior *)behavior;
- (void)removeAllBehaviors;
友情提示
這個(gè)暫時(shí)不講解,因?yàn)槲覀冞€沒有講物體的行為的內(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
提示
默認(rèn)情況下,執(zhí)行碰撞檢測是在下一次模擬運(yùn)行的時(shí)候,如果此次運(yùn)行有碰撞,想要立刻執(zhí)行碰撞檢測,則調(diào)用這個(gè)方法。
物理世界對象主要干那些事情:
- 控制全局屬性 (比如重力和其他類型的力 還有它的速度)
- 間接修改或者注冊場景中的物理身體的連接等行為
- 管理物理身體的碰撞行為
- 執(zhí)行特殊的接觸測試(如發(fā)射,掃射)
代碼庫,聽說經(jīng)常給人點(diǎn)贊都當(dāng)老板了!