我目前正在學習如何在 Unity 中制作游戲,并且我想檢測何時觸發 Child 的對撞機以對被擊中的物體施加傷害。但我對它是如何作業的感到困惑。
- Parent 是否
OntriggerEnter
檢測到 Child Object 的觸發事件? - 我怎么知道觸發器來自孩子而不是父母?
- 哪個 Child 的對撞機被觸發了?
父母的對撞機沒有被觸發,但孩子的對撞機被觸發。此外,子物件沒有附加剛體
uj5u.com熱心網友回復:
我沒有足夠的聲譽來發表評論,所以我要回答它。我認為這里也得到了回答: 碰撞層矩陣和父/子物件關系。
如果子碰撞不在父碰撞之內,則無需IsTrigger = true
為父碰撞設定,只需為您的碰撞嘗試不同的層。
這是 Unity 檔案:https ://docs.unity3d.com/Manual/LayerBasedCollision.html
uj5u.com熱心網友回復:
你說的這叫自碰撞。處理此問題的一種方法是忽略某些對撞機,請查看此處的檔案。
如果我理解正確,你有一個像這樣的 GameObject 層次結構:
parentGO (contains player mesh and Capsule Collider 2D)
|-childGO (contains attack mesh and Mesh Collider 2D)
我會附加到childGO
一個腳本,該腳本應該在其多邊形對撞機上記錄碰撞,并在parentGO
被擊中的物件上通知武器腳本。然后武器可以對目標造成傷害。
uj5u.com熱心網友回復:
我知道你很可能得到了你的回應,但也值得一提的是,也許你應該考慮分離這些物件并將它們附加到新的 GameObject 上,它有一個包含兩個碰撞器的腳本 - 這可能更可靠且易于閱讀.
您可以使用Collider2D.IsTouching(Collider2D other);
這是 IsTouching 的檔案
或者撰寫使用觀察者的自定義腳本并通知主游戲物件發生碰撞。
private Action _onGameObjectCollided;
private void OnTriggerEnter2D(Collider2D col){
if(col.gameObject.CompareTag("TAG")
_onGameObjectCollided?.Invoke();
}
public void AddOnColliderEnterObserver(Action observer)
{
_onGameObjectCollided = observer;
}
public void RemoveOnColliderEnterObserver(Action observer)
{
_onGameObjectCollided -= observer;
}
在新的游戲物件內部:
collider.AddOnColliderEnterObserver(MethodToCallOnTriggerEntered);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/483522.html
下一篇:單元測驗檔案上傳時無法保存檔案