[英]Unity OnTriggerEnter2D not registering
我剛開始使用 unity,在注冊觸發碰撞時遇到了一個真正的問題。
public void OnTriggerEnter2D(Collider2D other)
{
print("collide");
if (other.CompareTag("Fish"))
{
print("Caught");
}
}
我在這兩個項目上都有 2D 多邊形碰撞器和剛體。 我還設置了 1 個觸發器(已嘗試將兩者都設置為觸發器)。 然而,一個 UI 項目是精靈,另一個是圖像。 這兩項也都標有“魚”
非常感謝任何幫助。 謝謝
我可以想到需要發生四件事,以便調用OnTriggerEnter
:
這兩個對象的碰撞器實際上需要重疊。 僅僅因為它們的渲染像素重疊,並不意味着它們的碰撞體重疊。 這可以在編輯器中檢查。 它們的碰撞器在“ Scene
選項卡中用綠色輪廓表示。 如果您沒有看到任何東西,請確保標有Gizmos
的按鈕已打開。
這兩個對象需要位於設置為相互碰撞的物理層中。 您可以在Edit > Settings > Physics2D > Layer Collision Matrix
中查看。
這兩個對象都需要附加 Rigidbody2D 組件。 確保這些不是剛體組件,因為它們適用於 3D 物理。
包含OnTriggerEnter2D
事件的 object 需要具有isTrigger = true
。
我已經嘗試了幾件事。 首先,我檢查了另一篇文章的建議。 簡而言之:
最后,解決方案是通過創建和添加組件按鈕將腳本添加到 object,而不是將編寫的腳本放到其中。 不知道,但對我來說這就是解決方案。 即使它是相同的腳本。
Sprite 和 Image 都可以與另一個 Image 發生碰撞。 可能有問題的是,您的精靈可能看起來像是在觸摸圖像,但在場景中 canvas 可能距離很遠,因此相機可能會欺騙您。 這是我的測試示例代碼:
移動精靈的腳本:
private Rigidbody2D _rigidbody;
private void Awake() => _rigidbody = GetComponent<Rigidbody2D>();
private void FixedUpdate()
{
if (Input.GetKey(KeyCode.A))
{
var movement = -transform.right * Time.fixedDeltaTime * 250;
_rigidbody.MovePosition(transform.position + movement);
}
if (Input.GetKey(KeyCode.D))
{
var movement = transform.right * Time.fixedDeltaTime * 250;
_rigidbody.MovePosition(transform.position + movement);
}
}
圖像上的觸發腳本:
private void OnTriggerEnter2D(Collider2D other)
{
Debug.Log(other.name);
}
對我沒有任何幫助,但就我而言,我不知道代碼中有一個地方會破壞碰撞層(即不要在視覺上更改碰撞矩陣設置):
Physics2D.IgnoreLayerCollision( ...
也要檢查並確保它沒有被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.