Мои триггеры-триггеры срабатывают, но оператор if внутри не работает - PullRequest
0 голосов
/ 23 октября 2018

У меня есть враг с двумя коллайдерами (коробкой и сферой), оба с активированным IsTrigger.Фактический враг GameObject представляет собой Empty и под ним находится моя сетка и еще один Empty Object для создания экземпляров выстрелов (так что Empty "ufo"> ufo mesh, Empty "SpawnShot").

Теперь я хочу, чтобы противник начал стрелять, как только он войдет в область, в которой есть боксерский коллайдер (также триггер с активированной опцией IsTrigger) и имеет тег Boundary.

* 1007.* Код, прикрепленный к моему врагу, выглядит следующим образом:
//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, и единственное, что не отлаживается, - это оператор if внутри функции OnTriggerEnter.Так что запускает , но не входит в оператор 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

...