Недавно начал делать игру, сделал анимированное движение персонажа, плавную камеру к этому всему, но когда стал делать скрипт атаки вылезла проблема - Не получается сделать скрипт.
В сцене есть ГО скажем triggerSphere с тэгом SystemOnly, объект-пустышка на который накинут SphereCollider, стоит галочка на isTrigger.
Объект явл-ся дочерним игровому объекту с персонажем.
На triggerSphere накинут скрипт вот -
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class AttackObject : MonoBehaviour {
public List<GameObject> targets;
// public List<Transform> targets;
void Start () {
targets = new List<GameObject>();
// targets = new List<Transform>();
}
void OnTriggerEnter(Collider other) {
if (other.CompareTag("SystemOnly") || other.CompareTag("Player")) return;
// добавляем объект в лист
// targets.Add(other.gameObject);
// не работает даже так.
Debug.Log(this.name + ", " + "OnTriggerEnter: " + other.name);
}
void OnTriggerExit(Collider other) {
if (other.CompareTag("SystemOnly") || other.CompareTag("Player")) return;
// удаляем объект из листа
// targets.Remove(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerExit: " + other.name);
}
/**********ИЛИ**********
void OnTriggerEnter(Collider other) {
if (!other.CompareTag("Char") || !other.CompareTag("Doodad")) return;
// добавляем объект в лист
// targets.Add(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerEnter: " + other.name);
}
void OnTriggerExit(Collider other) {
if (!other.CompareTag("Char") || !other.CompareTag("Doodad")) return;
// удаляем объект из листа
// targets.Remove(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerExit: " + other.name);
}
*/
}
using System.Collections;
using System.Collections.Generic;
public class AttackObject : MonoBehaviour {
public List<GameObject> targets;
// public List<Transform> targets;
void Start () {
targets = new List<GameObject>();
// targets = new List<Transform>();
}
void OnTriggerEnter(Collider other) {
if (other.CompareTag("SystemOnly") || other.CompareTag("Player")) return;
// добавляем объект в лист
// targets.Add(other.gameObject);
// не работает даже так.
Debug.Log(this.name + ", " + "OnTriggerEnter: " + other.name);
}
void OnTriggerExit(Collider other) {
if (other.CompareTag("SystemOnly") || other.CompareTag("Player")) return;
// удаляем объект из листа
// targets.Remove(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerExit: " + other.name);
}
/**********ИЛИ**********
void OnTriggerEnter(Collider other) {
if (!other.CompareTag("Char") || !other.CompareTag("Doodad")) return;
// добавляем объект в лист
// targets.Add(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerEnter: " + other.name);
}
void OnTriggerExit(Collider other) {
if (!other.CompareTag("Char") || !other.CompareTag("Doodad")) return;
// удаляем объект из листа
// targets.Remove(other.gameObject);
Debug.Log(this.name + ", " + "OnTriggerExit: " + other.name);
}
*/
}
По идее при вхождении в триггер объекта с коллайдером, скрипт должен добавлять ссылку на объект в публичную переменную типа лист. Но он не работает. Для теста добавил куб с ригидбоди и бокс коллайдером - но куб не проходит проверку в OnTriggerEnter, хотя должен. В чем проблема не могу понять.
Вообще я использую такую систему, чтобы когда игрок подходит к объекту с тэгом Char или с тэгом Doodad, и объект в пределах радиуса сферы, этот объект добавляется в лист, далее проверка на угол между объектами и если объект перед игроком, то при клацаньи игроком левой кнопки мыши, у объекта вычитается часть здоровья, при здоровье = 0, удаление объекта из листа. Пытаюсь сделать геймплей наподобие принца персии WW.
Па-ма-ги-те! У меня уже стены ломаются от периодического тыкания в них головой. ;(
ЗЫ возможно ли что баг вызван неправильным использованием IEnumerator в других скриптах?