SceneKit_入門(mén)12_物理行為

SceneKit_入門(mén)01_旋轉(zhuǎn)人物
SceneKit_入門(mén)02_如何創(chuàng)建工程
SceneKit_入門(mén)03_節(jié)點(diǎn)
SceneKit_入門(mén)04_燈光
SceneKit_入門(mén)05_照相機(jī)
SceneKit_入門(mén)06_行為動(dòng)畫(huà)
SceneKit_入門(mén)07_幾何體
SceneKit_入門(mén)08_材質(zhì)
SceneKit_入門(mén)09_物理身體
SceneKit_入門(mén)10_物理世界
SceneKit_入門(mén)11_粒子系統(tǒng)
SceneKit_入門(mén)12_物理行為
SceneKit_入門(mén)13_骨骼動(dòng)畫(huà)
SceneKit_中級(jí)01_模型之間的過(guò)渡動(dòng)畫(huà)
SceneKit_中級(jí)02_SCNView 詳細(xì)講解
SceneKit_中級(jí)03_切換照相機(jī)視角
SceneKit_中級(jí)04_約束的使用
SceneKit_中級(jí)05_力的使用
SceneKit_中級(jí)06_場(chǎng)景的切換
SceneKit_中級(jí)07_動(dòng)態(tài)修改屬性
SceneKit_中級(jí)08_陰影詳解
SceneKit_中級(jí)09_碰撞檢測(cè)
SceneKit_中級(jí)10_濾鏡效果制作
SceneKit_中級(jí)11_動(dòng)畫(huà)事件
SceneKit_高級(jí)01_GLSL
SceneKit_高級(jí)02_粒子系統(tǒng)深入研究
SceneKit_高級(jí)03_自定義力
SceneKit_高級(jí)04_自定義場(chǎng)景過(guò)渡效果
SceneKit_高級(jí)05 檢測(cè)手勢(shì)點(diǎn)擊到節(jié)點(diǎn)
SceneKit_高級(jí)06_加載頂點(diǎn)缀台、紋理颂龙、法線坐標(biāo)
SceneKit_高級(jí)07_SCNProgram用法探究
SceneKit_高級(jí)08_天空盒子制作
SceneKit_高級(jí)09_霧效果
SceneKit_大神01_掉落的文字
SceneKit_大神02_彈幕來(lái)襲
SceneKit_大神03_navigationbar上的3D文字

讓學(xué)習(xí)成為一種習(xí)慣

本節(jié)學(xué)習(xí)任務(wù)

掌握SceneKit游戲框架中的物理行為。

正式開(kāi)始

  • 物理行為的定義

定義一個(gè)或多個(gè)物理組織的高級(jí)行為箕憾,行為包括連接多個(gè)物體的關(guān)節(jié)僚碎,可以讓他們一起移動(dòng),也可以定義車輪這種行為洲胖,讓身體想騎車一樣滾動(dòng)休傍。

  • 相關(guān)的類(SCNPhysicsBehavior)

你不不會(huì)直接使用這個(gè)類,你實(shí)例化這個(gè)類的一個(gè)子類的定義你想要的行為,并且添加到物理世界去搭儒。

接下來(lái),我們介紹這個(gè)類都有哪些屬性

我去在文檔中找,只要這樣一句話

SCNPhysicsBehavior is an abstract class that represents a behavior in the physics world.

看來(lái)這個(gè)類是物理行為的一個(gè)基類

雖然這個(gè)類我們沒(méi)法沒(méi)法它的屬性,但是它有四個(gè)子類,我們就從它的四個(gè)子類入手,去發(fā)掘子類的作用沪悲。

  • SCNPhaysicBehavior 子類的介紹

a. SCNPhysicsHingeJoint
作用:

連接兩個(gè)物體获洲,并允許他們?cè)谝粋€(gè)單一的軸上圍繞對(duì)方轉(zhuǎn)動(dòng)

b.SCNPhysicsBallSocketJoint
作用:

連接兩個(gè)物體,并允許他們?cè)谌魏畏较蛏蠂@對(duì)方轉(zhuǎn)動(dòng)

c.SCNPhysicsSliderJoint
作用:

連接兩個(gè)物體可训,并允許他們彼此之間滑動(dòng)或旋轉(zhuǎn)昌妹。滑塊關(guān)節(jié)像電機(jī)一樣工作握截,在兩個(gè)物理身體之間施加力或轉(zhuǎn)矩飞崖。

d.SCNPhysicsVehicle
作用: 組合物理身體成為類似汽車底板的東西,你可以控制汽車的駕駛,剎車和加速。使用SCNPhysicsVehicleWheel 對(duì)象定義車輪的外觀和物理屬性谨胞。

  • 使用步驟
  1. 創(chuàng)建一個(gè)或者多個(gè)SCNPhysicsBody 綁定他們到每個(gè)節(jié)點(diǎn)上,作為物理行為的執(zhí)行者固歪。
  2. 創(chuàng)建配置上面列表中的行為
  3. 使用物理世界(SCNPhysicsWorld)的方法addBehavior: 添加到行為到物理世界中去。

在進(jìn)入一下一個(gè)話題,有必要介紹一個(gè)方法

@interface SCNPhysicsHingeJoint : SCNPhysicsBehavior

+ (instancetype)jointWithBodyA:(SCNPhysicsBody *)bodyA axisA:(SCNVector3)axisA anchorA:(SCNVector3)anchorA bodyB:(SCNPhysicsBody *)bodyB axisB:(SCNVector3)axisB anchorB:(SCNVector3)anchorB;

參數(shù):

bodyA bodyB 物理身體沒(méi)啥好說(shuō)的.
axisA axisB 沿著哪個(gè)軸轉(zhuǎn)動(dòng),比如(1,0,0)沿著X軸轉(zhuǎn)動(dòng)
anchorA anchorB 錨點(diǎn)A,錨點(diǎn)B胯努。有些幾何體的錨點(diǎn)不在幾何體的中心,比如字體的這樣幾何體,它的錨點(diǎn)在左下角,使用時(shí)請(qǐng)注意一下牢裳。

走進(jìn)代碼的世界

1.創(chuàng)建工程

學(xué)習(xí)是一件很開(kāi)心的事情

2.添加SceneKit框架

讓學(xué)習(xí)成為一種習(xí)慣

3.添加SCNView到View中去

 SCNView *scnView  = [[SCNView alloc]initWithFrame:self.view.bounds];
scnView.backgroundColor = [UIColor blackColor];
scnView.scene = [SCNScene scene];
scnView.allowsCameraControl = TRUE; // 允許手動(dòng)控制
[self.view addSubview:scnView];

4.添加照相機(jī)到場(chǎng)景中去

SCNCamera *camera = [SCNCamera camera];
SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = camera;    camera.automaticallyAdjustsZRange = TRUE;
cameraNode.position = SCNVector3Make(0, 0, 10);
[scnView.scene.rootNode addChildNode:cameraNode];

5.添加四個(gè)文字幾何對(duì)象模型,并且設(shè)置他們的身體為動(dòng)態(tài)身體

SCNNode *text1 = [self createTextNodeWithString:@"庫(kù)"];
SCNNode *text2 = [self createTextNodeWithString:@"走"];
SCNNode *text3 = [self createTextNodeWithString:@"天"];
SCNNode *text4 = [self createTextNodeWithString:@"涯"];

[scnView.scene.rootNode addChildNode:text1];
[scnView.scene.rootNode addChildNode:text2];
[scnView.scene.rootNode addChildNode:text3];
[scnView.scene.rootNode addChildNode:text4];

// 創(chuàng)建文字的函數(shù)
-(SCNNode*)createTextNodeWithString:(NSString*)string{
SCNText *text = [SCNText textWithString:string extrusionDepth:1];
text.font = [UIFont systemFontOfSize:1];
text.firstMaterial.diffuse.contents = @"1.PNG";
SCNNode *node =[SCNNode nodeWithGeometry:text];
// 創(chuàng)建一個(gè)物理身體,使用指定的形狀
node.physicsBody = [SCNPhysicsBody bodyWithType:SCNPhysicsBodyTypeDynamic shape:[SCNPhysicsShape shapeWithGeometry:[SCNBox boxWithWidth:1 height:1 length:1 chamferRadius:0]options:nil]];
return node;
}

6.創(chuàng)建物理身體之前的物理行為

SCNPhysicsHingeJoint *joint0 = [SCNPhysicsHingeJoint jointWithBodyA:boxNode.physicsBody axisA:SCNVector3Make(1, 0, 0) anchorA:SCNVector3Make(0, -0.5, 0) bodyB:text1.physicsBody axisB:SCNVector3Make(1, 0, 0) anchorB:SCNVector3Make(0.5, 1, 0)];
SCNPhysicsHingeJoint *joint1 = [SCNPhysicsHingeJoint jointWithBodyA:text1.physicsBody axisA:SCNVector3Make(1, 0, 0) anchorA:SCNVector3Make(0, -0.5, 0) bodyB:text2.physicsBody axisB:SCNVector3Make(1, 0, 0) anchorB:SCNVector3Make(0, 0.5, 0)];
SCNPhysicsHingeJoint *joint2 = [SCNPhysicsHingeJoint jointWithBodyA:text2.physicsBody axisA:SCNVector3Make(1, 0, 0) anchorA:SCNVector3Make(0, -0.5, 0) bodyB:text3.physicsBody axisB:SCNVector3Make(1, 0, 0) anchorB:SCNVector3Make(0, 0.5, 0)];
SCNPhysicsHingeJoint *joint3 = [SCNPhysicsHingeJoint jointWithBodyA:text3.physicsBody axisA:SCNVector3Make(1, 0, 0) anchorA:SCNVector3Make(0, -0.5, 0) bodyB:text4.physicsBody axisB:SCNVector3Make(1, 0, 0) anchorB:SCNVector3Make(0, 0.5, 0)];

// 將物理行為添加物理世界中去
[scnView.scene.physicsWorld addBehavior:joint0];
[scnView.scene.physicsWorld addBehavior:joint1];
[scnView.scene.physicsWorld addBehavior:joint2];
[scnView.scene.physicsWorld addBehavior:joint3];

運(yùn)行:

讓學(xué)習(xí)成為一種習(xí)慣

結(jié)合上一節(jié)的內(nèi)容可以制作下面的效果:

一知半解的人叶沛,多不謙虛蒲讯;見(jiàn)多識(shí)廣有本領(lǐng)的人,一定謙虛

思路很簡(jiǎn)單灰署,給每個(gè)字體幾何模型添加粒子特效,代碼如下:

    SCNParticleSystem *particleSystem = [SCNParticleSystem particleSystemNamed:@"fire.scnp" inDirectory:nil];
    // 創(chuàng)建一個(gè)節(jié)點(diǎn)添加粒子系統(tǒng)
    SCNNode *particleNode = [SCNNode node];
    [particleNode addParticleSystem:particleSystem];
    particleNode.position = SCNVector3Make(0.5, 0, 0);

[node addChildNode:particleNode];

總結(jié)

由于本篇作為入門(mén)篇,就先做這樣一個(gè)小的練習(xí),幫助大家理解一下概念,后面在高級(jí)篇的時(shí)候,我會(huì)把其他幾個(gè)的使用方法詳細(xì)進(jìn)行講解判帮。


代碼庫(kù),聽(tīng)說(shuō)經(jīng)常給人點(diǎn)贊都當(dāng)老板了!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末局嘁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子晦墙,更是在濱河造成了極大的恐慌悦昵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晌畅,死亡現(xiàn)場(chǎng)離奇詭異但指,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)抗楔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)棋凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人连躏,你說(shuō)我怎么就攤上這事贫橙。” “怎么了反粥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疲迂。 經(jīng)常有香客問(wèn)我才顿,道長(zhǎng),這世上最難降的妖魔是什么尤蒿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任郑气,我火速辦了婚禮,結(jié)果婚禮上腰池,老公的妹妹穿的比我還像新娘尾组。我一直安慰自己,他們只是感情好示弓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布讳侨。 她就那樣靜靜地躺著,像睡著了一般奏属。 火紅的嫁衣襯著肌膚如雪跨跨。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天囱皿,我揣著相機(jī)與錄音勇婴,去河邊找鬼。 笑死嘱腥,一個(gè)胖子當(dāng)著我的面吹牛耕渴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齿兔,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼橱脸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼础米!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慰技,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤椭盏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吻商,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掏颊,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年艾帐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌叶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柒爸,死狀恐怖准浴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捎稚,我是刑警寧澤乐横,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站今野,受9級(jí)特大地震影響葡公,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜条霜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一催什、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宰睡,春花似錦蒲凶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至麸恍,卻和暖如春臂聋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背或南。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工孩等, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人采够。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓肄方,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蹬癌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子权她,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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