首页 > 解决方案 > 我的触发器对撞机触发,但里面的 if 语句不起作用

问题描述

我有一个敌人,有两个对撞机(一个盒子和一个球体),都被IsTrigger激活了。实际敌人的游戏对象是一个 Empty,在它下面是我的网格和另一个用于实例化射击的 Empty Object(所以 Empty "ufo" > ufo mesh, Empty "SpawnShot")。

现在,我希望敌人进入一个有盒子对撞机(也是IsTrigger激活了选项的触发器)并带有标签的区域后开始射击Boundary

附加到我的敌人的代码如下所示:

//Public variables
public float speed, frequency, magnitude;

public GameObject shot;
public Transform shotSpawn;
public float fireRate;

//Private variables
private float nextFire;
private bool startFire = false;

private Vector3 pos;

void Start ()
{
    pos = transform.position;
}

void Update ()
{
    //Sine movement
    pos += transform.forward * Time.deltaTime * -speed;
    transform.position = pos + transform.up * Mathf.Sin (Time.time * frequency) * magnitude;

    //Fire
    if (startFire && Time.time > nextFire) {
        nextFire = Time.time + fireRate;
        Instantiate (shot, shotSpawn.position, shotSpawn.rotation);
    }
}

void OnTriggerEnter (Collider other) 
{
    Debug.Log ("hello im the ufo trigger");

    if (other.gameObject.CompareTag ("Boundary")) {
        startFire = true;
        Debug.Log ("Boundary and boolean is " + startFire);         
    }
}

我在没有布尔值的情况下对其进行了测试,以查看是否是拍摄本身的问题,但这确实有效。我已经用 Debugs 测试了这些行,唯一没有调试的是OnTriggerEnter函数内部的 if 语句。所以它确实触发了,但它没有进入 if 语句。

我检查了 100 次,是否所有内容都已标记,并且触发选项是否已激活。我不知道怎么了!

PS:不明飞行物移动,唯一不工作的是火。

编辑:所以我刚刚添加了另一个 if 语句,这个确实有效(??),我改变了这样的功能:

void OnTriggerEnter (Collider other) 
{
    Debug.Log ("hello im the" + other.gameObject.name + "-" + 
other.gameObject.tag + "trigger");

    if (other.gameObject.name == "Boundary") {
        startFire = true;
        Debug.Log ("Boundary and boolean is " + startFire);
    }

    if (other.gameObject.CompareTag ("player_shot")) {
        Destroy(this.gameObject);       
    }
}

即使将其与名称而不是标签进行比较,它仍然无法正常工作。当我的玩家开火时,敌人被摧毁,所以对撞机正在工作,但不是第一个 if 语句

标签: c#unity3dtriggerscollider

解决方案


推荐阅读