XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > StarCraft (только чтение)> Галактическая академия
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
yellyex

offline
Опыт: 4,267
Активность:
Методы поиска объектов
Здравствуйте! С этой темой у меня связано очень много вопросов, на которые очень бы хотелось получить ответы. Я думаю, что обсудив всё, что я спрошу мы раз и навсегда закроем тему - как сделать так, чтобы снаряды, выпускаемые оружием или способностями, находили препядствия и сталкивались с ними. Собственно я и делаю именно это. Внизу этого поста я прикрепил тестовую карту, с которой я начну спрашивать, то что для меня непонятно. Сейчас я опишу свой метод снаряда, который вылетает из оружия и не сталкивается с препядствиями.
Первое, что нам нужно - это обязательно надо создать снаряд. Снаряд, кстати, это обычная боевая единица (юнит), которая отличается, всего-то навсего, процедурой движения. Я надеюсь вы уже умеете создавать юнитов и менять им процедуры движения, иначе вы не будете представлять о чём я тут говорю. Далее будет последовательность построения всех действий до, собственно, моих вопросов (моего тупика). Итак:
  1. В оружии, которым стреляет наш юнит, в поле эффект, стоит эффект типа запуск снаряда. Эффект типа запуск снаряда позволяет нашему юниту, который является снарядом, появится в игровом мире, то есть появиться именно таким образом. Просто существует много разных способов сотворить юнитов на карте, но это один из них. Этот запуск снаряда сделан так, чтобы снаряд обязательно перемещался (летел) после выстрела или применения соотвествтующей способности от того, кто выстрелили или применил способность, туда, (не знаю куда) в какую точку (на местности в плоскости) или цель (игровой объект - юнит или декорация) он был направлен или применён. Ну надеюсь понятно. Потому что, если нет, то я вас убью! Шутка.
  1. Процедура движения снаряда. Это не обычная процедура движения, которой обладает любой нормальный юнит (морпех или зилот). Она отличается от обычной тем, что (из моего личного опыта) объект, обладающей ей, постоянно должен перемещаться. У процедуры движения снаряда есь четыре типа перемещения. От самого простого (линейный) до сложного (баллистический). Мы работает с баллистической. Находятся варианты в поле фазы движения - направляющая. Самое главное, что скорость движения снаряда задаётся именно в его процедуре движения в поле фазы движения - скорость. Также в процедуре движения снаряда можно задать время жизни снаряда. Если это время закончится, то снаряд просто напросто исчезает (не знаю, нужно ли его удалять в ручную, чтобы не оставался или нет). Также можно сделать высоту, гравитацию и ещё кучу всяких ништяков, от которых я просто тащусь, но я разбираю сейчас не это, так что пойдём уже дальше. Так как у нас снаряд вылетает из оружия, а оружие стреляет только по вражеским юнитам, то значит конечная цель нашего снаряда - целевой объект (юнит). К этой цели и летит наш снаряд и долетая до неё он ничего не сделает, так как он пока у нас пустой. Единственное, что произойдёт - это засчитается, то что снаряд долетел до цели. Теперь убираем момент, когда снаряд целенаправленно, словно самонаводящиеся ракета, летит к цели безпрепядственно. Заходим в процедуру движения нашего снаряда и находим поля фазы движения - ориентация и фазы движения - тип проверки прибытия. В первом делаем цифру 0, а во втором ставим значение никогда. Всё! Теперь наш снаряд полетит прямо по той траектории (линии), куда смотрит наш стреляющий юнит. Теперь зададим скорость снаряда равную 8 и тайм-аут фазы 5.
  1. Теперь самое простое и понятное. Сейчас мы имеем то, что снаряд был выпущен по цели, но летит прямо от лица выстрелившего. Такой снаряд летит через всю карту и исчезает только тогда, когда кончается его тайм-аут фазы. Нам надо сделать так, чтобы этот снаряд находил, например юнита (любого), и наносил урон. Я отталкиваюсь от реальности, чтобы ход моих мыслей был понятен. Значит нам нужен эффект типа урон и? И то, чтобы наш снаряд искал именно юнитов, а не летел, как сейчас сквозь всё и вся. Значит идём логически (разумно). Первое это то, что снаряд, как в реальности, сталкивается с объектом. Как это сделать? Я обратился к валидаторам. Но, как ни странно, то чтобы проверить, что наш снаряд столкнулся с юнитом, нам надо сделать так, чтобы снаряд наносил урон. Значит создаём эффект типа урон и вставляем этот эффект в алгоритм типа игровой эффект. В этом алгоритме мы находим поле (в самом низу) эффект во время действия и вставляем наш эффект урона. В карте немного не то, но начинал я делать именно так, как пишу сейчас. Дальше в поле количество периодов ставим цифру 1. То есть это сколько раз сработает наш алгоритм, который воспроизведёт эффект урона и, соответственно, нанесёт урон. Теперь мы вставляем этот алгоритм в наш снаряд (вкладка - единица). В самом верху поле алгоритмы. Что у нас получилось:
А - Снаряд вылетает по прямой от лица стрелявшего.
Б - Как только снаряд появляется на карте, он тут же применяет наш алгоритм, который запускает эффект урона. Урон наносится снаряду.
В - Наш снаряд уничтожен при выстреле.
  1. Методы поиска препятствий для снарядов. Ну вобщем-то мы подошли к главным вопросам интересующие меня. Начнём с того, что доделаем наш снаряд. Сделаем так, чтобы снаряд искал юнитов, и вообще любое препятствие, и наносил урон. Для того, чтобы снаряд наносил урон и, соответственно, самоуничтожался из-за этого, нужно сделать эффект типа поиск в области и вставить туда эффект урона. Не забудьте указать радиус поиска. Он должен быть не большим, так как это не атомная бомба, а плазменный снарядик, величиной с яблоко. Ну ладно, чуть побольше, с яблище. Теперь наш снаряд наносит урон по области, радиус которой мы только что указали, и задеваем, тем самым, нашего стреляющего юнита. Чтобы этого не происходило надо сделать задержку срабатывания алгоритма, который запускает эффект урона ну и так далее. Опять создаём алгоритм типа игровой эффект, ставим длительность на 0.2 секунды. Создаём эффект типа применить алгоритм. Вставляем в этот эффект алгоритм, который запускает эффект урона и всё. Теперь в снаряде вместо первого алгоритма ставим второй, который 0.2 секунды. Вот у нас получилось, то что снаряд активирует алгоритм с уроном после 0.2 секунды после своего появления на карте. Но всёравно умирает. Всё дело в том, что алгоритм применяется всегда, а нам нужно, чтобы он применялся тогда, когда снаряд подлетит к юниту. Как это сделать? Я обратился к валидаторам. Методом научного тыка я нашёл валидатор типа подсчёт по области. Поставил в нём:
Место запуска - ЗначениеВыбранная единица/точка
Место запуска - Эффект(Нет)
Области - Бонус к радиусу(0)
Области - Валидатор((Нет))
Области - Количество(-1)
Области - Оператор сравнения(Меньше или равно)
Области - Радиус(0.1)
Области - Сектор(360)
Оператор сравнения - Больше
Расположение - Значение - Исходная точка/боевая единица
Расположение - Эффект(Нет)
Фильтры поискаИсключено На себя, Стазис, Смерть, Неуязвимый
Теперь вставляем этот валидатор в алгоритм, который наносит урон (в самом верху - отключить который) и вуаля! Наш снаряд после 0.2 секунды не уничтожается, как прежде, а ждём, пока фильтры поиска в валидаторе будут актуальны радиусу этого валидатора (понятно?! :) ) В этом фильтре я указал не реагировать, не применять алгоритм наш, на самого себя (сам снаряд) на любой труп, на стазиз (астрал по-варкрафту) и неуязвимых юнитов. На всё остальное алгоритм сработает и снаряд будеть уничтожен и нанесёт урон в области. Кстати, об областях. В этом валидаторе тоже есть область. Это облать в которой начинается поиск единиц, которых мы указали в фильтре. То есть будут искаться все объекты, которые есть в фильтре, кроме исключённых.
Далее тема будет доведена до ума, будут расмотрены и другие валидаторы по нахождению уступов и декораций (валидатор типа проходимая местность) и станет неким пособием для новичков, после того, как будут даны ответы на вопросы интересующие меня и после того, как я отдохну ведь выражение мыслей в слова и текст для меня большой труд.
Вопросы:
  1. Что обозначают значения в поле валидаторов место запуска - значение, расположение - значение (и не только):
  • Внешняя боевая единица
  • Внешняя точка
  • Внешняя точка/боевая единица
  • Выбранная единица/точка
  • Единица или точка происхождения
  • Единица происхождения
  • Заклинатель - боевая единица
  • Заклинатель - внешняя единица
  • Заклинатель - внешняя точка
  • Заклинатель - точка
  • Заклинатель - точка (видимо боевая единица)
  • Заклинатель - точка/боевая единица
  • Исходная боевая единица
  • Исходная точка
  • Исходная точка/боевая единица
  • Не задано (спасибо - это я понял)
  • Точка происхождения
  • Целевая единица
  • Целевая точка
  • Цель - внешняя единица
  • Цель - внешняя едница/точка
  • Цель - внешняя точка
Ребят. Я даже не знаю где эти значения практиковать. Как увидеть между ними разницу. В валидаторе я менял, но вроде работал также. Желательно объяснить каждое значение. Для меня это важно.
  1. Что значат значения Флаги посика:
  • Запрос помощи
  • Одинаковый уровень рельефа
  • Расширение в зависимости от радиуса обзора боевой единицы
  • Смещение - развернуть в область
  • Смещение в зависимости от радиуса обзора боевой единицы
  • Центрировать при запуске
Тоже не понимаю для чего всё это.
  1. Валидатор Проходимая местность служит для поиска проходов в местности. Блокираторами местности служат декорации, уступы и прочее.
  • Поиск - включён
Если поиск включён, то валидатор сработает моментально.
Если поиск выключен, то валидатор сработает тогда, когда снаряд подлетит к уступу или декорации. В чём подвох? Я не понял принципа значения этого поиска.
  1. Валидатор Подсчёт по области Поля:
  • Области - оператор сравнения
  • Оператор сравнения
Два разных оператора, я не знаю как с ними обходиться. Настраивал их до тех пор, пока не получил нужного результата, но приница работы так и не понял. Опять.
На этом всё. Это все вопросы, которые я хотел задать, закончились. Как только будут получены ответы, состряпаю статью по не самонаводящимся снарядам.
P.S. Простите за грамматические ошибки, писал тему в 2 ночи, а закончил в 4:30. Потом исправлю :)

Отредактировано yellyex, 07.11.2012 в 04:41.
Старый 07.11.2012, 04:35
Харгард
Epic
offline
Опыт: 7,829
Активность:
Делал что-то похожее, тоже с баллистической процедурой без проверки прибытия, но без валидатора "подсчет по области"

В эффекте "Запуск" в поле "Эффекте запуска" один эффект типа "Применить алгоритм" который дает снаряду периодический алгоритм, который каждые 0.0124 сек применяет эффект "Поиск", ищущий в области вокруг снаряда цели и применяющий к ним эффект "Набор" содержащий эффекты "Урон" и "Самоубийство" (Suicide).

Эффект "Самоубийство" нужен чтобы снаряд уничтожался попадая в цель. Иначе он живет до "Тайм аута фазы" в процедуре движения.

А так. написано тяжело и совсем нет картинок :)
Старый 10.11.2012, 12:58
Epselot

offline
Опыт: 3,592
Активность:
И ко всему этому я долго мучился, но так и не понял как сделать чтоб снаряд не тащился по земле а выстреливал из дула оружия... Вижу у тебя он тоже как червь по земле ползает=))
Некоторые поля используются в определённых ситуациях при определенных настройках на что то влияют.
Старый 30.11.2012, 17:21

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 15:32.