剛體
物理引擎:模擬真實世界中物體的物理特性。
帶有剛體組件的遊戲物體,剛體組件可使遊戲對象受物理引擎控制,在受到外力時產 生真實世界中的運動。
質量Mass:物體的質量。
•阻力Drag:當受力移動時物體受到的空氣阻力。0表示沒 有空氣阻力,極大時可使物體停止運動
•角阻力Angular Drag:當受扭力旋轉時物體受到的空氣阻 力。0表示沒有空氣阻力,極大時使物體停止旋轉。
•使用重力Use Gravity:若激活,則物體受重力影響。
•是否是運動學Is Kinematic:若激活,該物體不再受物理 引擎控制,即自身不受作用力。
插值Interpolate:用於緩解剛體運動時的抖動。
Collision Detection:碰撞檢測模式。快速移動 的剛體在碰撞時有可能互相穿透,可以設置碰撞檢測頻率, 但頻率越高對物理引擎性能影響越大。
不連續Discrete:不連續碰撞檢測。適用於普通碰撞(默 認模式)。
連續Continuous:連續碰撞檢測。
動態連續Continuous Dynamic:連續動態碰撞檢測,適用 於高速物體。
碰撞體
使剛體具有碰撞效果,可以單獨作用於物體,但是要使移動的物體具有碰撞效果 必須附加剛體組件。
分類
•靜態碰撞器Static Collider :只有碰撞器沒有剛體的物體
現象:保持靜止或者輕微移動,如:平面/樹木
•剛體碰撞器RigidbodyCollider:具有剛體和碰撞器的物體; 現象:完全受物理引擎影響。
•運動學剛體碰撞器: 帶剛體,且勾選Is Kinematic,此碰撞器 不能添加力,只能通過transform移動。
物理引擎會工作有兩個條件:
①物體A有剛體
②剛體所屬的物體A在運動
當物體A去碰撞物體B時,滿足條件,物理引擎持續檢測,直到碰撞發生。
反之,如果物體B去碰撞物體A,因爲物體B沒有剛體,如果物體A靜止,物理引擎不會工作。
只有當碰撞發生後,纔會有碰撞事件:
①void OnCollisionEnter(Collision collOther) 當進入碰撞時執行,除非重複碰撞,否則只執行一次
②void OnCollisionStay(Collision collOther) 當碰撞體與剛體接觸時每幀執行,會執行N次
③void OnCollisionExit(Collision collOther) 當停止(退出)碰撞時執行,除非重複碰撞,否則只執行一次
同時,該碰撞事件的腳本可以掛載物體A上,也可以掛載物體B上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class aaa : MonoBehaviour
{
public Transform cube;
void Update ()
{
}
private void OnCollisionEnter(Collision collision)
{
print(" OnCollisionEnter");
print( collision.collider.name);
//collision.contacts 接觸點的數組集合
//collision.contacts[0] 第一個接觸點
}
}
所以參數 collision代表的是被撞的那個物體的碰撞器。
碰撞發生的必備條件:
① 物體有剛體
②該物體在運動
③兩者都具有碰撞體
觸發器
帶有碰撞器組件,且Is Trigger屬性被勾選的物體。
•現象:無碰撞效果。
一但點選Is Trigger,該碰撞器就變成了觸發器,沒有碰撞效果。
void OnTriggerEnter(Collider cldOther) 當Collider(碰撞體)進入觸發器時執行
void OnTriggerStay(Collider cldOther) 當碰撞體與觸發器接觸時每幀執行
void OnTriggerExit(Collider cldOther) 當停止觸發時執行
觸發器產生的必備條件:
①兩者一個具有碰撞體組件,另一個具有觸發器組件
②其中之一帶有剛體組件
可見觸發器的條件比碰撞器要寬泛,沒那麼嚴格。
參數cldOther和前面的collision不同,前者就是碰撞體組件,等價於collision.collider。
一個觸發器和一個碰撞體是互斥的,有了觸發,就沒有碰撞效果,也就不會調用OnCollision系列函數。
當然一個物體可以綁多個碰撞體,比如物體A綁了兩個碰撞體,其中一個修改爲觸發器。
那麼物理引擎會分別計算:
物體A的碰撞體+剛體與物體B的碰撞體有碰撞效果。
物體A的觸發器+剛體與物體B的碰撞體有觸發效果。
適用範圍
什麼時候用碰撞體? 物體非背景,要有“阻擋”效果的時候,如牆壁,桌椅,地板等等。
什麼時候用剛體? 物體非背景,即有“阻擋”效果,又有物理受力效果。
什麼時候使用觸發器?物體可以是背景,也可以非背景,強調“接觸”效果。如生命球,能拾取的金幣等等。