У меня есть враг с двумя коллайдерами (коробкой и сферой), оба с активированным 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