提问者:小点点

有谁能告诉我为什么我的触发器不能按我想要的方式工作?


我现在的比赛一直有这个问题。

问题是,当我的玩家(火箭)与小行星(敌人)相撞时,玩家会死掉,然后重启关卡,但这并不起作用,即使我给我的玩家放了一个没有触发器的盒子对撞机,而我的小行星放了触发器和一个圆形对撞机。 我也试过把小行星与触发器和玩家与没有触发器,他们都与触发器,但我的火箭只是通过小行星每次。 控制台窗口中没有错误。 下面是我为此使用的代码。

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

public class Movement : MonoBehaviour
{

    private float speed = 6.0f;
    public GameObject character;

    private Animator anim;

    void Start()
    {
        anim = GetComponent<Animator>();
    }


    void Update()
    {
        void OnTriggerEnter2D (Collider2D other)
        {        
            if (gameObject.tag == "Enemy")
            {
                Destroy(gameObject);
            }
        }

        if (Input.anyKey)
        {
            transform.Translate(Vector3.forward * Time.deltaTime * speed);
        }
        if (Input.GetKeyDown(KeyCode.D))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
            anim.SetBool("Isright", true);
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
            anim.SetBool("Isleft", true);
        }
        if (Input.GetKey(KeyCode.RightArrow))
        {
            transform.position += Vector3.right * speed * Time.deltaTime;
            anim.SetBool("Isright", true);
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            transform.position += Vector3.left * speed * Time.deltaTime;
            anim.SetBool("Isleft", true);
        }
        else
        {

        }
    }
}


共3个答案

匿名用户

您将triggerenter2d(Collider2D other)上的void放在更新中。 你写对了吗?

匿名用户

我认为您的代码中的问题在于您的条件gameobject.tag有点错误。 我建议将其更改为collision.gameobject.tag。 另外,我认为最好将void OnTriggerEnter2D(Collider2D other)放置在void Update()之外。 请回复此解决方案是否有效。 更新:你可以这样写:

 private void OnCollisionEnter2D(Collision2D collision)
{
    switch (collision.gameObject.tag)
    {
        case "Enemy":
        Destroy(gameObject);
            break;
        default:
            //nothing
            break;
    }
}

我建议您使用OnCollisionEnter2D,而不是OnTriggerEnter2D,因为触发器通常是可以通过的不可见对象。

匿名用户

正如其他人所指出的,代码的结构不正确。

在您的更新中,您有您的触发器方法。 因此,它将永远不会被调用

您只需删除void update()的2行代码和下面的括号。 和最后一个右括号表示方法,因此触发器方法在类中是独立的。

假设您有一个Rigidbody2D并设置了触发器,它应该可以工作。

我还建议在代码中有改进的空间,但是让我们解决主要问题,而不是nit选择