如果它与子弹发生碰撞,我正试图摧毁敌人。但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);
}
}
}
子弹
敌人
答案 0 :(得分:2)
如果它是与您想要使用OnCollisionEnter2D
的另一个碰撞的实际对象。触发器适用于无法与之碰撞的对象,您只想知道它们是否重叠。
答案 1 :(得分:0)
尝试在对撞机而不是子弹上切换isTrigger。
请参阅本文档,了解如何创建2d对撞机:how to destroy an item after collision
答案 2 :(得分:0)
您好,这是我的第一篇帮助文章,迟到了两年半……但是我遇到了类似的问题,也许可以帮助其他人。如果您有“敌人”脚本,请尝试此操作。我使用smash这个词来避免内置破坏或破坏之类的词。
使用此调用:在<>内将对象“标签”放置在<>之间以破坏对象。 在这种情况下为敌人
collision.GetComponent <敌人>()。Smash();
在“敌人”脚本中,使用IEnumerator“协程”
IEnumerator SmashCo()
{
yield return new WaitForSeconds(.3f);
this.gameObject.SetActive(false);
}
在“敌人”脚本中调用此协程: 注意: animator是对Unity Animator的引用
public void SmashEnemy()
{
animator.SetBool("smash", true); // Set the animator Bool for smash
StartCoroutine(SmashCo());
}
向您的游戏对象添加一个名为smash的触发器。 您应该能够销毁像这样的东西。
注意:在阴影中使用了很长时间的Stack Overflow,这是我的第一篇文章,如果我对任何事情有错,我希望得到纠正。只是想帮助。 *认为这是解决当前答案的另一种方法。