沒有Trigger的狀況下,當物體之間碰到彼此Collider的表面時,便會觸發彼此的OnCollisionEnter事件,且兩物體至少要有一個有Rigidbody。
有Trigger的狀況下,當A物體進入B物體的Collider範圍內的瞬間,便會觸發B物體的OnTriggerEnter事件。
但是物體的parent上加入Rigidbody後,事情會變得更加複雜些。
現在場面上我們有五個物體,其中可以動的為球體。
我額外寫了一個判斷Script:EventTrigger.cs(別問我為什麼要用這個命名),判斷是OnCollision還是OnTrigger。
EventTrigger.cs
public UnityEvent TriggerEvent = new UnityEvent();
void OnCollisionEnter(Collision Other)
{
Debug.Log("Collision : " + this.gameObject.name + " Get>> " + Other.gameObject.name);
}
void OnTriggerEnter(Collider Other)
{
Debug.Log("Trigger : " + this.gameObject.name + " Get>> " + Other.gameObject.name);
TriggerEvent.Invoke();
}
Player身上也掛著Rigidbody與Collider與判斷Script。
第一個物件自己就掛載Rigidbody與Collider,但是沒有Trigger類型的Collider。當然掛著判斷Script。
結果
Collision : RigibodyCCube Get>> Player
Collision : Player Get>> RigibodyCCube
第二個,母物件掛著Rigidbody與判斷Script。
子物件分別是掛著Renderer與Collider的實體、以及包含Trigger Collider的物體。
結果
Trigger : Player Get>> PTrigger
Trigger : RigibodyPCube Get>> Collider (Player的Collider)
Collision : RigibodyPCube Get>> Player
Collision : Player Get>> RigibodyPCube
第三個,母物件掛著Rigidbody與判斷Script。
子物件分別是掛著Renderer與Collider的實體。
還有一個是有Trigger Collider、有判斷Script、有Trigger成功後呼叫的Event!
結果
Trigger : PTrigger (1) Get>> Collider
PTrigger (1) Show Log!
Trigger : Player Get>> PTrigger (1)
Trigger : RigibodyPCube (1) Get>> Collider
Collision : Player Get>> RigibodyPCube (1)
Collision : RigibodyPCube (1) Get>> Player
第四個,母物件沒有任何多餘元件。
子物件一:掛著Renderer與Collider的實體、還有判斷Script。
子物件二:掛著Trigger Collider、還有判斷Script。
結果
Trigger : CCTrigger Get>> Collider
Trigger : Player Get>> CCTrigger
Collision : Player Get>> CCCube
Collision : CCCube Get>> Player
接下來我們在第三個物件的裡面又加上一個名為Flower的子物件。
Flower上掛著Rigidbody,裡面又有一個實體物,還有一個GameObject內掛著三個東西:Trigger Collider、有判斷Script、有Trigger成功後呼叫的Event!
Trigger Collider位置如同綠色框所示。
結果
Trigger : FlowerTrigger Get>> Collider
FlowerTrigger Show Log !
Trigger : Player Get>> FlowerTrigger
不好意思,我想請問,如果我想要讓子物件吃到母物件的OnCollsionEenter()是可能的嗎?
回覆刪除目前只知道是觸發掛上這個程式的物件才會觸發這段程式碼
請問你是指子物件掛著有OnCollisionEnter function的script嗎?
刪除如果是這樣,子物件與子物件以下有掛Collider才會觸發OnCollisionEnter喔~