簡體   English   中英

unity OnTriggerEnter2D 未注冊

[英]Unity OnTriggerEnter2D not registering

我剛開始使用 unity,在注冊觸發碰撞時遇到了一個真正的問題。

public void  OnTriggerEnter2D(Collider2D other)
{
    print("collide");
    if (other.CompareTag("Fish"))
    {
        print("Caught");
    }
}

我在這兩個項目上都有 2D 多邊形碰撞器和剛體。 我還設置了 1 個觸發器(已嘗試將兩者都設置為觸發器)。 然而,一個 UI 項目是精靈,另一個是圖像。 這兩項也都標有“魚”

非常感謝任何幫助。 謝謝

我可以想到需要發生四件事,以便調用OnTriggerEnter

  1. 這兩個對象的碰撞器實際上需要重疊。 僅僅因為它們的渲染像素重疊,並不意味着它們的碰撞體重疊。 這可以在編輯器中檢查。 它們的碰撞器在“ Scene選項卡中用綠色輪廓表示。 如果您沒有看到任何東西,請確保標有Gizmos的按鈕已打開。

  2. 這兩個對象需要位於設置為相互碰撞的物理層中。 您可以在Edit > Settings > Physics2D > Layer Collision Matrix中查看。

  3. 這兩個對象都需要附加 Rigidbody2D 組件。 確保這些不是剛體組件,因為它們適用於 3D 物理。

  4. 包含OnTriggerEnter2D事件的 object 需要具有isTrigger = true

我已經嘗試了幾件事。 首先,我檢查了另一篇文章的建議。 簡而言之:

  1. 檢查我是否至少有一個物體有剛體
  2. 檢查圖層
  3. 檢查標簽
  4. 播放“是觸發器”。

最后,解決方案是通過創建和添加組件按鈕將腳本添加到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM