簡體   English   中英

OnTriggerEnter2D 被調用

[英]OnTriggerEnter2D getting called

如果敵人與子彈相撞,我正試圖摧毀它。 但是 OnTriggerEnter2D 不起作用。 我一直試圖解決這個問題並尋找答案幾個小時,但我似乎無法找到問題。

敵人腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyManager : MonoBehaviour
{
    [SerializeField]
    private Transform target;
    [SerializeField]
    private float speed;


    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        transform.position = Vector2.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D collision)
    {
        Debug.Log("Colliding with trigger");
        if (collision.CompareTag("bullet"))
        {
            Debug.Log("I got hit");
            Destroy(gameObject);
        }
    }
}

子彈

子彈預制檢查員子彈預制檢查員

敵人

敵方督察敵方督察

如果它是與另一個碰撞的實際對象,則您想改用OnCollisionEnter2D 觸發器用於無法碰撞的對象,您只想知道它們是否重疊。

嘗試在碰撞器上切換 isTrigger 而不是子彈。

另請參閱有關如何創建 2d collider 的文檔: 如何在碰撞后銷毀項目

您好,這是我的第一個幫助帖子,晚了 2 年半……但我遇到了類似的問題,也許可以幫助其他人。 如果您有“敵人”腳本,請嘗試此操作。 我使用粉碎這個詞來避免諸如破壞或破壞之類的內置詞。

使用它來調用:在 < > 內將對象“標簽”放在 < > 之間以銷毀對象。 在這種情況下的敵人

碰撞.GetComponent<敵人>().Smash();


在“敵人”腳本中使用 IEnumerator“協程”

IEnumerator SmashCo()
{
    yield return new WaitForSeconds(.3f);
    this.gameObject.SetActive(false);
}

在“Enemy”腳本中調用這個 Coroutine:注意: animator 是對 Unity 的 Animator 的引用

public void SmashEnemy()
{
    animator.SetBool("smash", true);    // Set the animator Bool for smash
    StartCoroutine(SmashCo());
}

向您的游戲對象添加一個名為 smash 的觸發器。 你應該能夠摧毀這樣的東西。

  • 泰勒

注意:在陰影中使用 Stack Overflow 很長一段時間,這是我的第一篇文章,如果我有任何錯誤,我希望得到糾正,謝謝。 只是想幫忙。 *認為這是對當前答案的不同方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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