SCNPhysicsBody學(xué)習(xí)

創(chuàng)建SCNPhysicsBody

+ (instancetype)staticBody;

staticBody是一個(gè)不受外力或碰撞影響的物體沈堡,不能移動(dòng)覆旭。比如地板策州、墻壁等埠褪。
必須把它附加到SCNNodephysicsBody屬性上浓利。附加到節(jié)點(diǎn)上后,會(huì)自動(dòng)為節(jié)點(diǎn)創(chuàng)建物理形狀钞速。
對(duì)于包含自定義幾何的節(jié)點(diǎn)贷掖,SceneKit出于對(duì)準(zhǔn)確性和性能的折衷,創(chuàng)建的只是一個(gè)近似的物理形狀渴语∑煌基于基本幾何類(SCNBox, SCNSphere, SCNPyramid, SCNCone, SCNCylinder, 或者 SCNCapsule)的節(jié)點(diǎn)體驗(yàn)效果最好。
如果想手動(dòng)創(chuàng)建物理形狀驾凶,使用SCNPhysicsShape類方法牙甫。

+ (instancetype)dynamicBody;

dynamicBody是一個(gè)可以受力和碰撞影響的物體。
其余同staticBody

+ (instancetype)kinematicBody;

kinematicBody是一個(gè)不受外力或碰撞影響的物理實(shí)體调违,但它會(huì)在移動(dòng)時(shí)造成碰撞影響其他物體窟哺。
其余同staticBody

舉一個(gè)簡(jiǎn)單的例子:桌球游戲中,球桌是staticBody技肩,球是dynamicBody且轨,球桿是kinematicBody

+ (instancetype)bodyWithType:(SCNPhysicsBodyType)type shape:(nullable SCNPhysicsShape *)shape;

根據(jù)指定類型和形狀創(chuàng)建一個(gè)物理實(shí)體。
如果將nil傳遞給shape旋奢,在將它附加到節(jié)點(diǎn)上時(shí)泳挥,會(huì)自動(dòng)根據(jù)節(jié)點(diǎn)創(chuàng)建物理性狀。
其余同staticBody

定義力如何影響物體

@property(nonatomic, retain) SCNPhysicsShape *physicsShape;

在碰撞檢測(cè)中物體的形狀至朗。
在碰撞檢測(cè)時(shí)往往沒(méi)必要用真實(shí)的幾何形狀屉符,用簡(jiǎn)單的形狀可以得到更好的性能。通常我們把physicsShape設(shè)置為一個(gè)簡(jiǎn)單的形狀爽丹,把真實(shí)的幾何形狀放里面筑煮。
當(dāng)然對(duì)于精準(zhǔn)的碰撞測(cè)試,我們需要使用更詳細(xì)的幾何圖形粤蝎。
創(chuàng)建物理圖形的細(xì)節(jié)參見(jiàn)SCNPhysicsShape類真仲。

@property(nonatomic) SCNPhysicsBodyType type;

typedef enum SCNPhysicsBodyType : NSInteger {
    SCNPhysicsBodyTypeStatic,
    SCNPhysicsBodyTypeDynamic,
    SCNPhysicsBodyTypeKinematic
} SCNPhysicsBodyType;

物體的類型,枚舉類型初澎,就是上文中的staticBody秸应、dynamicBodykinematicBody碑宴。

@property(nonatomic) SCNVector3 velocityFactor;

移動(dòng)因子
例如软啼,可以通過(guò)將其速度因子設(shè)置為{1.0,1.0,0.0},從而使物體只能在在兩個(gè)維度中移動(dòng)延柠。

@property(nonatomic) SCNVector3 angularVelocityFactor;

旋轉(zhuǎn)因子
例如祸挪,可以通過(guò)將其旋轉(zhuǎn)因子設(shè)置為{0.0,1.0,0.0},從而使物體只能在一個(gè)軸上旋轉(zhuǎn)贞间。

@property(nonatomic, getter=isAffectedByGravity) BOOL affectedByGravity;

是否受重力影響
這個(gè)屬性默認(rèn)是YES

定義物體的屬性

@property(nonatomic) CGFloat mass;

質(zhì)量贿条,以千克為單位。
質(zhì)量會(huì)影響物體對(duì)力的反應(yīng)增热。dynamicBody的默認(rèn)質(zhì)量是1整以。staticBodykinematicBody的默認(rèn)質(zhì)量為0,但它們不受質(zhì)量影響峻仇。
物理模擬的影響取決于不同物體的相對(duì)質(zhì)量公黑,而不是絕對(duì)值。所以你不需要對(duì)應(yīng)用程序中的物體進(jìn)行實(shí)際測(cè)量摄咆。

@property(nonatomic) CGFloat charge;

電荷凡蚜,以庫(kù)侖為單位。
當(dāng)受到電場(chǎng)或磁場(chǎng)影響時(shí)吭从,帶有正電荷或負(fù)電荷的物體的行為會(huì)不同朝蜘。三種類型的物體的默認(rèn)電荷均為0,即不會(huì)受電場(chǎng)和磁場(chǎng)的影響影锈。
同樣不需要去做實(shí)際測(cè)量芹务。

@property(nonatomic) CGFloat friction;

滑動(dòng)摩擦力。
當(dāng)兩個(gè)物體接觸并滑動(dòng)時(shí)鸭廷,摩擦力決定它們對(duì)運(yùn)動(dòng)的阻力枣抱。如果兩個(gè)物體的摩擦力都是0,它們會(huì)自由地滑動(dòng)辆床。如果都是1佳晶,就不會(huì)滑動(dòng)。默認(rèn)值為0.5讼载。

@property(nonatomic) CGFloat rollingFriction;

滾動(dòng)摩擦力轿秧。
圓型物體在滾動(dòng)時(shí)的阻力。如果是0咨堤,將持續(xù)滾動(dòng)而不減速菇篡,除非另有動(dòng)作。如果是1一喘,將無(wú)法滾動(dòng)驱还。默認(rèn)值為0。

@property(nonatomic) CGFloat restitution;

可以理解成彈性凸克。
決定了物體在碰撞過(guò)程中會(huì)保留多少動(dòng)能议蟆。比如一個(gè)球掉在地面,如果是0萎战,就不會(huì)反彈咐容。如果是1,就會(huì)彈回原處蚂维。如果大于1戳粒,它會(huì)彈得比原來(lái)更高。默認(rèn)值是0.5鸟雏。

@property(nonatomic) CGFloat damping;

移動(dòng)阻尼享郊。
類似空氣摩擦或水摩擦,就是在移動(dòng)中的阻力孝鹊。與其他的力獨(dú)立并共存炊琉。如果是0,表示沒(méi)有阻力又活,不會(huì)造成速度損失苔咪。如果是1,就會(huì)阻止物體移動(dòng)柳骄。默認(rèn)值是0.1团赏。

@property(nonatomic) CGFloat angularDamping;

旋轉(zhuǎn)阻尼。
同上耐薯,影響物體在旋轉(zhuǎn)中的阻力舔清。默認(rèn)值是0.1丝里。

@property(nonatomic) SCNVector3 momentOfInertia;

慣性矩陣。
比如x<y時(shí)体谒,表示物體在x軸上旋轉(zhuǎn)時(shí)的慣性更小杯聚,就能夠更加自由旋轉(zhuǎn)。
默認(rèn)情況下抒痒,SceneKit會(huì)根據(jù)物體的形狀和質(zhì)量自動(dòng)確定慣性矩陣幌绍。如果要自定義,需要設(shè)置usesDefaultMomentOfInertiaNO故响。

@property(nonatomic) BOOL usesDefaultMomentOfInertia;

是否自動(dòng)計(jì)算物體的慣性矩矩形傀广。
YES為自動(dòng)計(jì)算,NO為自定義設(shè)置彩届。

分類

@property(nonatomic) NSUInteger categoryBitMask;

物體的分類伪冰。
每個(gè)分類都是位掩碼的一個(gè)位。我們可以通過(guò)位運(yùn)算給物體設(shè)置一個(gè)或多個(gè)類別樟蠕。
physicsshapecontacttestbitmask一起使用可以定義物體間的相互作用糜值。
dynamicBodykinematicBody的默認(rèn)類別是SCNPhysicsCollisionCategoryDefaultstaticBody的默認(rèn)類別為SCNPhysicsCollisionCategoryStatic

@property(nonatomic) NSUInteger contactTestBitMask;

定義哪些類別的物體與這個(gè)物體接觸時(shí)會(huì)收到通知坯墨。
當(dāng)物體A與物體B接觸時(shí)寂汇,SceneKit會(huì)比較A.contactTestBitMask&&B.categoryBitMask,如果結(jié)果是一個(gè)非零的值捣染,會(huì)創(chuàng)建一個(gè)SCNPhysicsContact對(duì)象骄瓣,我們可以通過(guò)contactDelegate來(lái)處理我們需要自定義的一些操作。通常為了獲得最好的性能耍攘,只需為我們感興趣的交互中的物體設(shè)置contactTestBitMask榕栏。
iOS8或者OS X v10.10的環(huán)境下,當(dāng)且僅當(dāng)碰撞發(fā)生了蕾各,SceneKit才會(huì)觸發(fā)delegate扒磁。iOS9或者OS X v10.11以后的版本,這個(gè)值默認(rèn)是0式曲,且不管是碰撞妨托,還是穿過(guò)彼此,都會(huì)觸發(fā)delegate.

@property(nonatomic) NSUInteger collisionBitMask;

定義哪些分類的物體可以和這個(gè)物體發(fā)生碰撞吝羞。
當(dāng)物體A與物體B接觸時(shí)兰伤,可能會(huì)發(fā)生碰撞。SceneKit會(huì)比較A.collisionBitMask&&B.categoryBitMask钧排。如果結(jié)果是一個(gè)非零值敦腔,那么物體會(huì)發(fā)生碰撞。每個(gè)物體可以單獨(dú)選擇想發(fā)生碰撞的物體恨溜。
默認(rèn)值是SCNPhysicsCollisionCategoryAll符衔,將于所有的類別發(fā)生碰撞找前。

用力

- (void)applyForce:(SCNVector3)direction impulse:(BOOL)impulse;

給物體的質(zhì)心施加一個(gè)力或沖量。
direction:力的大小和方向
impulse:YES判族,施加的是沖量纸厉;NO,施加的是力
物體線性加速度與質(zhì)量成正比五嫂。
impulse參數(shù)決定了這個(gè)方法如何進(jìn)行物理模擬。(復(fù)習(xí)力學(xué)知識(shí))
如果設(shè)置為YES肯尺,會(huì)把direction參數(shù)作為一個(gè)沖量沃缘。單位是牛秒(kgm/s 或 N·s = Huygens Hy),并立即加速物體则吟。比如發(fā)射炮彈等槐臀。
如果設(shè)置為NO,會(huì)把direction參數(shù)作為一個(gè)力氓仲。單位是牛頓(N)水慨,SceneKit會(huì)在每一幀的最后,將所有的力都應(yīng)用到物體上敬扛,從而得到一個(gè)加速度晰洒。
impulse參數(shù)改變了量值的單位,如果是沖量啥箭,將在每一幀上連續(xù)產(chǎn)生一定的加速度谍珊,如果緊在一幀里應(yīng)用,那么加速度將大大降低急侥。
同樣不需要去做實(shí)際測(cè)量砌滞。

- (void)applyForce:(SCNVector3)direction atPosition:(SCNVector3)position impulse:(BOOL)impulse;

給物體的某個(gè)位置施加一個(gè)力或沖量。
position:物體所在的SCNNode的自身坐標(biāo)系中坏怪,施加力或沖量的點(diǎn)贝润。
其余參數(shù)同上
在物體的質(zhì)心以外的位置上施加一個(gè)力或沖量,可以是線性加速度或角加速度铝宵,這取決于物體在物理世界中的位置打掘,以及作用于它的其他力。

- (void)applyTorque:(SCNVector4)torque impulse:(BOOL)impulse;

給物體施加一個(gè)扭矩(旋轉(zhuǎn)的力)或角動(dòng)量(旋轉(zhuǎn)的沖量)鹏秋。
torque :方向和大小的扭矩(烹事保·米)或角動(dòng)量的變化(在newton-meter-seconds),相對(duì)于場(chǎng)景的世界坐標(biāo)空間拼岳。
impulse :YES枝誊,施加的是角動(dòng)量;NO惜纸,施加的是扭矩
施加扭矩或角動(dòng)量到物體上叶撒,其角速度與物體的質(zhì)量绝骚、形狀有關(guān),此外這并不會(huì)影響到物體的線性加速度祠够。

- (void)clearAllForces;

取消所有持續(xù)的力或扭矩压汪。

管理物體運(yùn)動(dòng)

@property(nonatomic) SCNVector3 velocity;

物體當(dāng)前運(yùn)動(dòng)速度(米/秒)和方向。
在SCNSceneRendererDelegate協(xié)議中的任何方法中調(diào)用古瓤,返回的是物理模擬的當(dāng)前結(jié)果止剖,設(shè)置屬性會(huì)立即應(yīng)用更改。
在其他時(shí)間調(diào)用落君,返回的是最后一次設(shè)置的值穿香,設(shè)置屬性會(huì)在下一次渲染循環(huán)的過(guò)程時(shí)生效。

@property(nonatomic) SCNVector4 angularVelocity;

物體當(dāng)前的旋轉(zhuǎn)軸和旋轉(zhuǎn)速度(弧度/秒)绎速。
從旋轉(zhuǎn)軸指定的方向看皮获,正值代表逆時(shí)針旋轉(zhuǎn)。
其余同上纹冤。

@property(nonatomic, readonly) BOOL isResting;

表示物體是否出于靜止?fàn)顟B(tài)洒宝。
默認(rèn)是NO。但是物體沒(méi)有動(dòng)萌京,并且沒(méi)有收到任何力雁歌。SceneKit會(huì)自動(dòng)將值變成YES。

@property(nonatomic) BOOL allowsResting;

是否自動(dòng)將物體設(shè)置為“靜止”
物理模擬的物體越少知残,可以提升模擬的性能将宪。
設(shè)為YES,將提高模擬性能橡庞。
設(shè)為NO较坛,將提高準(zhǔn)確性。


這里涉及到了很多編程以外的物理知識(shí)扒最,需要徹底搞懂的話需要惡補(bǔ)物理先丑勤。笑cry。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吧趣,一起剝皮案震驚了整個(gè)濱河市法竞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌强挫,老刑警劉巖岔霸,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俯渤,居然都是意外死亡呆细,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門八匠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)絮爷,“玉大人趴酣,你說(shuō)我怎么就攤上這事】雍唬” “怎么了岖寞?”我有些...
    開(kāi)封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柜蜈。 經(jīng)常有香客問(wèn)我仗谆,道長(zhǎng),這世上最難降的妖魔是什么淑履? 我笑而不...
    開(kāi)封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任隶垮,我火速辦了婚禮,結(jié)果婚禮上鳖谈,老公的妹妹穿的比我還像新娘。我一直安慰自己阔涉,他們只是感情好缆娃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著瑰排,像睡著了一般贯要。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上椭住,一...
    開(kāi)封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天崇渗,我揣著相機(jī)與錄音,去河邊找鬼京郑。 笑死宅广,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的些举。 我是一名探鬼主播跟狱,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼户魏!你這毒婦竟也來(lái)了驶臊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叼丑,失蹤者是張志新(化名)和其女友劉穎关翎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸠信,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纵寝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了星立。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片店雅。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡政基,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闹啦,到底是詐尸還是另有隱情沮明,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布窍奋,位于F島的核電站荐健,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏琳袄。R本人自食惡果不足惜江场,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窖逗。 院中可真熱鬧址否,春花似錦、人聲如沸碎紊。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仗考。三九已至音同,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秃嗜,已是汗流浹背权均。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锅锨,地道東北人叽赊。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像必搞,于是被迫代替她去往敵國(guó)和親蛇尚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 首先要熟悉一些基本的力學(xué)名詞及相關(guān)公式 剛體(Rigidbody):剛體是指在運(yùn)動(dòng)中和受到力的作用后顾画,形狀和大小不...
    FLY旳影子閱讀 11,517評(píng)論 0 11
  • 簡(jiǎn)介 增強(qiáng)現(xiàn)實(shí)技術(shù)(Augmented Reality取劫,簡(jiǎn)稱 AR),是一種實(shí)時(shí)地計(jì)算攝影機(jī)影像的位置及角度并加上...
    牛奈奈閱讀 1,270評(píng)論 1 3
  • 111. [動(dòng)畫系統(tǒng)]如何將其他類型的動(dòng)畫轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫研侣? 動(dòng)畫->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫]Unit...
    胤醚貔貅閱讀 13,020評(píng)論 3 90
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理谱邪,服務(wù)發(fā)現(xiàn),斷路器庶诡,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 實(shí)踐100天走來(lái)第44天惦银,養(yǎng)成從早起到跑步再到早睡,3個(gè)好習(xí)慣,真是個(gè)神奇的體驗(yàn)扯俱。 最大的收獲是愛(ài)非堅(jiān)持的理念體會(huì)...
    方錦揚(yáng)閱讀 290評(píng)論 0 0