http://www.maiziedu.com/course/540/ 組件教程 prefabs教程http://www.maiziedu.com/course/642-9396/
我們前面講了很多的基礎知識,最近一直很忙,很久沒出基礎系列的教程了。在今后的一段時間了我盡量擠出時間來將基礎系列的講解完。希望這套教程對那些初學者能起到一定的用處。同時自己也起到了溫故而知新的作用。 好了,廢話不多說了,下面開始介紹unity中的組件。unity3d的每一個物體的屬性都是一個一個的組件組成的,除了一些基本的組件之外,大部分組件都是可以添加和刪除的。我們添加了組件之后,他將會出現在inspector面板
我們可以在inspector面板中清楚的看到這個游戲物體所包含的所有組件Transfoem組件??刂莆矬w的位置,方向和大小。sherecollider組件AI是一個腳本文件,在unity系統中也將他作為一個組件。 還有AudioSourde組件。聲音組件,可以給物體添加聲音。? 我們看下組件是怎樣添加和刪除的,新建一個游戲物體,選中該物體,點擊工具欄中的Component->physics->Rigidbody.
然后查看inspector面板,發現面板上多出一欄Rigidbody組件,這樣我們這個物體就添加后了一個重力組件。如果我們添加好了這個組件,然后像刪除掉這個組件不用了。這個操作起來非常簡單,點擊組件右上角的按鈕,在下拉菜單中選擇RemoveComponent即可刪除該組件,如圖:
下面我們看下unity中那些組件 點擊菜單欄中的Component菜單項,得到如圖的下拉菜單
Unity3D中的組件都包含在這個菜單里面我們來大致看下都有那些功能。Mesh:網格組件,3D網格是Unity中最重要的圖形元素。Effects:效果組件,各種視覺效果組件。Physics:物理組件,是unity中非常重要的一組組件,里面包裹我們經常會用到的剛體和碰撞器。Navigation:導航組件,Audio:聲音組件。Rendering:渲染組件,這個組包括在游戲中渲染和界面元素的所有組件。光照和特定效果也包含在這個組。Scripts:腳本組件,還有就是我們為了項目制作需要,安裝的一些插件也會出現在改文件夾;在以后的章節中我們將對每一個組件進行詳細的介紹。
上次對unity的組件進行了一個概括的介紹,今天就介紹一下unity3d中的一組重要的組件,物理引擎組件。物理引擎就是在游戲中模擬真實的物理效果。什么是物理效果呢,比如在游戲中我們擊打一個物體,這個物體就會受到力的作用,當物體受到擊打力之后產生的效果,就叫做物理效果。物理引擎就是實現這種效果的一個組件。如果沒有這個組件,我們就必須用大量的代碼來描述這種效果,現在加上這個組件之后,我們只需要設置一下參數,就可以將這些復雜的效果模擬出來,極大的減少了工作量。物理引擎中主要分為兩大塊,剛體和碰創器。我們今天先來看下剛體組件,剛體組件可以給物體添加一些常見的物理屬性,比如物體的質量,摩擦力,碰創參數等等,這些屬性可用來真實的模擬物體在3D游戲世界中的一切行為。新創建的物體時不具備剛體組件的,下面我們加來看第一步,怎么給一個物體添加剛體組件首先創建一個場景,其中包括一個地面,三個GUBE。三個GUBE分別設置不同的顏色。以便區分,如圖:
選中紅色的cube然后在菜單欄中選擇Component->
hysics->Rigidbody如圖:
這樣一個剛體組件就添加完成了,運行游戲看看有什么變化。我們發現運行游戲后紅色的物體開始自由下落,其他兩個沒有變化。這是因為我們給紅色物體添加了Rigidbody組件后,它收到了重力的影響。
選中紅色的物體,在Inspector視圖中可以看到Rigidbody組件包含的屬性,下面介紹一下這些屬性的含義,
Mass:質量,數值越大物體下降的速度就越快,默認值是1,設置數值是盡量不要超過10,否則物理效果就不真實了。Drage:阻力,數值越大物體速度減慢的就越快。Angular Drag:角阻力,數值越大自身旋轉的速度減慢的就越快,UseGravity:是否使用重力。IsKinematic:是否受物理影響。Interpolate:設置圖像差值。CollisionDetection:碰創檢測。Constraints:凍結,停止某個軸向感應物理引擎的效果。??Freeze Position:凍結X,Y,Z軸的位移。Freeze Rotation:凍結X,Y,Z軸的旋轉。這是對單個物體的物理效果的設置,unity3d中也可以對整個項目中的所有物理效果進行設置,設置方法,選擇菜單欄中Edit->
roject Settings->
hysics
此時即可在Inspector面板中打開“Physics Manager”(物理管理器)界面。
Gravity:重力,默認情況下物體受Y軸向下的重力為9.8N。Default Material:默認物理材質。BounceThreshold:反彈值,Sleep Velocity:睡眠速度。當速度低于睡眠速度是,它保持靜止。Sleep Angular Velocity:睡眠角速度。當角速度低于睡眠角速度時,自身不在旋轉。Max Angular Velocity:最大角速度。Min Penetration For Penalty:用于物體與物體之間碰撞后最小穿透力。Solver Iterstion Count:迭代數量,默認值是7.Raycasts Hit Trigger:是否啟動命中觸發。Layer Collision Matrix:圖層碰撞矩陣。當這些都按照我們的項目要求設置好之后,我們就可以給我們添加了Rigidbody的物體一個力,讓它在力的作用下運動了。剛體組件可以受力的作用,比如給剛體施加一個x軸方向的力,那么該剛體綁定的物體將沿著x軸方向上向前移動,這就好比用力將物體仍出去一樣,該物體將依拋物線的形式移動。Unity中的力有兩種:一種普通力,需要設定方向和大小;? ???第二種為目標位置力,需要設定目標點的位置。下面就通過一個實例看下著兩個力的區別。新建一個C#腳本,命名為AddForec并輸入一下代碼using UnityEngine;using System.Collections; public class AddForce : MonoBehaviour {??//添加力的物體? ???public GameObject addFroceobj;??//目標位置? ???public GameObject cubeobj;? ?? ?? ?? ?? ?void OnGUI()? ???{? ?? ?? ?? ???if(GUILayout.Button("普通力",GUILayout.Height(50)))? ?? ?? ?? ???{//普通力? ?? ?? ?? ?? ?? ?? ???addFroceobj.rigidbody.AddForce(1000,0,0);? ?? ?? ?? ???}? ?? ?? ?? ???if(GUILayout.Button("位置力",GUILayout.Height(50)))? ?? ?? ?? ???{? ?? ?? ? 位置力? ?? ?? ?? ?? ?? ?? ???Vector3 force=cubeobj.transform.position-addFroceobj.transform.position;? ?? ?? ?? ?? ?? ?? ???addFroceobj.rigidbody.AddForceAtPosition(force,addFroceobj.transform.position,ForceMode.Impulse);? ?? ?? ?? ???}? ???}}設置完成后,運行游戲,當點擊普通力按鈕是,物體將會受到x軸方向上一個大小為1000的力的作用當點擊位置力是,物體將會向我們的目標物體移動,力的方式為沖擊力。好了,關于剛體就介紹這么多,下一次將介紹碰撞器的用法。
今天看下unity3d物理引擎的另外一個重要組成部分,碰撞器,在unity3d中,如果一個物體想感受碰撞,就必須添加碰撞組件。? 我們先通過一個小例子看下什么叫碰撞,物體添加碰撞和沒有添加碰撞有什么區別。首先創建一個場景,包括兩個cube一個設置為紅色一個設置為黃色,創建一個地面。然后給兩個物體添加Rigidbody,講黃色的物體的BoxCollider組件去掉。然后運行游戲,我們會發現紅色的小球與地面發生了碰撞,黃色小球沒有感應到碰撞,直接穿過地面。
下面我們看下怎么給一個物體添加碰撞器,選中需要添加碰撞器的物體,然后選擇菜單欄的Component->
kysics如圖:
圖中用紅線框住的部分就是unity給我們提供的所有的碰撞類型。Box Collider:盒子碰撞器,適用于立方體之間的碰撞,Sphere Collider:球體碰撞器適用于球體之間的碰撞Ca
sule Collider:膠囊碰撞器適用于膠囊體之間的碰撞Mesh Collider:網格碰撞器他的碰撞方式由自定義模型的自身網格覺得,適用于自定義網格碰撞Wheel Collider:車輪碰撞器適用于車輪與地面之間或其他物體之間的碰撞Terrain collider:這個應該是地形碰撞器,新加上的,沒用過。下面們點擊Box Collider選項,這樣我們就給物體添加了一個盒子碰撞器。在Inspector中可以看到Box Collider組件的屬性如圖:
Is Trigger:觸發器 如激活,此碰撞器用于觸發事件,并且被物理引擎忽略。Material:物理材質 引用何種物理材質決定了他和其他對象如何作用。Center 中心 碰撞器在對象本地坐標中的位置。Size 尺寸 在X、Y、Z三維上的碰撞器尺寸。中心和尺寸就不用多講了。下面我們重點來看下Is Trigger和Material。首先看看Is Trigge,如果我們勾選了Is Trigge后面的選項,物體將不受物理引擎控制,當和一個觸發器發生碰撞時會發出三個獨特的觸發信息。觸發器用于觸發你游戲中的其他事件,比如過場動畫、自動門開啟、顯示教程信息等等。當然為了使兩個觸發器碰撞時發出碰撞事件,其中一個必須包含剛體。 。一個觸發器和一個普通碰撞器碰撞,其中之一必須附加剛體。Material是物理材質,是用來設置物體表面材質的,不同的表面材質可影響碰撞后的物理效果。下面我們看下怎么在碰撞其中添加物理材質。Unity標準資源包中提供了一些物理材質的資源,首先要將他們添加進來。方法如下,在Project視圖中單擊鼠標右鍵,在彈出的快捷菜單中選中Import Package->
husic Materials,導入資源包
標準資源包中提供了五種物理材質:
Bouncy:彈性材質。Ice:冰材質。Metal:金屬材質。Rubber:橡膠材質。Wood:木頭材質。下面看添加方法,首先在Scene視圖中選擇需要添加物理材質的物體然后在Project視圖中通過拖動將Bouncy賦值給Inspector視圖中的SphereCollider即可。
除了這五個制作好的物理材質外,還可以自己制作物理材質,制作方法如下。在prject視圖中點擊Create->
hysic Material菜單即可。
選擇我們新建的物理材質,在Inspector視圖中,看到新建物理材質的所有屬性。下面簡要介紹一下這些屬性的含義
Dynamic Friction:動態摩擦,取值0,1之間,0是最小動態摩擦,1為最大動態摩擦。Static Friiction:靜態摩擦,取值同上Bounciness:碰撞反彈系數,取值0表示無反彈,1表示最大反彈。Fiction Combine:普通碰撞后的摩擦模式Bounce Combine:反彈碰撞后的摩擦模式Friction Direction:摩擦方向,方向分為x,y,z軸。Dynamic Friction2:動摩擦系數Ststic Friction2:靜摩擦系數。按照需求調節完成。這樣一個新的物理材質就制作完成了。也可改變不同參數,看看每個參數對物體的影響。