Показать сообщение отдельно
Старый 25.02.2016, 13:54   #2295
Владимир
AnyKey`щик
 
Регистрация: 19.02.2016
Сообщений: 4
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Вопросы от новичка

Доброго времени суток.
Собственно вот и я пришел на ваш форум поскольку начал осваивать Unity. За тупые вопросы сильно не пинайте, поскольку изучаю Unity всего месяц, притом месяц же изучаю и C#(более того не программер, в молодости учил только C++ и то дальше простеньких программ не пошло), поэтому вопросы могут быть весьма тупыми. И то и другое изучаю на боевую, т.е. пишу простенькую игрушку.
Итак собственно вводные:
Есть объект игрока, есть объект врага и есть объект растения. Урон наноситься игроком врагу или растению и врагом всем остальным Урон наноситься непосредственным контактом. Если рассматривать коллизию 1:1 то проблем написать такой код у меня нет, есть проблема с написанием кода 1:многим. Моя цель выбрать из всех объектов с которыми я столкнулся один, с минимальным значением одной из переменных экземпляра объекта, а для этого мне нужно получить количество объектов с которым столкнулся мой игрок.
Вот кусок кода:

 void OnCollisionEnter2D(Collision2D coll)
    {
        // Получаем количество коллизий.
        int count = coll.contacts.Length;
        //Объявляем переменную объекта.
        GameObject ob;
        //Объявляем переменную объекта с минимальным hp.
        GameObject minHpOb;
        Debug.Log("Количество коллизий : " + coll);

        //Задаем цикл  в котором перебираем всех противников
        for (int i = 0; i < coll; i++)
        {

            //выбираем только объекты с тегами Plant, Player, Enemy
            if (coll.contacts[i].collider.gameObject.tag == "Plant" || coll.contacts[i].collider.gameObject.tag == "Player" || coll.contacts[i].collider.gameObject.tag == "Enemy")
            {
                //Получаем GameObject и присваиваем переменной.
                ob = coll.contacts[i].collider.gameObject;
                Debug.Log("Имя объекта с которым столкнулись : " + ob);
            
                //первое присваивание minHpOb объекту ob.
                if (minHpOb = null)
                {
                    minHpOb = ob;
                }
Тут то и возникла главная моя проблема. Как я понимаю функции OnCollisionEnter2D и OnCollisionStay2D обрабатываются для каждой коллизии отдельно. Т.е. по факту переменная count = coll.contacts.Length; будет всегда равна 1(хотя вроде как до 5 версии все работало правильно и выдавалось именно общее количество коллизий). Собственно из этого и вытекают мои вопросы.
1. Мне собственно нужно получить количество объектов с которыми столкнулся объект игрока. Что почитать? Офф. справку читал, но если честно мало, что понял в данном конкретном вопросе.
2.OnCollisionExit2D срабатывает при любом выходе из коллизии даже в случае множественных коллизий(т.е. если из нескольких действующих коллизий одна прервалась)?
Готовых решений не ищу, скорей нужен совет, что почитать или как лучше реализовать в плане логики алгоритм получения количества коллизий, если выбранный мной простой путь не работает или в корне не верен.
Заранее спасибо!

Последний раз редактировалось Владимир, 26.02.2016 в 08:07.
(Offline)
 
Ответить с цитированием