Суббота, 09 Ноября 2024, 01:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос-[ответ] по Unity
QWER56Дата: Понедельник, 09 Августа 2010, 10:58 | Сообщение # 1
старожил
Сейчас нет на сайте
Вопрос-[Ответ] по Unity3d

  • База скриптов Unity3d
  • Курс Уроков по Unity 3D от Alcatraz

    ConsMark - поисковик по интернет магазинам.

    Сообщение отредактировал QWER56 - Вторник, 26 Июля 2011, 20:54
  • lentinantДата: Четверг, 03 Июля 2014, 16:33 | Сообщение # 6221
    ленивый программист
    Сейчас нет на сайте
    allods, я про List.
    Цитата allods ()
    если заполнить массивы другими объектами (любыми) то все массивы заполняются объектом который зашел в триггер, поскольку имя его не равняется именам други

    Вообще не понимаю, что ты там делаешь. Самая стандартная проверка на присутствие в массиве - делаем логическую переменную, присваиваем ее false, пропускаем foreach сравнение целевого объекта с каждым элементом массива, если совпадение есть, логическую переменную делаем true, выходим с итератора с помощью break.
    Судя по описанию твоей проблемы, ты вообще делаешь что-то типа
    Код
    if(players[i]!=other.collider.gameObject)
    {
          players[i]=other.collider.gameObject;
    }


    Добавлено (03.07.2014, 16:33)
    ---------------------------------------------
    Цитата allods ()
    Я сказал что заполняет весь массив сразу , а потом и эти все уже заполняются другим объектом

    Так к чему тогда вообще пустые массивы?


    Когда-то тут будут ссылки на крутые проекты. Или нет.

    Сообщение отредактировал lentinant - Четверг, 03 Июля 2014, 16:35
    allodsДата: Четверг, 03 Июля 2014, 16:37 | Сообщение # 6222
    почти ветеран
    Сейчас нет на сайте
    Цитата lentinant ()
    Так к чему тогда вообще пустые массивы?

    Ладно не в этом дело.
    Я не знаю как
    Цитата lentinant ()
    пропускаем foreach сравнение целевого объекта с каждым элементом массива
    lentinantДата: Четверг, 03 Июля 2014, 16:49 | Сообщение # 6223
    ленивый программист
    Сейчас нет на сайте
    Код
    bool ArrayContains (GameObject[] objectArray, GameObject targetObject)
    {
         flag = false;
         foreach (GameObject go in objectArray)
         {
             if(go == targetObject)
             {
                 flag = true;
                 break;
             }
         }
         return flag;
    }


    Вот такой простенький метод для проверки. Правда, типизированный, но для твоей задачи должен подойти. Если нужен JavaScript, ничем помочь не могу, переводите сами.


    Когда-то тут будут ссылки на крутые проекты. Или нет.
    allodsДата: Четверг, 03 Июля 2014, 17:08 | Сообщение # 6224
    почти ветеран
    Сейчас нет на сайте
    lentinant
    Спасибо,

    На C скрипты перешел с новым проектом , 3 дня назад, поэтому на JS перевод мне не нужен.

    Поскольку я новый в С не мог бы ты мне сказать как обращаться к ArrayContains ? как мне отсылать other.collider.gameObject
    lentinantДата: Четверг, 03 Июля 2014, 18:48 | Сообщение # 6225
    ленивый программист
    Сейчас нет на сайте
    если у тебя есть массив GameObject-ов players, и объект, который ты получил со столкновения other.collider.gameObject, то метод вызывается
    Код
    bool flag = ArrayContains(players, other.collider.gameObject);


    Когда-то тут будут ссылки на крутые проекты. Или нет.
    NEBRДата: Пятница, 04 Июля 2014, 09:25 | Сообщение # 6226
    почти ветеран
    Сейчас нет на сайте
    Цитата allods ()
    Получается , я делаю массив куда заношу игроков в которых попал меч, и проверяю является ли игрок одним из тех в кого он попал. Если еще не попадал то отнимаем ХП. После завершения удара я отчищаю все массивы

    Слушай, если вся эта заморочка с массивами нужна только для одного объекта "игрок", чтобы вычитать у него жизнь, рекомендую сделать все изначально иначе. Массивы + OnTriggerEnter на каждом объекте - это все очень прожорливо.
    А чтобы исключить попадание игрока под удар за один взмах меча два и более раз - возьми короутин например. И OnTriggerEnter попробуй сделать не на мече, а на игроке (не знаю, часто ли он у тебя сталкивается с коллайдерами, возможно и лучше будет оставить на мече, ну не суть)
    Скрипт такой например (висит на игроке)
    Код


    int _hp = 10;
    bool _flag;

    void OnTriggerEnter(Collider other)
    {
    if(!_flag)
    {
    if(other.tag == "sword")
    {
    _hp -= 1;
    _flag = true;
    StartCoroutine(Delay(1.0f)) // здесь исключаем повторное попадание под меч (из расчета что взмах меча длится одну секунду)
    }
    }
    }

    IEnumerator Delay(float waitTime)
    {
    yield return new WaitForSeconds(waitTime);
    _flag = false;
    }


    King Size #Gamiron12
    allodsДата: Пятница, 04 Июля 2014, 14:34 | Сообщение # 6227
    почти ветеран
    Сейчас нет на сайте
    Спасибо lentinant и NEBR

    Я думаю надо как то по другому все реализовать , дело в том что это мультиплеер, там у каждого игрока меч.
    AdomДата: Пятница, 04 Июля 2014, 17:40 | Сообщение # 6228
    Печенька!
    Сейчас нет на сайте
    allods, А ты начинал делать обновления ? Типа если версия старая то качает новую ? Ибо я вообще тупой и не могу разобраться что да как ((
    allodsДата: Пятница, 04 Июля 2014, 18:49 | Сообщение # 6229
    почти ветеран
    Сейчас нет на сайте
    Нет это можно сделать в конце
    AdomДата: Пятница, 04 Июля 2014, 19:00 | Сообщение # 6230
    Печенька!
    Сейчас нет на сайте
    allods, Эх. Просто я забился на этом моменте )
    allodsДата: Пятница, 04 Июля 2014, 22:26 | Сообщение # 6231
    почти ветеран
    Сейчас нет на сайте
    делай другое, не теряй время, потом вернешься .
    AdomДата: Суббота, 05 Июля 2014, 13:59 | Сообщение # 6232
    Печенька!
    Сейчас нет на сайте
    Хорошо. Тогда еще вопрос. Как сделать DeadMatch ? Именно само воскрешение ?
    ЛевшаДата: Суббота, 05 Июля 2014, 14:43 | Сообщение # 6233
    почти ветеран
    Сейчас нет на сайте
    Цитата Adom ()
    Как сделать DeadMatch ? Именно само воскрешение ?

    Обьект не *убивать, а перемещать в точку респавна.


    X.cor.R (Prologue)
    AdomДата: Суббота, 05 Июля 2014, 14:52 | Сообщение # 6234
    Печенька!
    Сейчас нет на сайте
    Левша, ТЫ ГЕНИЙ! Блин. Как мне в голову то не пришло!?
    ЛевшаДата: Суббота, 05 Июля 2014, 17:58 | Сообщение # 6235
    почти ветеран
    Сейчас нет на сайте
    smile Проигрываешь анимацию смерти, ждешь нужное время, деактивируешь обьект, перемещаеш, активируешь.
    А можно и просто рендер с коллизиями выключить.


    X.cor.R (Prologue)

    Сообщение отредактировал Левша - Суббота, 05 Июля 2014, 17:59
    AdomДата: Суббота, 05 Июля 2014, 19:23 | Сообщение # 6236
    Печенька!
    Сейчас нет на сайте
    Левша, А вот с активацией и деактивацией проблема. Почему-то не хочет обратно включать через SetActive
    allodsДата: Суббота, 05 Июля 2014, 19:53 | Сообщение # 6237
    почти ветеран
    Сейчас нет на сайте
    enabled = true/false
    AdomДата: Суббота, 05 Июля 2014, 19:55 | Сообщение # 6238
    Печенька!
    Сейчас нет на сайте
    Попробую )

    Добавлено (05.07.2014, 19:54)
    ---------------------------------------------
    И еще как сделать отображение кол-во подключенных игроков ?

    Добавлено (05.07.2014, 19:55)
    ---------------------------------------------
    Именно у всех . У меня получилось только для сервера (

    ЛевшаДата: Суббота, 05 Июля 2014, 23:12 | Сообщение # 6239
    почти ветеран
    Сейчас нет на сайте
    Цитата Adom ()
    Почему-то не хочет обратно включать через SetActive

    Надеюсь скрипт не насамом деактивируемом обьекте висит ? smile

    Цитата Adom ()
    У меня получилось только для сервера

    Ну так и посылай клиентам при каждом изменении. cool


    X.cor.R (Prologue)

    Сообщение отредактировал Левша - Суббота, 05 Июля 2014, 23:32
    lakorisДата: Воскресенье, 06 Июля 2014, 00:45 | Сообщение # 6240
    постоянный участник
    Сейчас нет на сайте
    Цитата Левша ()
    Надеюсь скрипт не насамом деактивируемом обьекте висит ?

    хаха)
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг