Как проверить столкновения
|
|
beril | Дата: Четверг, 22 Октября 2015, 23:59 | Сообщение # 1 |
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
| В общем ребята выручайте голова уже не варит, а нужно доделывать. Наверно ответ очень прост, но я его не вижу %)
Нужно проверить столкнулся ли обьект с другим обьектом в классе без MonoBehavior(я отметил в каком месте)
В общем есть код
Код public class FireMagicClotFire : BaseSpellData, IDamageSpellType {
private const string SPELL_POINT_NAME = "CreateSpellPoint";//имя обьекта, в позиции которого создаются обьекты заклинаний private const float VELOCITY = 3.3f;//скорость полета снаряда private const float DISTANCE = 5f;//дистанция, которую пролетает заклинание
public SpellDamageType SpellDamageType { get { return SpellDamageType.FireDamage; } }
public int Damage { get; set; }//урон наносимый заклинанием
private readonly GameObject _player;//игрок private readonly GameObject _spellLoadModel;//модель заклинания
private Transform _spellPoint;//точка где создаются обьекты заклинаний
private GameObject _spellObj;// private Vector3 _starPos;
public FireMagicClotFire() { _player = GameObject.FindGameObjectWithTag(ManagerTag.Player); _spellLoadModel = Resources.Load<GameObject>("MagicSpellObject/FireClotObj") as GameObject; }
public void Initialization() { //поиск обьекта CreateSpellPoint foreach (var trans in _player.transform.Cast<Transform>().Where(trans => trans.name == SPELL_POINT_NAME)) { _spellPoint = trans; Debug.Log(trans.name); }
if (_spellPoint == null && GeneraGameSetting._GeneraGameSetting.BuildVersion == BuildVersion.Debug) DebugConsole.Log(string.Format("[FireMagicClotFire] Не найден обьект CreateSpellPoint"), 3); //создание обьекта if (_spellPoint != null) _spellObj = InstantiateObject.InstantiateGameObject(_spellLoadModel, _spellPoint.position, Quaternion.LookRotation(_player.transform.TransformDirection(Vector3.forward)));
_starPos = _spellObj.transform.position;
CoroutineStart.StartCoroutineStatic(GameObject.FindObjectOfType<MonoBehaviour>(), moved(_spellObj)); }
//движение к цели private IEnumerator moved(GameObject obj) { while ((_starPos - obj.transform.position).sqrMagnitude < DISTANCE * DISTANCE) { //дебаг луч Debug.DrawRay(obj.transform.position, obj.transform.TransformDirection(Vector3.forward) * 10, Color.red);
>>>>>>>>>>>>>>>>здесь нужно как то проверку столкновения сделать, что то типа obj.OnCollisionEnter<<<<<<<<<<<<<<<<<<<<
obj.transform.Translate(Vector3.forward * VELOCITY * Time.deltaTime, Space.Self);
yield return null; }
GameObject.Destroy(obj); } }
Накодил? Убери за собой! Инвентарь в Unity(UI) Инвентарь в Unity(GUI)
|
|
| |
irinautkina | Дата: Пятница, 23 Октября 2015, 00:08 | Сообщение # 2 |
участник
Сейчас нет на сайте
| прости, может я не по теме, я проверяю столкновения в юнити двумя видами либо
эвент
OnTriggerEnter2D(Collider2D col)
либо через функцию
Raycast (
другие способы мне не известны.
|
|
| |
Pocifik | Дата: Пятница, 23 Октября 2015, 02:03 | Сообщение # 3 |
участник
Сейчас нет на сайте
| beril, ну в принципе ничто не мешает написать OnCollisionEnter и добавлять в коллекцию, все объекты которые в входят в коллизию, а в OnCollisionExit удалять их. Затем просто вызывать где тебе надо, функцию Contains коллекции, для твоего объекта, или какой нибудь аналог.
|
|
| |
shizofren | Дата: Пятница, 23 Октября 2015, 12:00 | Сообщение # 4 |
Starting MS-DOS...
Сейчас нет на сайте
| beril, если предоставленный тобою класс один на сцене, можно поступить так:
- Повесить на объекты, которые нужно проверять, новый MonoBehaviour класс с методом OnCollisionEnter (или подобный).
- Создать в твоем чудо-классе публичный метод, который будет вызываться при нужных коллизиях (с нужными тебе аргументами).
- В классе объекта (MonoBehaviour) в методе OnCollision... проверять столкновение, и если случилось то столкновение, которое тебе нужно - вызывать тот самый публичный метод в твоем классе.
Моя команда
|
|
| |
Storm54 | Дата: Пятница, 23 Октября 2015, 13:50 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Подробней можно узнать? Что из себя представляет объект? Если луч, то естественно райкастом проверять, если же какой-то примитив, то можно overlap заюзать (а можно вообще написать тригонометрией)
|
|
| |
|