forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Постмор (http://forum.boolean.name/forumdisplay.php?f=160)
-   -   I.D.S. MONSTERS (http://forum.boolean.name/showthread.php?t=20763)

Crystal 02.05.2019 05:59

I.D.S. MONSTERS
 
Вложений: 3
Итак, сие безобразие обсуждалось на моём стриме POKEMON GO.
Идея никуда не ушла.

Проект I.D.S. MONSTERS (I.D.S. от слова interdimensional).
Вдохновение черпанул в игре "Pokemon Blue" ещё будучи пиздюком (школьником).
Геймплей планируется значительно схожим с источником вдохновения,
т.е. простой как угол дома, по этому не требуется даже физдвижок,
эти ваши регдоллы (нафуй ненужонные) и прочие шедевральные
технологии современного геймдева (вообще нихрена не надо).
Исходя из минимальных требований движок и платформа ещё
не выбраны (ибо насрать, хоть Game Maker).

Сложность вижу в разработке вселенной, моделинге, и анимации.
Вопреки моему предыдущему (ни к чему не приведшему) опыту
разработки компьютерных игр, построил для себя альтернативный
способ разработки (долой кодинг с первых минут, даёшь творчество!).

План таков:
1. Разработка вселенной игры, а основа вселенной, это монстры,
и их многообразие. По этому разработка начинается с создания
артов самих монстров, на бумаге, ручками (шариковыми, и теми что из жопы растут).
2. Моделинг монстров.
3. Анимация.
4. Программирование игрового движка.
5. Сюжет-квесты-хуесты-и тд.

Прежде чем моделить монстров, их чёрт подери ещё нужно придумать,
и мне потребуется от 100 до 200 разных особей. (дохрена).

На сегодняшний момент из первого пункта дорожной карты разработки
готово 3 монстра (я бескрайне ленив, проект без сроков, и обещает быть мегадолгостроем).
Первых мудачков прикрепляю к посту.

Немного о вселенной игры:

Неведомая фуйня происходит в нашем прекрасном мире, везде да всюду
открываются порталы, через которые выскакивают лютые монстры,
которые убивают, сжирают, испепеляют всё, что движется.
Человеческое кинетическое оружие против них бессильно,
и популяция хомосапиенсов уменьшается не по дням, а по часам.
Прячась от монстров то там то сям и параллельно их исследуя
человеки открывают супер-поле, которым покрыт каждый монстр,
именно оно не даёт пробить мудачков обычным оружием.

Недалекое будущее, человеки на основе собранных данных об
супер-поле пытаются воспроизвести своё, но сделать этого не получается,
однако результатом исследований супер-поля, и порталов
рождается новое поле, названное антиполем. Антиполе не
создаёт никакой защиты от физического воздействия, однако
через него не может пройти монстр с супер-полем, ни прямиком,
ни используя портал, так-как внутри периметра антиполя порталы
монстров вообще не открываются. Дальнейшие работы над спектрами
антиполя приводят к созданию первого портативного анти-монстр оружия.
Дубина с ядерной батареей, генерирует небольшое антиполе в
области ударного наконечника, оно способно частично рассеивать
супер-поле, позволяя нанести удар наконечником по телу монстра.
Эффективности этого оружия хватает лишь на то, чтобы уничтожать
небольших, слабых монстров. К сожалению человекам не хватает
технологического развития, чтобы создать более эффективное оружие.
Однако сразу же после изобретения чудо-дубинки остатками земного
правительства начинает формироваться силовая структура под названием
"MONSTER RANGERS", дословно "Монстр Рейнджеры (вы и так поняли)".
Задача силовиков: охрана периметра, сопровождение, помощь
в исследованиях. Грубо говоря, сопровождают кОрОваны, а так-же
приносят учёным для изучения остатки забитых дубинами монстров.
Сбор особей для исследования приносит новые плоды, учёные
достаточно далеко продвигаются в исследовании порталов монстров.
Однако становится ясным, что ничто без обладания собственным
супер-полем не может пройти сквозь портал не будучи испепелённым,
по этому отправить через портал разведгруппу, чтобы узнать откуда
приходят монстры - не представляется возможным. Дальнейшие
исследования приносят новые открытие, и самое переломное
достижение учёных даёт новые возможности силовикам.
Новой вершиной науки являлось создание небольшого
подпространственного кармана, в котором можно было разместить
пойманного монстра. Теперь возможным стало изучение не только
забитых до смерти монстров, но и вполне живых здоровых особей,
которых загоняли дубинами в карман через портал работающий
по принципам порталов, через которые монстры попадают на землю.
Время идёт, технологии развиваются. Теперь подпространственный
карман может быть генерируемым портативным устройством,
выданным силовикам. Портативные генераторы подпространственного
кармана (ПГПК) окрестили "Гиперкубами". Началась новая эра
борьбы с I.D.S. Монстрами. Учёные пришли к выводу, что раз
пока нет возможности создать более эффективное оружие, для
нанесения ущерба более крупным монстрам, то в качестве оружие
можно использовать самих монстров. Стратегия проста, пинаем
дубиной мелкого монстра, и когда он почти склеил ласты,
помещаем его в подпространство гиперкуба. Наше подпространство.
наши правила. Используя свои собственные физические законы
пространства воздействуем на монстра так, чтобы подчинить
его волю владельцу гиперкуба, фактически создаем полностью
покорного раба, которого используем в бою. Устраивая бои
между мелкими монстрами, можно увеличивать их силу и выносливость,
для того, чтобы сражаться с более сильными монстрами. которых
мы не можем пробить дубинами, а после ловить их в кубы. Чем сильнее
монстр, тем крупнее подпространственный карман нам требуется,
над этим в поте лица работают учёные, и уже смогли создать несколько
продвинутых версий гиперкубов. Сами гиперкубы неспособны
продолжительное время генерировать карман, так-как аккумулятор
быстро проседает, по этому каждому рейнджеру выдается огромный
наспинный ядерный генератор-ранец, а также гиперперчатка,
связанная с ним толстым кабелем. На самой перчатке размещается
пять гиперкубов, которые получают заряд от ядерного генератора.
Больше пяти гиперкубов современные ядерные ранцы вытянуть не могут,
по этому пять монстров это максимум, который может взять с собой
рейнджер. Дальнейшее изучение монстров, более крупных, добытых
рейнджерами принесло новые плоды в изучении порталов. Теперь
человекам доступна технология мгновенного перемещения гиперкубов
через порталы. В мностр-центрах, (в которых кстати уже подлечивают
опиздюленных монстров) создают специальные ячейки-хранилища
для гиперкубов, которые держат их в заряженном состоянии. Ячейки
называют стеками, каждому рейнджеру выдается стек для хранения
монстров, которых он не может взять с собой. Стек что-то вроде
банковской ячейки, только храним мы в ней не деньги, а гиперкубы
с монстрами. Правительство гарантирует каждому рейнджеру
бесплатный стек за счет государства расчитаный на 10 гиперкубов,
но а если ты ниибаццо коллекционер, и не учёным сдаёшь пойманных
монстров, а себе оставляешь, то соизволь платить за расширение стека,
всё-таки на его содержание как минимум дохрена энергии тратится.
Вернемся к ловле монстров, как же она происходит? Используя
чудо-дубину, или пойманного монстра, мы забиваем тварь до присмертного состояния,
и пытаемся погрузить её в подпространственный
карман гиперкуба. Недостаточно отмудоханный монстр в состоянии
разрушить карман ещё до того, как куб его подчинит, что приводит
не только к разрушению кармана, но и к уничтожению куба,
по этому рейнджеру рекомендуется брать на охоту по больше кубов.

Кто мы в игре? Мы мудак, рукожоп, который не нашёл себе места
ни среди рабочих, ни среди учёных (а в правительстве и подавно ненужен),
по этому нас зелёным новичком отправляют в отряд рейнджеров
для обучения их ремеслу, и несения воинской повинности.
Защита человечества, и ловля монстров теперь единственная
цель вашей жизни.

ant0N 02.05.2019 13:29

Ответ: I.D.S. MONSTERS
 
Круто! как фильм посмотрел.

Crystal 11.05.2019 07:16

Ответ: I.D.S. MONSTERS
 
Вложений: 4
Расширяем вселенную говноконцептартами будущих 3D монстров.
Их уже 7, до этапа моделирования нужно наработать базу из 100-200 монстров.

На очереди в зарисовку: Ваффлозавр, Травинка, Камышник.

ant0N 11.05.2019 20:33

Ответ: I.D.S. MONSTERS
 
Для атмосферы надо еще описание каждого монстра, типа:
глазуха - стадное растение, распространена во влажных лесах, питается человеком, размножается сексом почкованием... и тд.

Crystal 11.05.2019 21:52

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ant0N (Сообщение 316242)
Для атмосферы надо еще описание каждого монстра, типа:
глазуха - стадное растение, распространена во влажных лесах, питается человеком, размножается сексом почкованием... и тд.

Это на заключительном этапе добавляться будет в основном.
Людьми они почти все питаются, и вообще всем живым.
Насчёт влажных лесов, я не уверен, что такие вообще будут,
у нас постапокалипсис. Человечество пока изобретало способ
уничтожения монстров, перепробовало всё, вплоть до ядерного оружия.
Так-как монстры вылезли по площади всей планеты, досталось ей не слабо.

Crystal 19.05.2019 08:53

Ответ: I.D.S. MONSTERS
 
Вложений: 4
Расширяем вселенную, подъехало 4 монстра, их арты прикреплены к посту.
Теперь их уже 11!

По просьбе выкладываю небольшое описание монстров.

1. МАТ:
Искусственная форма жизни, наделённая продвинутым по сравнению
с земными роботами интеллектом. Относительно небольшого размера,
состоит из металлических частей. Перемещается с помощью левитации.
Имеет мощные челюсти с острыми зубами, а так же способен бить
противника электрическим током.

2. МАТРОН:
Металлический механический роботизированный монстр способный
размышлять логически, и самостоятельно принимать выбор, довольно
умная хреновина. Является перевоплощением монстра МАТа. Более
сильный, более прочный, летает, бьёт током! Внутри него сокрыт
второй более слабый металлический монстр, способный стрелять разрывными снарядами.
Не смотря на то, что это вроде бы два монстра, интеллект у них коллективный,
один разум на двоих. Если уничтожить основного монстра, в результате
взрыва погибнет и внутренний, однако перед уничтожением основы,
мелкий может эвакуироваться, и занять место на поле боя как
самостоятельная единица. Название "МАТРОН" ему присвоено,
из-за схожести с устройством деревянной игрушки "МАТРЁШКА".
Его более слабая форма "МАТ" была встречена позже, и так-как
конструктивно не обладала сходством с матрёшкой, но была
родственником матрона, получила своё название в виде сокращения
до трёх букв.

3. МАТРОНИТ:
Матронит, это перевоплощение матрона в более развитую форму.
Толще броня, выше интеллект, способность атаковать электрическим
током, летает. Внутри себя содержит двух металлических летающих монстров,
объединённых с ним общим коллективным интеллектом. Внутренние
монстры поливают противника шквалом разрывных снарядов, а так же
способны покидать своего носителя, и вести бой как самостоятельная
единица. Находясь внутри уничтожаемого матронита мелкие монстры
неминуемо разрушатся, по этому монстр старается выпустить свою
маленькую летающую поддержку по раньше. Матронит
во истину является королём матов и матронов, повстречать такого
монстра большая удача для продвинутого монстр рейнджера
коллекционера, однако для неподготовленного противника
представляет наивысочайшую смертельную опасность, вернее
говоря, НЕМИНУЕМУЮ СМЕРТЬ!

4. ГЛАЗУХА:
Растение напоминающее огромный плод, бегает на двух ножках,
и ищет падаль с помощью большого количества зорких глаз.
Она питается соками разлагающихся трупов через свои
ножки. Глазуха способна превратить кого угодно в труп,
выстреливая на 360 градусов свои острые семечки! Так что
близко не подходите!

5. ГЛАЗОЙД:
Перевоплощённая форма глазухи. Это агрессивное растение большого
размера, питается падалью как и глазуха, всасывая трупные соки
через четыре лапки. Глазойд не любит долго искать падаль, и
предпочитает превращать в падаль всё, что движется, используя
свои мощные клешни. Он не имеет острых семечек, за то
у него есть острые листья, для разрубания живности на части.

6. ЧИКА-ПУКА.
Подлый маленький ублюдок! Поджидает жертву в кустах,
расщелинах, да где угодно, и при приближении цели,
в яростном прыжке впивается в неё своими четырьмя острыми
хвостами, цепляется всеми руками, и начинает адово пердеть.
Пердёж у чика-пуки крайне ядовитый, и быстро умерщвляет
вдыхающую его жертву. Слово "ПУКА" в названии монстра
берётся именно из-за его лютого пердежа, однако происхождение
первой части названия установить так и не удалось, так-как
придумавший его человек давно погиб в пасти ваффлозавра.

7. ВАФФЛО:
Небольшой медлительный плоский монстр. Получил своё название
из-за схожести формы туловища и фактуры кожи с вафлями.
На деле же не такая он и вафля, так-как используя особую
челюсть, глубоко и моментально вгрызается во врага, и вырывает
куски плоти. Пасть ваффло всегда нагрета до высоких температур,
по этому уже откусанный кусок плоти почти моментально проходит
термическую обработку, и он всегда питается только жареной пищей.

8. ВАФФЛОЗАВР:
Перевоплощённая форма "ВАФФЛО". Крупнее в 3 раза, сильнее,
и голоднее. Наделён такой-же термической пастью способной
моментально врезаться во врага, и вырывать из него кругляши
плоти. На кончике хвоста он имеет длинный прочный штык,
для колющих ударов по жертве. Ваффлозавры иногда развлекаются,
держа ещё полуживую жертву на штыке, и нежно покусывая
её горячей пастью, чтобы хорошенько поджарить как шашлычок перед
употреблением. Очень уж им шкварчание свежей плоти нравится.

9. ТРАВИНКА:
Монстр-растение. Похож на пучок травы с глазом и ножками.
Внутри огромного глаза содержится его мозг, по этому цельтесь
дубиной прямо туда. Атакует противника острой листвой,
кормится соками разлагающегося трупа. Из-за того, что
листва расположена близко к огромному глазу, постоянно его
задевает, и вызывает раздражение выраженное в покраснении.

10. КАМЫШНИК:
Перевоплощение травинки. Огромный глаз превратился в полноценную
голову, на которой появилось два глаза меньшего размера. Теперь
ботва не задевает глаза, что позволило камышнику стать более зорким.
Это растение тоже питается соками разлагающихся трупов,
однако долго не находя падаль, начинает убивать всех вокруг.
Среди ботвы камышника виднеется три рогозникообразные головы
с глазами. Этими глазами он гипнотизирует своих жертв, вгоняя
их в транс, и пока жертвы стоят и не двигаются, режет их острыми листьями.
Название монстр получил за свои гипноголовы в связи с неграмотностью населения,
так-как растение "рогоз" чаще всего называют "камышом".

11. ЛЕСНИК.
Непонятно почему это растение названо лесником, а не каким-нибудь
кустовиком, ведь оно является перевоплощением камышника. Эта
форма монстра позволяет ему питаться свежей плотью, благодаря
большой зубастой пасти. Рогозниковые головы серди ботвы могут
ввести жертву в транс, и даже заставить её подчиниться для
выполнения своих страшных приказов. Лесник может приказать
другому монстру убить себя, или кого-нибудь другого.
Это очень опасный монстр, рейнджерам рекомендуется в одиночку
не приближаться к нему, и не подходить всем вместе с одной стороны.
Не забывайте про острую листву в ботве!

На очереди в зарисовку: Крон, Властелин Времени, Одноног,
Трирук, Семикрылый Пятиглаз.

Arton 19.05.2019 09:36

Ответ: I.D.S. MONSTERS
 
«Камышник» должен зваться «Рогозником»! =D

А может ему логичнее каким-нибудь Болотником становится вместо Лесника? Камыши и рогозы у воды и болот растут.
У меня «Лесник» с чем-то деревянно-лиственным-пеньковым ассоциируется.

А я не читал ничего :crazy:

Мне Чика-Пука нравится! Самое прорисованное существо по-моему из представленного на текущий момент.


Цитата:

Постмор Истории успешного завершения проекта. Разрабы рассказывают, как к успеху шли.
:mda:

Crystal 19.05.2019 14:20

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Arton (Сообщение 316265)
«Камышник» должен зваться «Рогозником»! =D

А может ему логичнее каким-нибудь Болотником становится вместо Лесника? Камыши и рогозы у воды и болот растут.
У меня «Лесник» с чем-то деревянно-лиственным-пеньковым ассоциируется.

А я не читал ничего :crazy:

Мне Чика-Пука нравится! Самое прорисованное существо по-моему из представленного на текущий момент.



:mda:



Действительно скорее Рогозник. Подправим историю имени,
укажем на то, что придумавший название рейнджер,
не мог отличить камыш от рогоза. (на реальных событиях хуле)

Цитата:

Постмор Истории успешного завершения проекта. Разрабы рассказывают, как к успеху шли.
В этом разделе форума нет более подходящего подраздела, так-как все привязаны к движкам,
а в моём проекте движок не выбран, и пока такой задачи не стоит. Ну и собственно, рассказываю
же как к успеху иду ))

Crystal 02.06.2019 07:03

Ответ: I.D.S. MONSTERS
 
Вложений: 5
Долго уже топик без публикаций стоит, по этому добавлю ка я пока
очередных монстров на этапе бесцветности.
Придумывание и рисовка стали идти дольше, т.к. на работе жопа, устаю )
Крона вообще 3 раза перерисовывал (не думал что буду выдирать листы из альбома).
Не совсем доволен кроном, но лучше не получается, будет вот такой.

П.с. семикрылый пятиглаз стал шестикрылым в угоду дизайну.

ant0N 02.06.2019 16:05

Ответ: I.D.S. MONSTERS
 
первый напомнил этого

St_AnGer 02.06.2019 19:19

Ответ: I.D.S. MONSTERS
 
Orb, ты ли это? Что с тобой сделала жизнь в Кваке?

Crystal 02.06.2019 21:21

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ant0N (Сообщение 316314)
первый напомнил этого





Цитата:

Сообщение от St_AnGer (Сообщение 316315)
Orb, ты ли это? Что с тобой сделала жизнь в Кваке?


Это дальние родственники, у них общий дедушка ))

Mr_F_ 03.06.2019 18:05

Ответ: I.D.S. MONSTERS
 
Вложений: 1
Простите, что за х здесь происходит

ABTOMAT 03.06.2019 20:57

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Mr_F_ (Сообщение 316317)
Простите, что за х здесь происходит

Путь к успеху, который мы заслужили

Arton 03.06.2019 23:25

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Mr_F_ (Сообщение 316317)
Простите, что за х здесь происходит

Я это отметил, подобное не первый раз за несколько лет. Но то ли администрации глубоко фиолетово, то ли они согласны хоть с какой-то активностью на форуме. Или всё вместе. :dontknow:

Crystal 04.06.2019 05:51

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Mr_F_ (Сообщение 316317)
Простите, что за х здесь происходит

Здесь вершится история.

А вообще я уже писал, в разделе "проекты" кто-то решил, что замечательно
будет создать рубрики по нескольким движкам, и раздел стал
узконаправленным. Мне тупо негде на форуме было создать свой топ.
Есть же раздел "Программирование игр для компьютеров" и в нём
рубрики по движкам, зачем то же самое делать было в разделе "Проекты"?
На GD как-то по умнее реализовано.

Цитата:

Сообщение от ABTOMAT (Сообщение 316318)
Путь к успеху, который мы заслужили

Вспомнил замечательный трек.


Arton 04.06.2019 06:20

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 316320)
Здесь вершится история.

И всё же можно было бы выбрать другой раздел.
Ох, я право не понимаю нужно мне замечать подобное на форуме, или нет.
Учитывая отсутствие действий со стороны администрации.

Crystal 04.06.2019 06:27

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Arton (Сообщение 316321)

И всё же можно было бы выбрать другой раздел.
Ох, я право не понимаю нужно мне замечать подобное на форуме, или нет.
Учитывая отсутствие действий со стороны администрации.

Такого раздела нет. Создайте.
Не рубрика "Проект на движке васяпупкин 4Д",
а нормальный собирательный раздел "Игровые Проекты".

P.s. Игра ещё на этапе глубокого придумывания, а уже есть первый типамем.
Это точно успех ))




Crystal 22.06.2019 14:58

Ответ: I.D.S. MONSTERS
 
Вы не думайте, что если долго нет постов, то я внезапно забил,
настрой на проект максимальный. В данный момент концептов монстров
уже больше, пока далеко не все в цвете, вот и не выкладываю
(раскрашивать капилярными и шариковыми ручками очень долго и муторно,
но такую вот технологию производства я выбрал).

Однако, чтобы тема жила и развивалась пишу я этот пост.
У меня изначально стоит вопрос с названием будущей игры,
так-как "I.D.S. MONSTERS" это всего лишь рабочее название.
"I.D.S. MONSTERS" это лишь объединённое название монстров
первой волны, если будут аддоны, то будут и другие монстры,
например космические. Самым основным релизным названием
пока предполагается "MONSTER RANGER". Проверил товарный знак,
как минимиум в РФ он свободен, но вот хрен знает что там за рубежом.
Название в игре далеко не на последнем месте, ибо главное, чтобы
оно было коротким, и легко запоминаемым, нести в себе смысл
передающий суть игрового мира, и просто быть благозвучным.
Вы сами знаете, как выглядят названия культовых вселенных:
DIABLO, GOTHIC, THE WITCHER, GTA, DOOM, DUKE NUKEM,
SPORE, STAR CRAFT, UNREAl TOURNAMENT, POKEMON, и т.д.
Есть исключения, где как-то прижились игры с каким-то
огромным названием, но и оно благозвучное.

Короче, что мне от вас надо. Если придумаете что-то более крутое,
чем MONSTER RANGER, и при этом название юридически ничьё,
то я с радостью буду его использовать. Предлагайте ваши варианты.

Crystal 22.06.2019 19:18

Ответ: I.D.S. MONSTERS
 
В перерывах между рисовкой почему бы не по постить?
В данный момент в моей вселенной зарисовано 24 монстра,
и 25ый скоро пойдёт в рисовку. После займусь раскрашиванием,
а это значит на днях концепты уже будут опубликованы на булке.

Давайте поговорим немного о геймплее, некоторые элементы были
мной окончательно утверждены, а другие ещё под размышлением.

Итак, совершенно точно мой клон будет отличаться от покемонов
тем, что в бою одновременно можно призвать сразу трёх монстров.
В классической вселенной покемонов битвы происходят только 1 на 1.
Однако, наша перчатка может контролить разум только лишь 1 монстра.
То есть вполне реальна ситуация, что мы нападём на монстра, а он
свистнет своим дружкам, которые вклинятся в бой, и вот мы уже
стоим в одиночку против троих. Чтобы нам призвать более одного
монстра, потребуются хитрые трюки. например несколько монстров
будут наделены возможностью контролить других, т.е. призвав
такого монстра в бой, у нас появится возможность призвать второго.
Если допустим нашего контроллера убьют первым, то второй призванный
не исчезнет, т.к. освободившаяся перчатка начнёт контролить его.
Третьего монстра можно будет призвать используя того, кто может
контролить сразу двоих, и при этом если контроллер будет уничтожен
первым, то наша перчатка переключится на контроль лишь одного,
в этом её ограничение, и один из двух оставшихся монстров вернётся
в гиперкуб. Будут и другие способы призвать больше одного монстра
за раз, это например монстры не из гиперкуба, однако из чего их
можно будет призывать ещё, это уже спойлер сюжета, а я пока на
такой шаг не готов )

Далее. Под раздумьем находится возможность управления сразу
несколькими монстр рейнджерами, и игра станет ещё больше
похожей на тактическую стратегию. Но это не утверждённое решение.
Однозначно, нужно будет побеждать боссов, с которыми в одиночку
не справиться, и нам точно будут помогать другие рейнджеры,
вопрос в том, давать ли возможность управлять ими игроку, и даже
не только на боссе, но и путешествуя по миру, или же оставить их
только как независимых помощников непосредственно на рейде босса.

В игре однозначно решено использовать некоторых монстров как
транспорт, и для других целей, например для дистанционного сбора
лута.

Баланса не будет. Совершенно точно в игре будет несколько нереально
больших монстров, которых какой-нибудь чикапукой не запинаешь.
Ну, в реальной жизни тоже нет баланса, килька кита не убьёт.
По этому главная цель конечно же добыть самых крутых монстров,
однако подниматься придётся с низов, ловя более мелких.

Монстры будут классифицированы по типу угрозы с их стороны.
всего семь классов:

7. Божественный
6. Титанический
5. Демонический
4. Слоновый
3. Львиный
2. Собачий
1. Мышиный

Мышиного монстр рейнджер буквально в пару ударов сможет забить своей чудо-дубиной.
С собачьим уже выйдет сложнее, однако той же дубиной его можно отхлестать, и поймать.
Монстра львиного уровня почти нереально забить дубиной, только лишь с нереальным везением
и с хорошим запасом шприцов с регенерирующим тело составом.
Слоновый тип можно одолеть только другими монстрами, его атака человека ваншотит.
Демонический разумеется на порядок сильнее слонового, и обладает большой силой,
способен наносить разрушения по большой площади.
Монстр титанического уровня всегда будет не только очень разрушительным,
но и нереально огромным, и очень прочным (НР дохрена).
Такая тварь может легко и просто уничтожить целый город.
Три монстра титанического класса уже зарисованы, и будут опубликованы,
масштаб на рисунках будет понятен сразу.
Насчёт божественного уровня, я ещё не представляю что это будет, но оно будет ужасным.

Помимо классификации уровня угрозы, соответственно будет и классификация по типам монстра.
Главное отличие здесь в том, что у меня не будет водных, огненных, травяных и т.д. монстров
в классическом понимании покемонов. Как это устроено во вселенной покемонов? Допустим в бою
участвует водный тип и огненный, и это означает, что огненному покемону наносится дофига
урона водой, а водному на огонь пофиг. Что за бред? Моя система классифицирует монстров
по материалу, из которого они состоят. например монстр может быть из мяса, и при этом
атаковать огнём. И это не значит, что какие-нибудь атаки водного монстра будут прям эффективны против него.
Вот атаки уже делятся на типы урона, например кинетический, или электрический, и расчёт атаки
будет уже по тому, из чего состоит монстр, из мяса, металла, камня, травы, хитина, или ещё чего.
Я никогда не понимал, почему какой-нибудь сквиртл во вселенной покемонов, может загасить
огненную собаку гроули используя бонусы на атаку водой по огню. Собака ведь состоит из
мяса, а не из огня, она огнём лишь плюётся. И почему гроули не может испепелить сквиртла,
который состоит из мяса и хитина, он же не из воды состоит. В общем у меня всё будет грамотнее.

Crystal 29.06.2019 21:36

Ответ: I.D.S. MONSTERS
 
Вложений: 15
Наконец-то новые монстры подъехали. Теперь все 25 раскрашены.
Фух, реально ручками натёр мазоль на пальце, с виду фигня делов,
но очень трудоёмко однако.

Кстати, один исторический факт:
Цитата:

Автор вселенной покемонов - Сатоси Тадзири.
На создание игры у Тадзири ушло шесть лет – создатель игры хотел
выпустить нечто по-настоящему грандиозное. Игра, где изначально
присутствовало 25 монстров, сначала называлась Capsule Monsters.
Суть игры сводилась к подготовке монстров, обладающих разными
сверхъестественными способностями, к сражением с монстрами других
игроков. Игра заканчивалась тогда, когда одна из команд покемонов
побеждала другую.
Именно с этой можно сказать альфа версией покемонов Тадзири
пришёл в Nintendo, и получил деньги на допиливание своей
разработки в расширенную вселенную до 150 монстров.
Правда деньги выделила не сама жадная Nintendo, а геймдизайнер
придумавший марио, он посчитал проект перспективным.
Так что, я уже хотя-бы придумал и зарисовал то же количество монстров,
по верному пути иду (наверно), не сдаваться сука!
Сквозь мозоли пальцев! Моделить легче будет (наверно) ))

Погнали:

12. КРОН.
Кровожадный монстр обладающий телекинезом, бьёт силой мысли.
Крон обладает супер способностью перемещения во времени.
Если расклад боя с противником идёт к неудачному финалу,
крон может откатить время на два хода назад, и попробовать
изменить ситуацию. Забавно наверное наблюдать за боем
двоих Кронов, ведь время они откатывают лишь на небольшой
площади вокруг себя, при чём действует эта способность только
на монстров. Рейнджеры могут присаживаться, и наблюдать за
этой великолепной затянувшейся битвой, главное не заснуть.

13. ВЛАСТЕЛИН ВРЕМЕНИ.
Ужасная тварь! Уровень угрозы демонический. Уровень его телекинеза
способен расщеплять объекты на атомы. Однако за другую способность
он назван "Властелином Времени"! Эта тварь в состоянии отмотать время
на 3 хода назад, и восстанавливается его способность быстрее чем
у "Крона". Хитрый гад будет мотать время до моментов, когда его атаки
повторенные вновь окажутся максимально эффективными,
или на оборот атаки врагов окажутся максимально неэффективными.

14. ОДНОНОГ.
Непримечательный маленький монстр, которого с лёгкостью
забьёт дубиной рейнджер, всё что он может, это пинаться
своей единственной ногой. Чем питается безротый монстр
непонятно, быть может солнечным светом, или радиоволнами.

15. ТРИРУК.
Тот случай, когда одноног решил, что с него хватит,
и отрастил себе вторую ногу, а к ней до кучи ещё
и три мускулистых руки. Теперь наш новоиспечённый
трирук дубасит всех в кашу. Совсем разозлившись он
может начать вращаться как волчок с вытянутыми руками,
и сметать всех на своём пути.

16. ШЕСТИКРЫЛЫЙ ПЯТИГЛАЗ.
Очень опасный монстр. Стреляет лазерными лучами из глаз,
летает, может наброситься на вас с воздуха. На земле может
использовать волчковый удар трирука, ещё и пинается!
Лучше не подходите, когда он пролетает над вами,
прикиньтесь шлангом, может не заметит.

17. ЗМЕЯЩЕР.
Монстр похожий на ящерицу, со змеевидной шеей.
На конечностях имеет очень острые когти и шипы,
которыми способен наносить кровоточащие раны.
Не ядовит, но очень сердит.

18. КУРНИК.
Нелепый с виду, но опасный монстр-перевёртыш.
Получил своё название за схожесть ног с куриными.
Сильно кусается, и бьёт своими жгутиками-хлыстами.
В опасной ситуации может перевернуться на 180 градусов,
окопаться жгутиками в землю, и начать отбиваться ногами.
В таком положении сложнее нанести ему урон.

19. НЕБЕСНАЯ РЫБКА.
Появлялись на земле ещё задолго до массового вторжения
I.D.S. монстров. Они невероятно быстро перемещаются,
и замечали их только на видеозаписях камер наблюдения,
и фотографиях. Эти монстры исчезают без порталов,
и так же внезапно появляются. Есть научное мнение,
что они вообще не имеют никакого отношения к миру
из которого прибыли другие монстры. Довольно полезны
для монстр рейнджеров, так-как могут приносить предметы
как дрессированные собачки, а так же довольно эффективны
в бою благодаря своей скорости полёта, и острым лапкам
с режущими свойствами.

20. НЕБЕСНЫЙ ТИТАН.
Вся суть в его названии, уровень угрозы титанический.
Огромные размеры, высокая скорость, и мощный рог,
делают его невероятно разрушительным. Но это пол беды,
ведь самая мощная атака небесного титана это его
разрушительный луч, который уничтожит что угодно
на внушительном расстоянии. Небесного титана можно
использовать как транспорт для перевозки грузов,
или пассажиров, если закрепить на нём мегаседло и
подвесную платформу. Небесный Титан это следующая
ступень развития небесной рыбки. Однако мало кому
из монстр рейнджеров удалось довести свою рыбку
до стадии преобразования в небесного титана. Те,
кому это удалось, не делятся ни с кем секретом
превращения, по этому у подавляющего большинства
рейнджеров небесные рыбки на всегда остаются
в своей первой форме.

21. БЛОБ.
Титанический уровень угрозы. Чертовски огромных размеров!
Похож на небольшой планетарный спутник. Жрёт всё, что попадает
в его дробящие челюсти. Способен управлять гравитационными
полями. Если вы увидите блоба, то это скорее всего будет последним
зрелищем в вашей жалкой жизни.
(Является отсылкой к моей самодельной цивилизации "Безблобников",
расы "Космоглистов" в компьютерной игре "Stellaris", которую встречают
те, кто играет со мной в сетевую игру. По сути, был их домом, и
божеством в одном лице. Скриншот с описанием из "Stellaris" прикреплён к посту)

22. МЕГАГЛИСТ.
Впервые мегаглисты были обнаружены в горках отходов жизнедеятельности
блоба. Они живут внутри блоба, и питаются тем, что ест он.
Блоб почему-то не в состоянии их переварить. Они могли бы
сожрать его изнутри, но дойную корову никто не станет убивать.
Наверное блоб подцепил их где-то кормясь, и теперь не может
избавиться. Очень опасные твари на самом деле, быстро
регенерируют за счёт поедания своих жертв, наносят колотые
раны жгутиками.
(Тоже являются отсылкой к моей расе в "Stellaris").

23. ЦЕПНОЙ МЕГАГЛИСТ.
Дальнейшее развитие вида мегаглистов. Существуют только
вне блоба, расползаясь по большой территории вокруг
блобьих кучек. Имеют мощные мандибулы, и раздвоенные жгутики,
для крепкого удержания и расчленения жертвы. Падалью не питаются,
цепной мегаглист живёт одной лишь охотой. Очень опасный монстр.

24. ТОПТУН.
Класс титанический. Высоко возвышается на длинных лапах.
Можно было бы сравнить его с гигантским насекомым, но
это не так, ведь у насекомых не может быть меньше шести лап,
а у него их всего четыре. Выжигал города лазерными лучами
из глаз (когда города ещё существовали в старом представлении).
Может вызвать землетрясение быстро топчась на месте.
Если он вас увидит, вы испаритесь.

25. БОЧКА.
Назван бочкой за внешний вид. Стальной монстр, с искусственным
интеллектом на уровне примата. Бьёт током не хуже матрона,
а так же наносит мощные дробящие удары своими стальными руками-булавами.
На вашем месте я бы не дразнил его бананами.

ant0N 01.07.2019 12:49

Ответ: I.D.S. MONSTERS
 
достаточно рендеров, давай уже геймплей

Crystal 01.07.2019 14:01

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ant0N (Сообщение 316423)
достаточно рендеров, давай уже геймплей

Обязательно! Но потом.
Я по дорожной карте иду:

Цитата:

План таков:
1. Разработка вселенной игры, а основа вселенной, это монстры,
и их многообразие. По этому разработка начинается с создания
артов самих монстров, на бумаге, ручками (шариковыми, и теми что из жопы растут).
2. Моделинг монстров.
3. Анимация.
4. Программирование игрового движка.
5. Сюжет-квесты-хуесты-и тд.
На проект выделяю 5-6 лет жизни. Не спеши друг.
Серьёзные проекты начинаются с дизайн документа.

Crystal 07.01.2020 16:58

Ответ: I.D.S. MONSTERS
 
Так ребята, проект в простое, но не забыт.
Думаю о нём каждый день, и ищу вдохновение (проект жизни как ни как).
С момента последней публикации в зарисовках появилось всего 2 монстра!
Дело в том, что было не до этого. Проблемы на работе, недостаток финансов
(пришлось после основной работы ещё и таксистом работать),
здоровье подкосилось я за последние полгода чем только не переболел,
машины обе ломались, я их чинил на улице, и в личной жизни были
скандальные периоды. В общем я думаю вы поймёте меня, почему мне
как минимум духовно было не до творчества. Однако, никто не забыт,
и ничто не забыто.

Путём долгих мозговых штурмов самосознания всё-таки создал
подходящее название для моей вселенной. Вроде бы как никем
не занятое. дело в том, что I.D.S. MONSTERS это просто техническое
название монстров первой волны во вселенной, а источники монстров
будут разными. В моей бошке уже создался мир аж на три части игры!
Название для меня вообще проблемой было. Вот возьмём к примеру
основных моих конкурентов, это Pokemon, и Digimon. Что с ними не так?
Во первых у всех в названии присутствует "Mon", тобишь Monster,
эти названия максимально похожи, и мне не хотелось бы, чтобы
моё творчество называли с ходу очередным пародийным говномоном
(хотя идея мне то явно привита под действием этих проектов (и не только).
Во вторых в их названиях существует привязка к определённому
типу монстров, как например "Покемон" - это покет монстрес,
тобишь карманные монстры, а "дигимон", это диджитал монстрес,
то есть монстры цифровые. Значит мы получаем две вселенные
с ограничениями, где в первой монстры могут быть только карманными,
а во второй только цифровыми (из виртуального компьютерного мира).
Это же проблема! А если я хочу, чтобы монстры были не только карманными?
А если я хочу и цифровых, и не цифровых, органических, инопланетных,
то как быть? Название проекта не должно ставить автора ни в какие рамки!
Так вот и появилось название проекта - "Deathbring Rangers".
Deathbring'ами будут называть всех монстров в моей вселенной,
слово происходит из словосочетания двух английских "Death Bringing",
перевести можно по всякому, но суть одна "смерть несущие".
Можете считать, что всё что я сделал за полгода, это наконец
придумал общее название для всех своих монстров, ну хоть что-то.

Комрады, мне нужна мотивация. А ничто так не мотивирует, как
чья-то заинтересованность в моём творчестве.
Может посоветуете мне какие-нибудь краудфандинговые площадки
более-менее дееспособные для отечественного творца?
Патреон например трафика не даёт, в кикстартер тоже не верю.
Где мне найти свою целевую аудиторию?

Crystal 07.01.2020 17:41

Ответ: I.D.S. MONSTERS
 
Вложений: 2
А вот и парочка не раскрашенных дезбрингов, которых вы ещё не видели,
это следующие формы нешей зубодробящей бочки-киборга.

Список монстров на зарисовку, которых я уже давно придумал:

Колоб
Голем
Мебельник
КИТ
ВОР
ВОРЮГА
Зловещий Рысак
Булыжник
Рука-Лицо
Рукастый
Водорез

Это то, чего стоит ожидать от меня в недалёком будущем. Интрига,
интересно, что вы себе представляете в голове, видя эти названия дезбрингов )

Crystal 07.01.2020 20:11

Ответ: I.D.S. MONSTERS
 
Вложений: 1
А вот и водорез подъехал.
Мой список дезбрингов идёт в зарисовку не по очереди придумывания,
а как перо ляжет. Вот мебельник например был придуман ещё в
первом десятке монстров, а водорез в начале декабря 2019 года,
по пути с нефтегазового месторождения в служебном транспорте,
однако водорез зарисован, а мебельник всё ещё ждёт ))

Друзья, вам интереснее видеть сначала не раскрашенную версию,
а после в цвете, или лучше дезбрингов сразу в раскрасе подавать?
И как лучше выдавать, по одному сразу типа W.I.P., или как раньше
копить паком, и выдавать 5-10 зарисовок?

Arton 08.01.2020 00:13

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 316901)
Друзья, вам интереснее видеть сначала не раскрашенную версию,
а после в цвете, или лучше дезбрингов сразу в раскрасе подавать?
И как лучше выдавать, по одному сразу типа W.I.P., или как раньше
копить паком, и выдавать 5-10 зарисовок?

Непринципиально.
Лучше пакетом.

Crystal 18.02.2020 21:32

Ответ: I.D.S. MONSTERS
 
Короче точно проект будет реализовываться на юнити,
который я начал осваивать. (По сравнению с тем же блитцем
юнити невероятная дичь, где то что я реализую одной командой
в блитце, можно раздуть аш до десяти и более строк кода,
я в лёгком ахтунге, но начинаю справляться с проклятым сишарпом).

Два вечера у меня ушло, чтобы сотворить эту простейшую систему с нуля.
Суть проста, персонаж = куб, плейн = земля. Тычим ЛКМ в плейн, куб туда топает.

Мне нужно, чтобы кто-нибудь скачал файл игры, и протестировал.
Мне кажется (возможно кажется), что персонаж перемещается прямо рывками,
а не плавно, а мне нужна плавность. Жду ваших отчётов. Если покажется,
что что-то работает неправильно - опишите баг.

Ссылка ТЫК 24 мегабайта.

ABTOMAT 19.02.2020 00:31

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317027)
Короче точно проект будет реализовываться на юнити,
который я начал осваивать. (По сравнению с тем же блитцем
юнити невероятная дичь, где то что я реализую одной командой
в блитце, можно раздуть аш до десяти и более строк кода,
я в лёгком ахтунге, но начинаю справляться с проклятым сишарпом).

Два вечера у меня ушло, чтобы сотворить эту простейшую систему с нуля.
Суть проста, персонаж = куб, плейн = земля. Тычим ЛКМ в плейн, куб туда топает.

Мне нужно, чтобы кто-нибудь скачал файл игры, и протестировал.
Мне кажется (возможно кажется), что персонаж перемещается прямо рывками,
а не плавно, а мне нужна плавность. Жду ваших отчётов. Если покажется,
что что-то работает неправильно - опишите баг.

Ссылка ТЫК 24 мегабайта.

У меня всё ровно.
Покажи код упдейта кубика штоле.

Crystal 19.02.2020 07:55

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ABTOMAT (Сообщение 317029)
У меня всё ровно.
Покажи код упдейта кубика штоле.

Цитата:

Chel - куб
Navigator - пивот за которым он бегает
Код:

public class PersController : MonoBehaviour
{
    public Camera Camera; //Камера конечно
    public GameObject plane; //Плоскость в которую будем лучом стрелять
    public GameObject Chel; // Персонаж
    public Vector3 ChelCoordinate; //Сюда записываем координаты персонажа
    public GameObject Navigator; // Маячок с координатами для следования персонажа
    public Vector3 RaycastPickCoordinates; //Конечные координаты падения луча в рейкасте на коллайдер
    public string RaycastObjNow; // Текстовая переменная, содержит имя объекта коллайдер которого попал под луч
    public float DistCheltoNavigator; //Дистанция между персонажем и навигатором
    public int PersMooveSystem = 0; //Система направления и движения персонажа
    public int PersSpeed = 4; //Скорость движения персонажа


    void Update()
    {
   

        //Сам луч, начинается от позиции камеры и направлен в сторону мыши
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //Структура луча, нужна для получения информации из Raycast
        RaycastHit PickRay;

        //Пускаем луч
        Physics.Raycast(ray, out PickRay);


        //Если нажата ЛКМ
        if (Input.GetMouseButtonDown(0))
        {



            //Если запустили луч
            if (Physics.Raycast(ray, out PickRay))
            {
                //Получаем координаты пика на коллайдере
                RaycastPickCoordinates = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);
                //Выводим координаты в дебаггер
                Debug.Log("Координаты падения луча на какой-либо коллайдер игрового объекта" + RaycastPickCoordinates);


                //Пишем в RaycastObjNow и деббагер конкретно во что воткнулся луч
                RaycastObjNow = PickRay.collider.name;
                Debug.Log("Пишем в RaycastObjNow имя коллайдера попавшего в рейкаст:" + RaycastObjNow);


                //Если луч попал в плейн
                if (RaycastObjNow == "Plane")
                {
                    Debug.Log("Тыкнули в плейн, и двигаем Navigator!");
                    //Перемещаем навигатор персонажа в точку пика на данном коллайдере
                    Navigator.transform.position = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);

                    //Определяем координаты персонажа
                    ChelCoordinate = Chel.transform.position * Time.deltaTime;
                    Debug.Log("Координаты персонажа: " + ChelCoordinate);

                    //Определяем дистанцию между персонажем и навигатором
                    DistCheltoNavigator = Vector3.Distance(Chel.transform.position, RaycastPickCoordinates);
                    Debug.Log("Дистанция между Navigator и Персонажем: " + DistCheltoNavigator);

                    //Если дистанция между персонажем и навигатором больше определённой величины
                    if (DistCheltoNavigator >= 0.5f)

                    {
                        //Активируем систему направления и движения персонажа
                        PersMooveSystem = 1;

                        if (PersMooveSystem > 1)
                        {
                            PersMooveSystem = 1;
                        }

                        Debug.Log("Активирована система направления и движения персонажа");

                    }

                }


                //Если луч попал в коллайдер игрового объекта
                if (PickRay.collider.gameObject)
                {
                    //Пишем в дебаггере название объекта, в который попал луч
                    Debug.Log("Луч попал в коллайдер игрового объекта: " + PickRay.collider.name);


                }


            }


        }

        //Визуализируем луч в окне сцены
        Debug.DrawLine(ray.origin, PickRay.point, Color.red);

        //Проверка активации системы перемещения персонажа
        if (PersMooveSystem >= 1)
        {
            if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
            {
                PersMooveSystem = 0;
           
            }


                    //Создаём навигационный вектор позиции на который будем поворачивать персонажа, он состоит из точки падения луча на коллайдер по координатам "x" и "z", сохраня в "y" вектора координату "y" позиции персонажа
                    Vector3 NavigatorPosition = new Vector3(RaycastPickCoordinates.x, Chel.transform.position.y, RaycastPickCoordinates.z);
            //Поворачиваем персонажа на точку падения луча на коллайдер используя навигационный вектор позиции NavigatorPosition
            Chel.transform.LookAt(NavigatorPosition);


         
                // Двигаем персонажа вперёд соблюдая такты времени
                Chel.transform.Translate(Vector3.forward * Time.deltaTime * PersSpeed);

            //Определяем дистанцию между персонажем и навигатором
            DistCheltoNavigator = Vector3.Distance(Chel.transform.position, RaycastPickCoordinates);

            //Проверяем дистанцию между персонажем и навигатором
            if (DistCheltoNavigator < 0.5f)
            {
                //Отключаем систему направления и движения персонажа
                PersMooveSystem = 0;

                Debug.Log("Отключена система направления и движения персонажа");
            }



            Debug.Log("Активность системы направления и движения персонажа:" + PersMooveSystem);
        }

    }
}


mauNgerS 19.02.2020 13:20

Ответ: I.D.S. MONSTERS
 
Супер беглый взгляд:
- можно не пускать луч каждый кадр, а только при нажатой кнопке
- можно постоянно использующиеся переменные завести 1 раз в start/awake
- вместо new Vector3() можно завести вектор шлюху и перезаписывать в нём значения

ABTOMAT 19.02.2020 13:38

Ответ: I.D.S. MONSTERS
 
Цитата:

PHP код:

//Определяем координаты персонажа
                    
ChelCoordinate Chel.transform.position Time.deltaTime


Тут Дельта Тайм нинужен, в лог потом выводятся неверные данные.
В остальном не вижу причин, по которым может дёргаться.
Может, FPS просто скачет? Хотя какой должен быть комп чтобы скакало.

Crystal 19.02.2020 17:34

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от mauNgerS (Сообщение 317032)
Супер беглый взгляд:
- можно не пускать луч каждый кадр, а только при нажатой кнопке
- можно постоянно использующиеся переменные завести 1 раз в start/awake
- вместо new Vector3() можно завести вектор шлюху и перезаписывать в нём значения

Проорал ) Вектор шлюха )
Когда до оптимизации говнокода дойдёт, вспомню о совете.
Сам знаешь, код написан для того, чтобы постоянно его переписывать.

Луч пускается постоянно для отрисовки в окне сцены, чтобы я видел куда он падает.

Цитата:

Сообщение от ABTOMAT (Сообщение 317033)
Тут Дельта Тайм нинужен, в лог потом выводятся неверные данные.
В остальном не вижу причин, по которым может дёргаться.
Может, FPS просто скачет? Хотя какой должен быть комп чтобы скакало.

Да дельта тайм не нужен, это мусорный участок кода, я ожидал что заметишь, впадлу было стереть.

Оказалось дёргалось только в окне Game в Unity,
в билде было на тот момент всё нормально.
Перезагрузил комп, теперь и в юнити не дёргается.

Скоро ещё понадобятся тестеры, я пишу управление камерой а ля RTS.
Сегодня уже наверно билд с кодом выложу.

Crystal 19.02.2020 20:15

Ответ: I.D.S. MONSTERS
 
Итак следующий билд.
RTS камера относительно готова.
Скачать ТЫК.

У камеры появился родительский пивот, который я двигаю "CamPapa".
Что умеет камера:
1. Двигаться в восьми направлениях, когда курсор доходит до края экрана.
2. Отдаляться и возвращаться обратно по пяти шагам колесом мышки.
3. Ориентироваться на местности по длине и ширине игрового уровня,
останавливая своё движение доходя до края.
(Размер игрового уровня сейчас равен размеру плейна).

Что камера не умеет:
Не умеет поворачиваться по осям. Во первых это функция
сомнительной нужности для геймдизайна моего проекта.
Во вторых, в данный момент если повернуть камеру,
то её ориентация в координатах игрового уровня
слетит к херам, превратившись из квадрата в неведомую
геометрическую фигуру. Чтобы поворачивать камеру,
придётся расчитывать ориентацию с учётом угла поворота
камеры, а это вам уже не 10 на 10 умножить так сказать,
придётся голову напрячь, возможно и реализую если потребуется.

Ограничение движения камеры коллизией с кубом, который натянут на уровень - не предлагать! слишком просто.

Говнокод управления камерой:


Код:

public class CamController : MonoBehaviour
{

    public GameObject CamPapa; // Пивот к которому привязана камера
    public int CamTranslateSpeed = 10; // Скорость движения камеры
    public float CamRemoveStep = 1.5f; // Шаг отдаления камеры
    public int CamDegreeRemove = 5; // Переменная со стартовым шагом, отсчёт идёт от 5 до 10, т.е. мы можем сделать максимум 5 шагов отдаляющих камеру, и после до 5 приближающих.
    public float CamMooveRangeX = 10f; // Область перемещения камеры по оси "x" соответствующая ширине игровой карты .
    public float CamMooveRangeZ = 10f; // Область перемещения камеры по оси "z" соответствующая длине игровой карты .
    public float CamPositionX; // Текущие координаты CamPapa по оси "x".
    public float CamPositionZ; // Текущие координаты CamPapa по оси "z".
    public Vector3 CamPapaCoordinate; //Резервная переменная для запроса вектора из трёх координат положения CamPapa.

    void Update()
    {

        //Проверка положения мыши в районе правого края экрана


        if (Input.mousePosition.x >= Screen.width - 5.3f)
        {
            CamPositionX = CamPapa.transform.position.x;

            //Если "x" координаты CamPapa меньше ширины игровой карты мы двигаем камеру вправо
            if (CamPositionX < CamMooveRangeX)
            {
            CamPapa.transform.Translate(Vector3.right * CamTranslateSpeed * Time.deltaTime);
            }
        }

        //Проверка положения мыши в районе левого края экрана
        if (Input.mousePosition.x <= 0.1f)
        {
            CamPositionX = CamPapa.transform.position.x;

            //Если "x" координаты CamPapa дальше начальной координаты игровой карты мы двигаем камеру влево
            if (CamPositionX > 0.01f)
            {
                CamPapa.transform.Translate(Vector3.left * CamTranslateSpeed * Time.deltaTime);
            }
        }

        //Проверка положения мыши в районе верхнего края экрана

        if (Input.mousePosition.y >= Screen.height - 2.3f)
        {
            CamPositionZ = CamPapa.transform.position.z;

            //Если "z" координаты CamPapa меньше длины игровой карты мы двигаем камеру вперёд

            if (CamPositionZ < CamMooveRangeZ)
            {
                CamPapa.transform.Translate(Vector3.forward * CamTranslateSpeed * Time.deltaTime);
            }
        }

        //Проверка положения мыши в районе нижнего края экрана

        if (Input.mousePosition.y <= 0.1f)
        {
            CamPositionZ = CamPapa.transform.position.z;

            //Если "z" координаты CamPapa дальше начальной координаты длины игровой карты мы двигаем камеру назад

            if (CamPositionZ > 0.01f)
            {
                CamPapa.transform.Translate(Vector3.back * CamTranslateSpeed * Time.deltaTime);
            }
        }
        //Отдаление и приближение колесом мыши

        if (Input.mouseScrollDelta.y > 0 && CamDegreeRemove < 10)
        {
            CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y + CamRemoveStep, CamPapa.transform.position.z);
            CamPapa.transform.Translate(Vector3.back * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove + 1;
        }

        if (Input.mouseScrollDelta.y < 0 && CamDegreeRemove > 5)
        {
            CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y - CamRemoveStep, CamPapa.transform.position.z);
            CamPapa.transform.Translate(Vector3.forward * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove - 1;
        }

        if (CamDegreeRemove > 10) CamDegreeRemove = 10;
        if (CamDegreeRemove < 5) CamDegreeRemove = 5;






    }
}


ABTOMAT 19.02.2020 20:56

Ответ: I.D.S. MONSTERS
 
Всё робит, музыка играет.
Продолжай, прямо как в старые-добрые времена, когда на Булку выкладывали билды кто что делает (когда кто-то что-то делол).

Arton 20.02.2020 00:01

Ответ: I.D.S. MONSTERS
 
Работает, музыка играет.
Хочется что бы в будущем можно было кликнуть за границы карты и что бы персонаж пошёл в ту сторону до края карты.
Впрочем это может помешать, если случайным кликом потопаешь к врагу.

Можно как-то отключить у юнити запросы в интернет?
Каждый билд с кубиком стучится непонятно куда.
Наверное статистику с мира понитке собирают.

OBS почему-то долго начинает захват после запуска программы.


P. S. Хм-м... Возможно в будущем Булке понадобится возможность загружать видео вместо gif, или тег [video]. Впрочем тег и сейчас не помешает. Так, мысли в слух.

Crystal 20.02.2020 01:54

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Arton (Сообщение 317037)
Работает, музыка играет.
Хочется что бы в будущем можно было кликнуть за границы карты и что бы персонаж пошёл в ту сторону до края карты.
Впрочем это может помешать, если случайным кликом потопаешь к врагу.

Можно как-то отключить у юнити запросы в интернет?
Каждый билд с кубиком стучится непонятно куда.
Наверное статистику с мира понитке собирают.

Хз куда он там стучится, может из-за того, что билд со статусом девелопмент.
В окне компилятора во вкладках ничего про отправку чего-либо куда-либо.
Наверно фирма шпионит за тем, как халявщики юзают их софт (я на бесплатной версии).

Про кликание за предел карты - реализовать могу, смысла не вижу.
В управлении персонажем намеренно будет отсутствовать ПП
(хоть он уже и есть встроенный в Unity).

Randomize 20.02.2020 14:11

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317038)
Хз куда он там стучится, может из-за того, что билд со статусом девелопмент.

Проверь включена ли аналитика:
https://docs.unity3d.com/Manual/Unit...ticsSetup.html

Кроме того дев билды тоже открывают порт, но только для обмена данными с отладчиком - не опасно.

Crystal 21.02.2020 05:32

Ответ: I.D.S. MONSTERS
 
Третья билдуха: ТЫК

Теперь у меня полноценная RTS камера.
Умеет и бегать как ранее во все стороны, также отдаляться-приближаться,
но теперь она ещё умеет вращаться влево и вправо при зажатом
колесе мыши.

Я уже говорил, что при моей прошлой вполне удачной системе ориентирования
камеры в границах игровой карты невозможен её поворот,
так как вся ориентация слетает к херам.
Это была нормальная версия, но она подойдёт только для
игры, где камеру поворачивать не надо, а я решил,
что поворачивать будем!

То что вы сейчас видите, это уже пятая версия ориентации камеры.
Пришлось помучиться изобретая новые способы, и воюя
с одним внезапным багом юнити которого не должно быть,
но это баг самой логики в связке "transform.Translate" с "Time.deltaTime"
при движении по оси "Z". Грубо говоря, при одинаковом условии,
когда объекту запрещено двигаться по этим двум осям "X и Z",
по Z он всё-таки двигается на один такт "Time.deltaTime",
после чего условие начинает соблюдаться, однако этот баг
мою систему уничтожал просто, пришлось вместо двигания
камеры её телепортировать, и вот там уже не меняя условий
, ни строчки кода, всё с перемещением по Z отлично.

Можете сами баг проверить, заменив телепортацию камеры, на
её толкание в сторону.

Строку:

Код:

CamPapa.transform.position = new Vector3(SusaninVector.x, CamPapaCoordinate.y, SusaninVector.z);
Меняете её в блоке отвечающем за движение камеры вправо на:

Код:

CamPapa.transform.Translate(Vector3.right * CamTranslateSpeed * Time.deltaTime);
Двигаетесь во все стороны, всё норм, но это пока вы не повернёте
камеру на 90 градусов, и не поедете по Z оси, там то и сработает
баг где 1 раз не выполнится условие нахождения в площади уровня:

Код:

if (SusaninPositionX > 0.01f && SusaninPositionX < CamMooveRangeX && SusaninPositionZ > 0.01f && SusaninPositionZ < CamMooveRangeZ)
Баг этот юнитишный из меня все нервы вытряс, хорошо что я додумался
заменить образно говоря толкание на телепортацию, и сразу с
осью Z проблема отпала.

Короче, как работает теперь вся логика движения камеры и его
ограничения площадью уровня?
Появился ещё один пивот "Susanin", он телепортируется под камеру,
далее двигается туда, куда мы хотели бы сместить камеру,
определяется находится ли сусанин в площади игрового уровня.
Если в площадь попал (она сейчас 20 на 20) то телепортируем
на его координаты камеру, если не попал, значит нехрен
туда камеру двигать, и мы ничего не делаем.
Работает под любым углом поворота камеры.

Код:


Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CamController : MonoBehaviour
{

    public GameObject CamPapa; // Пивот к которому привязана камера
    public Camera Camera; //Камера конечно
    public int CamTranslateSpeed = 10; // Скорость движения камеры
    public float CamRemoveStep = 1.5f; // Шаг отдаления камеры
    public int CamDegreeRemove = 5; // Переменная со стартовым шагом, отсчёт идёт от 5 до 10, т.е. мы можем сделать максимум 5 шагов отдаляющих камеру, и после до 5 приближающих.
    public float CamMooveRangeX = 20f; // Область перемещения камеры по оси "x" соответствующая ширине игровой карты .
    public float CamMooveRangeZ = 20f; // Область перемещения камеры по оси "x" соответствующая длине игровой карты .
    public float CamPositionX; // Текущие координаты CamPapa по оси "x".
    public float CamPositionZ; // Текущие координаты CamPapa по оси "z".
    public Vector3 CamPapaCoordinate; //Резервная переменная для запроса вектора из трёх координат положения CamPapa.
    public GameObject Susanin; // Разведчик, бежит вперёд камеры, узнаёт можно ли туда камеру двигать.
    public float SusaninPositionX; // Текущие координаты Susanin по оси "x".
    public float SusaninPositionZ; // Текущие координаты Susanin по оси "z".
    public Vector3 SusaninVector; // x,y,z кординаты Susanin
    public float CamPapaXRotationSpeed = 10f;
    public float MouseXRotation;
    public int CamPapaXRotationDetector = 0;


    void Update()
    {

        CamPositionX = CamPapa.transform.position.x;
        CamPositionZ = CamPapa.transform.position.z;

        CamPapaCoordinate = CamPapa.transform.position;


        // Поворот камеры


        if (Input.GetMouseButton(2))
        {
            CamPapaXRotationDetector = 1;
            MouseXRotation = Input.GetAxis("Mouse X");
            CamPapa.transform.Rotate(0, Input.GetAxis("Mouse X") * CamPapaXRotationSpeed, 0);
            Susanin.transform.Rotate(0, Input.GetAxis("Mouse X") * CamPapaXRotationSpeed, 0);


        }

        else
        {

            CamPapaXRotationDetector = 0;

        }

        //-------------------------------------------------------------------------------------------------------------------



        if (CamPapaXRotationDetector == 0)
        {

            if (Input.mousePosition.x >= Screen.width - 5.3f)


            {
                CamPapaCoordinate = CamPapa.transform.position;

                Susanin.transform.position = new Vector3(CamPapaCoordinate.x, CamPapaCoordinate.y, CamPapaCoordinate.z);

                Susanin.transform.Translate(Vector3.right * CamTranslateSpeed * Time.deltaTime);

                SusaninPositionX = Susanin.transform.position.x;
                SusaninPositionZ = Susanin.transform.position.z;

                SusaninVector = Susanin.transform.position;

                if (SusaninPositionX > 0.01f && SusaninPositionX < CamMooveRangeX && SusaninPositionZ > 0.01f && SusaninPositionZ < CamMooveRangeZ)
                {

                    CamPapa.transform.position = new Vector3(SusaninVector.x, CamPapaCoordinate.y, SusaninVector.z);

                }

            }


            //-----------------------------------------------------------------------------------------------------------------------------------------


            if (Input.mousePosition.x <= 0.1f)

            {
                CamPapaCoordinate = CamPapa.transform.position;

                Susanin.transform.position = new Vector3(CamPapaCoordinate.x, CamPapaCoordinate.y, CamPapaCoordinate.z);


                Susanin.transform.Translate(Vector3.left * CamTranslateSpeed * Time.deltaTime);

                SusaninPositionX = Susanin.transform.position.x;
                SusaninPositionZ = Susanin.transform.position.z;

                SusaninVector = Susanin.transform.position;

                if (SusaninPositionX > 0.01f && SusaninPositionX < CamMooveRangeX && SusaninPositionZ > 0.01f && SusaninPositionZ < CamMooveRangeZ)
                {

                    CamPapa.transform.position = new Vector3(SusaninVector.x, CamPapaCoordinate.y, SusaninVector.z);

                }

            }


            //-----------------------------------------------------------------------------------------------------------------------------------------

            if (Input.mousePosition.y >= Screen.height - 2.3f)
            {

                CamPapaCoordinate = CamPapa.transform.position;

                Susanin.transform.position = new Vector3(CamPapaCoordinate.x, CamPapaCoordinate.y, CamPapaCoordinate.z);


                Susanin.transform.Translate(Vector3.forward * CamTranslateSpeed * Time.deltaTime);

                SusaninPositionX = Susanin.transform.position.x;
                SusaninPositionZ = Susanin.transform.position.z;

                SusaninVector = Susanin.transform.position;

                if (SusaninPositionX > 0.01f && SusaninPositionX < CamMooveRangeX && SusaninPositionZ > 0.01f && SusaninPositionZ < CamMooveRangeZ)
                {


                    CamPapa.transform.position = new Vector3(SusaninVector.x, CamPapaCoordinate.y, SusaninVector.z);

                }
            }

            //-----------------------------------------------------------------------------------------------------------------------------------------

            if (Input.mousePosition.y <= 0.1f)
            {
                CamPapaCoordinate = CamPapa.transform.position;
                Susanin.transform.position = new Vector3(CamPapaCoordinate.x, CamPapaCoordinate.y, CamPapaCoordinate.z);

                Susanin.transform.Translate(Vector3.back * CamTranslateSpeed * Time.deltaTime);


                SusaninPositionX = Susanin.transform.position.x;
                SusaninPositionZ = Susanin.transform.position.z;

                SusaninVector = Susanin.transform.position;

                if (SusaninPositionX > 0.01f && SusaninPositionX < CamMooveRangeX && SusaninPositionZ > 0.01f && SusaninPositionZ < CamMooveRangeZ)
                {


                    CamPapa.transform.position = new Vector3(SusaninVector.x, CamPapaCoordinate.y, SusaninVector.z);

                }
            }



            //-------------------------------------------------------------------------------------------------------------------

        }

        //-------------------------------------------------------------------------------------------------------------------
        //Отдаление и приближение колесом мыши

        if (Input.mouseScrollDelta.y > 0 && CamDegreeRemove < 10)
        {
            Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y + CamRemoveStep, Camera.transform.position.z);
            Camera.transform.Translate(Vector3.back * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove + 1;
        }

        if (Input.mouseScrollDelta.y < 0 && CamDegreeRemove > 5)
        {
            Camera.transform.position = new Vector3(Camera.transform.position.x, Camera.transform.position.y - CamRemoveStep, Camera.transform.position.z);
            Camera.transform.Translate(Vector3.forward * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove - 1;
        }

        if (CamDegreeRemove > 10) CamDegreeRemove = 10;
        if (CamDegreeRemove < 5) CamDegreeRemove = 5;




    }


}



В коде могут присутствовать не мешающие мусорные элементы,
пол седьмого утра, мне спать пора, а не остатки прошлых
версий управления камерой подчищать )

Arton 21.02.2020 06:22

Ответ: I.D.S. MONSTERS
 
Ох, а можно правую кнопку мыши для вращения? Колёсико жёсткое у меня и глючит :(

Баг выход за границы:
Если во время движения кубика кликнуть за границу поля, кубик отправится туда и остановившись будет глючено крутится на месте.
При условие что куб не двигается, за границы его отправить нельзя.

Цитата:

Сообщение от Crystal (Сообщение 317042)
Появился ещё один пивот "Susanin", он телепортируется под камеру,
далее двигается туда, куда мы хотели бы сместить камеру,
определяется находится ли сусанин в площади игрового уровня.

Э-э, так я не понял камеру сейчас двигать можно или нельзя?
Мне тоже спать пора :-)
Про проблемы с камерой честно говоря не понял...

Пожалуйста, скрой простыни кода под спойлер!

Crystal 21.02.2020 09:45

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Arton (Сообщение 317043)
Ох, а можно правую кнопку мыши для вращения? Колёсико жёсткое у меня и глючит :(

Баг выход за границы:
Если во время движения кубика кликнуть за границу поля, кубик отправится туда и остановившись будет глючено крутится на месте.
При условие что куб не двигается, за границы его отправить нельзя.


Э-э, так я не понял камеру сейчас двигать можно или нельзя?
Мне тоже спать пора :-)
Про проблемы с камерой честно говоря не понял...

Пожалуйста, скрой простыни кода под спойлер!


Лол, у меня колесо тоже глючит, правую кнопку сделаю спешл фо ю
разово в четвёртом билде.

Баг подкрался от туда, откуда не ждали. Решил на скорую руку
красоту навести, и сделать космос для билда из плейна,
а переименовать его забыл. Собственно у нас сейчас два
плейна в билде, вот куб с ума и сходит, решается заменой
имени ) Он же по имени объекта в который луч попал событие
запускает, где в точку пика прыгает навигатор, а за ним
летит куб.

Камеру двигать можно, как в реал тайм стратегии, касаясь
ею краёв экрана, двигать можно в 8 направлениях.
Границы перемещения камеры выставлены размерами
игрового уровня, а игровой уровень это у нас бежевый
плейн. У камеры есть невидимая нога, которая стоит впереди
неё, если она коснулась края игрового поля, то дальнейшее
движение (за его пределы) невозможно, специально
выставленное ограничение.

Проблем с камерой нет, есть проблемы с Unity, он вопреки
прописанной логики при особом обстоятельстве разово
выполняет действие, которое не должен выполнять вообще,
и баг этот я обошёл.

Тега спойлер на булке нет, в оффтоп пихать не хочу по тому, что не оффтоп.

В общем сейчас сделаю сборку под правую кнопку мыши
и без выхода кубика в космос.

Crystal 21.02.2020 14:03

Ответ: I.D.S. MONSTERS
 
Подъехал новый билд:ТЫК

Цитата:

Сообщение от Arton (Сообщение 317043)
Ох, а можно правую кнопку мыши для вращения? Колёсико жёсткое у меня и глючит :(

Баг выход за границы:
Если во время движения кубика кликнуть за границу поля, кубик отправится туда и остановившись будет глючено крутится на месте.
При условие что куб не двигается, за границы его отправить нельзя.


Э-э, так я не понял камеру сейчас двигать можно или нельзя?
Мне тоже спать пора :-)
Про проблемы с камерой честно говоря не понял...

Пожалуйста, скрой простыни кода под спойлер!

1. В этот билд вращение камерой добавлено и на правую клавишу для тебя.

2. Баг был комплексный, не только второй плейн, но и недоработка кода.
Теперь переменная запоминающая в чей коллайдер мы ткнули
после проверки на нужный нам коллайдер заменяет в себе
имя коллайдера на слово "NiHuYa". Это было одной из проблем.
Следующая проблема была в том, что меня интересовали только
координаты падения луча на коллайдер, и персонаж двигался
к ним, теперь же у нас появились координаты навигатора,
и персонаж движется к ним, а не к координатам пика.
В общем 4 правки в коде.

3. Камера двигается в восьми направлениях касанием края экрана
мышкой. Движение камеры ограничено размерами игрового уровня,
она не может выйти за его пределы. У камеры есть невидимая нога,
и именно координаты этой ноги в площади игрового уровня
контролируются. Сама камера от своей ноги отодвинута немного назад.
А при повороте вращается именно нога, а не камера, она его
дочерний объект.

В общем тестите, буду благодарен за выявление новых багов.

Как просил, всё-таки большие коды теперь будут в оффтопе.
Код исправленной системы управления персонажем:



Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PersController : MonoBehaviour
{
    public Camera Camera; //Камера конечно
    public GameObject plane; //Плоскость в которую будем лучом стрелять
    public GameObject Chel; // Персонаж
    public Vector3 ChelCoordinate; //Сюда записываем координаты персонажа
    public Vector3 NavigatorCoordinate; //Сюда записываем координаты навигатора
    public GameObject Navigator; // Маячок с координатами для следования персонажа
    public Vector3 RaycastPickCoordinates; //Конечные координаты падения луча в рейкасте на коллайдер
    public string RaycastObjNow; // Текстовая переменная, содержит имя объекта коллайдер которого попал под луч
    public float DistCheltoNavigator; //Дистанция между персонажем и навигатором
    public int PersMooveSystem = 0; //Система направления и движения персонажа
    public int PersSpeed = 4; //Скорость движения персонажа


    void Update()
    {

        //Сам луч, начинается от позиции камеры и направлен в сторону мыши
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //Структура луча, нужна для получения информации из Raycast
        RaycastHit PickRay;

        //Пускаем луч
        Physics.Raycast(ray, out PickRay);

        //Если нажата ЛКМ
        if (Input.GetMouseButtonDown(0))
        {

     

            //Если запустили луч
            if (Physics.Raycast(ray, out PickRay))
            {
                //Получаем координаты пика на коллайдере
                RaycastPickCoordinates = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);
                //Выводим координаты в дебаггер
                Debug.Log("Координаты падения луча на какой-либо коллайдер игрового объекта" + RaycastPickCoordinates);


                //Пишем в RaycastObjNow и дебаггер конкретно во что воткнулся луч
                RaycastObjNow = PickRay.collider.name;
                Debug.Log("Пишем в RaycastObjNow имя коллайдера попавшего в рейкаст:" + RaycastObjNow);


                //Если луч попал в плейн
                if (RaycastObjNow == "Plane")
                {
                    //Обнуляем RaycastObjNow
                    RaycastObjNow = "NiHuYa";
                    Debug.Log("Имя в RaycastObjNow: " + RaycastObjNow);
                    Debug.Log("Тыкнули в плейн, и двигаем Navigator!");
                    //Перемещаем навигатор персонажа в точку пика на данном коллайдере
                    Navigator.transform.position = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);

                    //Определяем координаты персонажа
                    ChelCoordinate = Chel.transform.position;
                    Debug.Log("Координаты персонажа: " + ChelCoordinate);

                    //Определяем дистанцию между персонажем и навигатором
                    DistCheltoNavigator = Vector3.Distance(Chel.transform.position, RaycastPickCoordinates);
                    Debug.Log("Дистанция между Navigator и Персонажем: " + DistCheltoNavigator);

                    //Если дистанция между персонажем и навигатором больше определённой величины
                    if (DistCheltoNavigator >= 0.51f)

                    {
                        //Активируем систему направления и движения персонажа
                        PersMooveSystem = 1;

                        if (PersMooveSystem > 1)
                        {
                            PersMooveSystem = 1;
                        }

                        Debug.Log("Активирована система направления и движения персонажа");

                    }

                   

                }


                //Если луч попал в коллайдер игрового объекта
                if (PickRay.collider.gameObject)
                {
                    //Пишем в дебаггере название объекта, в который попал луч
                    Debug.Log("Луч попал в коллайдер игрового объекта: " + PickRay.collider.name);


                }


            }


        }

        //Визуализируем луч в окне сцены
        Debug.DrawLine(ray.origin, PickRay.point, Color.red);

        //Проверка активации системы перемещения персонажа
        if (PersMooveSystem >= 1)
        {

            //Прерывалка движения по клавишам стрелочкам

            if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
            {
                PersMooveSystem = 0;
           
            }

            //Записываем координаты навигатора
            NavigatorCoordinate = Navigator.transform.position;
            //Создаём навигационный вектор позиции на который будем поворачивать персонажа, он состоит из вектора координат положения навигатора по "x" и "z", сохраня в "y" вектора координату "y" позиции персонажа
            Vector3 NavigatorPosition = new Vector3(NavigatorCoordinate.x, Chel.transform.position.y, NavigatorCoordinate.z);
            //Поворачиваем персонажа на позицию навигатора по "x" и "z" сохраняя "y" координату персонажа.
            Chel.transform.LookAt(NavigatorPosition);


         

            //Определяем дистанцию между персонажем и навигатором
            DistCheltoNavigator = Vector3.Distance(Chel.transform.position, NavigatorCoordinate);

            //Проверяем дистанцию между персонажем и навигатором
            if (DistCheltoNavigator < 0.51f)
            {
                //Отключаем систему направления и движения персонажа
                PersMooveSystem = 0;

                Debug.Log("Отключена система направления и движения персонажа");
            }

            // Двигаем персонажа вперёд соблюдая такты времени
            Chel.transform.Translate(Vector3.forward * Time.deltaTime * PersSpeed);

            Debug.Log("Активность системы направления и движения персонажа:" + PersMooveSystem);
        }

    }
}


Crystal 22.02.2020 19:47

Ответ: I.D.S. MONSTERS
 
Принимаю ваши советы, идеи и предложения по отрисовке
сетки игрового поля, по которой мы будем двигать монстров (а ля HoMM).

В блитце я создавал меш , квадраты отрисовывал полигонами повершинно (2 трианглы на квадрат),
с отступом от соседних квадратов. Короче сетка из цельного меша
была, а выделение ячейки делал перекрашиванием вершин.

В юнити как лучше реализовать визуализацию сетки?
Интересует самый дешёвый способ. Меш например был
дешёв, так как он один цельный объект, а не куча линий
рисуемых. Я также могу меш и тут создать, фигануть
его поверх плейна, и установить прозрачность процентов на 40.

Или прям по плейну текстурой рисовать?

P.s. Сетка будет не гексоганальная, так-как её использование в 3D игрухе бред полный,
такая годится только для изометрических игр с поворотом уровня на 45 градусов.
(И то бессмысленна, так как вместо восьми направлений движения оставляет нам 6.
Её используют вроде только для экономии 25% спрайтов на экране, и усложняют этим путь объекта.
Тут сетка будет как в неклассических героях, из квадратов.

ABTOMAT 23.02.2020 17:14

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317047)
Принимаю ваши советы, идеи и предложения по отрисовке
сетки игрового поля, по которой мы будем двигать монстров (а ля HoMM).

В блитце я создавал меш , квадраты отрисовывал полигонами повершинно (2 трианглы на квадрат),
с отступом от соседних квадратов. Короче сетка из цельного меша
была, а выделение ячейки делал перекрашиванием вершин.

В юнити как лучше реализовать визуализацию сетки?
Интересует самый дешёвый способ. Меш например был
дешёв, так как он один цельный объект, а не куча линий
рисуемых. Я также могу меш и тут создать, фигануть
его поверх плейна, и установить прозрачность процентов на 40.

Или прям по плейну текстурой рисовать?

P.s. Сетка будет не гексоганальная, так-как её использование в 3D игрухе бред полный,
такая годится только для изометрических игр с поворотом уровня на 45 градусов.
(И то бессмысленна, так как вместо восьми направлений движения оставляет нам 6.
Её используют вроде только для экономии 25% спрайтов на экране, и усложняют этим путь объекта.
Тут сетка будет как в неклассических героях, из квадратов.

В сегодняшних реалиях можно не экономить и тупо каждую клетку отдельным мешем делать.
Если очень хочешь запариться с генерацией сетки, то в Юнити тоже так можно, да (есть туторы и т.д.).
Можешь также сделать плейн и на него клетчатую текстуру. А если какую-то клетку надо выделить, то тогда полигональный квадратик туда подсовывать.

Crystal 23.02.2020 21:58

Ответ: I.D.S. MONSTERS
 
Вложений: 1
Цитата:

Сообщение от ABTOMAT (Сообщение 317048)
В сегодняшних реалиях можно не экономить и тупо каждую клетку отдельным мешем делать.
Если очень хочешь запариться с генерацией сетки, то в Юнити тоже так можно, да (есть туторы и т.д.).
Можешь также сделать плейн и на него клетчатую текстуру. А если какую-то клетку надо выделить, то тогда полигональный квадратик туда подсовывать.

В данный момент уже сделана такая текстура клетки, и затайлена на плейн.
Этот плейн будем юзать для пика лучом, чтобы просчитать координаты клетки.
Скрин ниже.

Ну и переход в боевую сцену запилен, пока по пробелу.

Я пока не решил чем отрисовывать выделенные квадраты,
можно конечно отдельными плейнами, но разумнее всё-таки
это сделать единым мешем, и присваивать текстуру или цвет
нужным вершинам.

P.s. Я щас со стима установил HoMM 7, посмотрю как там у них выглядит это дело.

P.p.s. Кому интересно, как я это делал на блитце, код:


Код:

Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global God = CreateCamera()
MoveEntity God, 5,10,5
RotateEntity God,90,0,0

Global P = CreatePlane()
EntityColor P,200,100,100

Global bermud = CreateMesh()
PositionEntity bermud,0,0,-0.4
EntityFX bermud,2
EntityPickMode bermud,2
Global Surface = CreateSurface(bermud)

Const prohod = 0, stena = 1

Global bermudX#=10
Global bermudZ#=10

Global XK#
Global ZK#

Global Close,Closed,Open

Dim massive(bermudX#,bermudZ#)
Dim massive2(bermudX#,bermudZ#)

For x = 0 To bermudX#-1
For y = 0 To bermudZ#-1

CreateBermud(x,y)

Next
Next

Function CreateBermud(q#,e#)

vertex_1 = AddVertex (Surface, -0.4+q#,0.5,0+e#, 1 ,0)
vertex_2 = AddVertex (Surface, 0.4+q#,0.5,0+e#, 1 ,0)
vertex_3 = AddVertex (Surface, -0.4+q#,0.5,0.8+e#, 0.5,1)
vertex_4 = AddVertex (Surface, 0.4+q#,0.5,0.8+e#, 0.5,1)

massive(q#,e#) = AddTriangle (Surface,vertex_1,vertex_3,vertex_2)
massive2(q#,e#) = AddTriangle (Surface,vertex_3,vertex_4,vertex_2)

End Function



While Not KeyHit(1)

If KeyDown(200) Then MoveEntity God,0,0,-1
If KeyDown(208) Then MoveEntity God,0,0,1

BermudControl()

XK#=Floor(Int(PickedX()))
ZK#=Floor(Int(PickedZ()))

UpdateWorld
RenderWorld
Text 0,10,"PickedX: "+Int(PickedX())
Text 0,30,"PickedZ: "+Int(PickedZ())

Text 0,50,"XK# "+Int(XK#)
Text 0,70,"ZK# "+Int(ZK#)

Flip

Wend
End

Function BermudControl()

CameraPick(God,MouseX(),MouseY())
If PickedEntity()=bermud And MouseHit(1) Then

v1#=Int(ZK#*4)+Int(+XK#*Int(bermudZ#)*4)
v2#=Int(v1+1)
v3#=Int(v2+1)
v4#=Int(v3+1)

If massive(bermudX#,bermudZ#) = prohod Then  Closed = 1
If massive(Int(PickedX()),Int(PickedZ())) = stena Then Open = 1

If Closed = 1 And Close = 0 Then
massive(Int(PickedX()),Int(PickedZ())) = stena
Closed = 0
Close = 1
VertexColor Surface,v1#,100,200,400
VertexColor Surface,v2#,100,200,400
VertexColor Surface,v3#,100,200,400
VertexColor Surface,v4#,100,200,400
End If


If Open = 1 Then
massive(Int(PickedX()),Int(PickedZ())) = prohod
Open = 0
Close = 0
VertexColor Surface,v1#,255,255,155
VertexColor Surface,v2#,255,255,155
VertexColor Surface,v3#,255,255,155
VertexColor Surface,v4#,255,255,155
End If

If Close = 1 Then Close = 0

End If

End Function

Я к ней потом на хорсе А* прикрутил, и PhysX, получился механически старкрафт 2 ))
Но блитц штука тупая как и хорс под блитцем, 25 фпс было с 50 юнитами ищущими путь.

Crystal 24.02.2020 21:41

Ответ: I.D.S. MONSTERS
 
Итак, по своему же принципу из блитца, научил движок
визуализировать координатную сетку мешем.
Сколько клеток, столько полигонов, один полигон
состоит из двух триангл.
В будущем на нужный полигон будем натягивать
необходимую в данный момент текстуру клетки.

Билд выкладывать смысла не вижу, вы там просто
очередную плоскость увидите.

Код создания сетки полигонами:


Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetkaCreator : MonoBehaviour
{


    public int SetkaScaleZ = 10; //Размер сетки по оси "Z".
    public int SetkaScaleX = 10; //размер сетки по оси "X".
    public int SetcaPloshad; //Площадь сетки.

    //Статичные переменные для отсчёта в циклах создания клеток сетки.
    public int Z = 0;
    public int X = 0;
    public int U = 0;

    void Start()
    {

    //Расчёт площади сетки.
        SetcaPloshad = SetkaScaleZ * SetkaScaleX;

        //Создаём меш.

        Mesh Setka = new Mesh();

        //Подключаем меш фильтр.
        MeshFilter SetkaFilter = GetComponent<MeshFilter>();

        //Применяем мешфильтр к мешу.
        SetkaFilter.mesh = Setka;

        //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.
        for (Z = 0; Z < SetkaScaleZ; SetkaScaleZ--)
        {

                for (X = 0; X < SetkaScaleX; SetkaScaleX--)
                {

                for (U = 0; U < SetcaPloshad; SetcaPloshad--)
                {


                    //Создаём вектор вершин с массивом из четырёх штук.
                    Vector3[] Vershini = new Vector3[4]
                    {
                    //Пишем в масси координаты вершин опираясь на размер сетки по её осям.
                    new Vector3(0,0,0), new Vector3(SetkaScaleX,0,0), new Vector3(0,SetkaScaleZ,0), new Vector3(SetkaScaleX,SetkaScaleZ,0)
                    };

                    //Создаём массив с трианглами.
                    int[] Bermubes = new int[6];
                    Bermubes[0] = 0;
                    Bermubes[1] = 2;
                    Bermubes[2] = 1;
                    Bermubes[3] = 2;
                    Bermubes[4] = 3;
                    Bermubes[5] = 1;

                    //Создаём массив с текстурнымикоординатами.
                    Vector2[] TextureCoordinates = new Vector2[4]
                    {

                    new Vector2(0,0) , new Vector2(1,0) , new Vector2(0,1) , new Vector2(1, 1)

                    };

                    //Задаём вершины мешу.
                    Setka.vertices = Vershini;
                    //Создаём трианглы меша.
                    Setka.triangles = Bermubes;
                    //Создаём uv развёртку.
                    Setka.uv = TextureCoordinates;

                }
            }

        }





    }

    void Update()
    {
       
    }
}


Crystal 25.02.2020 17:27

Ответ: I.D.S. MONSTERS
 
Для меня лично хреновенькие новости.
Юнити оказался более убогим инструментом, чем мне думалось.
К сожалению в нём нет никакой встроенной функции, чтобы
программно натягивать текстуры на выбранный полигон.
Совсем нет! Можно цвет вершин менять, как в блитце, но
это простите пещерный век. Мою задачу может решить
только самодельный шейдер, т.е. самому лично написать.
Шейдеры это у нас (HLSL, GLSL, Cg, ASM), ни того ни другого,
ни третьего, ни четвёртого я не знаю, и всандалить кучу времени
на изучение данного вопроса для создания мать его одного эффекта
всего лишь, я не могу. Такими темпами я буду игру создавать
вплоть до полной колонизации галактики человечеством.

Меняем стратегию. У меня родилось 3 варианта, которые я рассматриваю:

1. Вырезаем ненужные или нужные полигоны из меша сетки,
при этом у нас будет 2 сетки, на одной тайловая текстура
проходимых клеток, на второй непроходимых.

2. Не режем полигоны, а разворачиваем их нормали в противоположную
сторону от камеры, так же всё в связке с 2 сетками.

3. Создаём меш из клеток нужной формы, и ставим на нужные
координаты поверх сетки, наносим на него тайловую текстуру
клеток непроходимости.

Я пока не знаю что дешевле, вырезать дырки в меше,
разворачивать нормали, или генерить каждый раз новый
небольшой меш.

Но в любом случае все эти варианты дешевле, чем создавать
каждую клетку отдельным мешем, вы только вдуууумайтесь
какая жопа будет, если я решу создать поле размером 100 на
100 клеток отдельными мешами, этот вариант точно не вариант.

P.s. Ещё один вариант-не вариант это генерить текстуру сетки.
отрисовывая на ней клетки проходимости и непроходимости,
и перенатягивать на меш-сетку. Нунах.

ABTOMAT 25.02.2020 19:49

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317058)
Для меня лично хреновенькие новости.
Юнити оказался более убогим инструментом, чем мне думалось.
К сожалению в нём нет никакой встроенной функции, чтобы
программно натягивать текстуры на выбранный полигон.
Совсем нет! Можно цвет вершин менять, как в блитце, но
это простите пещерный век. Мою задачу может решить
только самодельный шейдер, т.е. самому лично написать.
Шейдеры это у нас (HLSL, GLSL, Cg, ASM), ни того ни другого,
ни третьего, ни четвёртого я не знаю, и всандалить кучу времени
на изучение данного вопроса для создания мать его одного эффекта
всего лишь, я не могу. Такими темпами я буду игру создавать
вплоть до полной колонизации галактики человечеством.

Меняем стратегию. У меня родилось 3 варианта, которые я рассматриваю:

1. Вырезаем ненужные или нужные полигоны из меша сетки,
при этом у нас будет 2 сетки, на одной тайловая текстура
проходимых клеток, на второй непроходимых.

2. Не режем полигоны, а разворачиваем их нормали в противоположную
сторону от камеры, так же всё в связке с 2 сетками.

3. Создаём меш из клеток нужной формы, и ставим на нужные
координаты поверх сетки, наносим на него тайловую текстуру
клеток непроходимости.

Я пока не знаю что дешевле, вырезать дырки в меше,
разворачивать нормали, или генерить каждый раз новый
небольшой меш.

Но в любом случае все эти варианты дешевле, чем создавать
каждую клетку отдельным мешем, вы только вдуууумайтесь
какая жопа будет, если я решу создать поле размером 100 на
100 клеток отдельными мешами, этот вариант точно не вариант.

P.s. Ещё один вариант-не вариант это генерить текстуру сетки.
отрисовывая на ней клетки проходимости и непроходимости,
и перенатягивать на меш-сетку. Нунах.

Любое изменение в меше означает, что надо будет заново формировать индексный и вершинный буферы и передавать их на видеокарту, поэтому в принципе одинаково.

Сколько у тебя будет клеток? Если 50х50 — делай тупо отдельным GameObject'ами и не трать время на premature-оптимизацию.

Crystal 25.02.2020 22:22

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ABTOMAT (Сообщение 317059)
Любое изменение в меше означает, что надо будет заново формировать индексный и вершинный буферы и передавать их на видеокарту, поэтому в принципе одинаково.

Сколько у тебя будет клеток? Если 50х50 — делай тупо отдельным GameObject'ами и не трать время на premature-оптимизацию.

Размер поля будет увеличиваться прямо-пропорционально
увеличению класса монстров в бое. На финальном боссе
точно будет около 100 на 100.

Как я писал ранее:

Цитата:

Монстры будут классифицированы по типу угрозы с их стороны.
всего семь классов:

7. Божественный
6. Титанический
5. Демонический
4. Слоновый
3. Львиный
2. Собачий
1. Мышиный
Размер поля боя будет высчитываться исходя из типа угрозы,
будем смотреть кто самый крутой в бое, и под него подгонять поле.

Решил визуализировать выделение созданием отдельного меша.
Начал уже писать скрипт, на базе уже существующего генератора меша,
надо доработать. Через несколько дней надеюсь будет билда.

Crystal 01.03.2020 22:51

Ответ: I.D.S. MONSTERS
 
В данный момент выкладка билды смысла не имеет,
решил запилить отчёт девблогом:



Код:


Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetkaDvijControl : MonoBehaviour
{

    //Сетка движения юнита.
    //-------------------------------------------------------------------------------------------------------------------------------------------
    public int SetkaDvijCreator = 0;
    public GameObject SetkaMobile;
    public GameObject TipaMonster;
    public float SetkaScaleZ = 10;
    public float SetkaScaleX = 10;
    public float SetkaDvijScaleZ = 5; //Размер сетки по оси "Z".
    public float SetkaDvijScaleX = 5; //размер сетки по оси "X".


    public float SetcaDvijPloshad; //Площадь сетки.

    //Статичные переменные для отсчёта в циклах создания клеток сетки.
    public int ZDvij = 0;
    public int XDvij = 0;
    public int UDvij = 0;

    public Vector3 Pickposition;
    public float MonsterHoditX;
    public float MonsterHoditZ;
    public float vx;
    public float vz;



    void Update()
    {


        if (Input.GetKeyDown(KeyCode.Space))
        {

            if (SetkaDvijCreator == 0)
            {

                SetkaDvijCreator = 1;

                Pickposition = TipaMonster.transform.position;


                MonsterHoditX = SetkaDvijScaleX / 2f;
                MonsterHoditZ = SetkaDvijScaleZ / 2f;


                SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ);


                //Регулируем размер сетки выделения и её позицию относительно краёв поля

                // Если сетка выползла за левый край игрового поля, подрезаем её на количество выползающих клеток, и на столько же сдвигаем
                if (Pickposition.x - MonsterHoditX < 0)

                {
                    vx = Pickposition.x - MonsterHoditX;
                    SetkaDvijScaleX = SetkaDvijScaleX + vx;
                    SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX - vx, 0, Pickposition.z - MonsterHoditZ);
                }

                // Если сетка выползла за правый край игрового поля, подрезаем её на количество выползших клеток
                if (Pickposition.x + MonsterHoditX > SetkaScaleX)

                {
                    vx = (Pickposition.x + MonsterHoditX) - SetkaScaleX;
                    SetkaDvijScaleX = SetkaDvijScaleX - vx;
                }


                // Если сетка выползла за нижний край игрового поля, подрезаем егё на количество выползающих клеток, и на столько же сдвигаем

                if (Pickposition.z - MonsterHoditZ < 0)

                {
                    vz = Pickposition.z - MonsterHoditZ;
                    SetkaDvijScaleZ = SetkaDvijScaleZ + vz;
                    SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ - vz);
                }

                // Если сетка выползла за верхний край игрового поля, подрезаем её на количество выползших клеток
                if (Pickposition.z + MonsterHoditZ > SetkaScaleZ)

                {
                    vz = (Pickposition.z + MonsterHoditZ) - SetkaScaleZ;
                    SetkaDvijScaleZ = SetkaDvijScaleZ - vz;
                }


                //------------------------------------------------------------------------------------------------------------------------------------


                Mesh SetkaDvij = new Mesh();
                //Подключаем меш фильтр.
                MeshFilter SetkaDvijFilter = GetComponent<MeshFilter>();
                //Применяем мешфильтр к мешу.
                SetkaDvijFilter.mesh = SetkaDvij;

             

                //Расчёт площади сетки.
                SetcaDvijPloshad = SetkaDvijScaleZ * SetkaDvijScaleX;

                //Создаём меш.



                //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.
                for (ZDvij = 0; ZDvij < SetkaDvijScaleZ; SetkaDvijScaleZ--)
                {



                    for (XDvij = 0; XDvij < SetkaDvijScaleX; SetkaDvijScaleX--)

                    {



                        for (UDvij = 0; UDvij < SetcaDvijPloshad; SetcaDvijPloshad--)
                        {








                                //Создаём вектор вершин с массивом из четырёх штук.
                                Vector3[] Vershini2 = new Vector3[4]
                                {
                              //Пишем в масси координаты вершин опираясь на размер сетки по её осям.
                                new Vector3(0,0,0), new Vector3(SetkaDvijScaleX,0,0), new Vector3(0,SetkaDvijScaleZ,0), new Vector3(SetkaDvijScaleX,SetkaDvijScaleZ,0)
                                };


                                //Создаём массив с трианглами.
                                int[] Bermudes2 = new int[6];
                                Bermudes2[0] = 0;
                                Bermudes2[1] = 2;
                                Bermudes2[2] = 1;
                                Bermudes2[3] = 2;
                                Bermudes2[4] = 3;
                                Bermudes2[5] = 1;

                                Vector2[] TextureCoordinates2 = new Vector2[4]
                                {

                              new Vector2(0,0) , new Vector2(SetkaDvijScaleX,0) , new Vector2(0,SetkaDvijScaleZ) , new Vector2(SetkaDvijScaleX, SetkaDvijScaleZ)

                                };



                                //Задаём вершины мешу.
                                SetkaDvij.vertices = Vershini2;
                                //Создаём трианглы меша.
                                SetkaDvij.triangles = Bermudes2;
                                SetkaDvij.uv = TextureCoordinates2;

                                SetkaDvij.RecalculateBounds();
                                SetkaDvij.RecalculateNormals();
                                SetkaDvij.RecalculateTangents();

                            }
                        }
                    }




               

            }




        }

    }
}


Crystal 02.03.2020 00:47

Ответ: I.D.S. MONSTERS
 
Вложений: 1
Вот так по симпатичней уже.
Напомню в рендере всего 2 меша с 2 текстурами (если не считать капсулу монстра).
Вполне дёшего по моему. Если делать все клетки отдельными мешами,
то в кадре было бы на 123 меша больше, т.е. в 62,5 раза больше мешей.

P.s. Всё-таки билду решил приложить: ТЫК
Нажатие пробела переносит нас в сцену боя, в сцене боя нажатие пробела создаёт сетку хождения монстра.

Crystal 02.03.2020 23:54

Ответ: I.D.S. MONSTERS
 
Вложений: 1
Пост оффтопный.

Я много видел плагиата на вселенную покемонов,
но что-бы на столько нагло, в первый раз: ТЫЫЫК
Вообще ни стыда не совести, все монстры здесь
это покемоны из официальной вселенной, и имеют некоторые
незначительные отличия, ну не так уши загнуты,
или на них одежда надета. А чо так можно было?
Даже музыка в игре, это каверы на музыку из покемонов.

Сцука да вот даже картинка, на которой в наглую срисованы
как минимум Чаризард, Бульбазавр, и Вартотл:



Оригиналы:



А это блин например вообще ни разу не пикачу скрещенный с райчу?



Оригиналы:



Вот у них хантэр, чармандэр, и дратини например:



Но зовут их конечно каспес, дино, и дракоша.

А оригиналы вот:



Дратини и Драгонэир



Я не понимаю, в чём проблема придумать СВОИХ монстров блэт?


Для меня например не было никакой проблемой придумать какого-нибудь дуплуса, который прикреплён к посту,
так в чём проблема у таких плагиаторов? Полное отсутствие фантазии, или попытка надурить детишек выдавая себя за то, чем не являются?

У меня всегда бомбит, когда я вижу клоны, не в плане копирования механик, а тупо клоны, типа как штаны ADIBASS.


ABTOMAT 03.03.2020 00:16

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317072)
Пост оффтопный.

Я многого видел плагиата на вселенную покемонов,
но что-бы на столько нагло, в первый раз: ТЫЫЫК
Вообще ни стыда не совести, все монстры здесь
это покемоны из официальной вселенной, и имеют некоторые
незначительные отличия, ну не так уши загнуты,
или на них одежда надета. А чо так можно было?
Даже музыка в игре, это каверы на музыку из покемонов.

Сцука да вот даже картинка, на которой в наглую срисованы
как минимум Чаризард, Бульбазавр, и Вартотл:



А это блин например вообще ни разу не пикачу?



Вот у них хантэр, чармандэр, и дратини например:



Но зовут их конечно каспес, дино, и дракоша.

Я не понимаю, в чём проблема придумать СВОИХ монстров блэт?

На самом деле эти ребята по очень тонкому льду ходят, потому что Нинтенда на адвокатов тратит чуть ли не больше, чем на собственно разработку. Я бы с Нинтендой (как и с Диснеем) так шутить не стал. Если это дело станет более-менее зарабатывать, то обратит на себя внимание Нинтенды, и те их засудят. А в американском суде побеждает тот, у кого больше денег на адвокатов, а Нинтенда на них бабок не жалеет.

Crystal 03.03.2020 00:33

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ABTOMAT (Сообщение 317073)
На самом деле эти ребята по очень тонкому льду ходят, потому что Нинтенда на адвокатов тратит чуть ли не больше, чем на собственно разработку. Я бы с Нинтендой (как и с Диснеем) так шутить не стал. Если это дело станет более-менее зарабатывать, то обратит на себя внимание Нинтенды, и те их засудят. А в американском суде побеждает тот, у кого больше денег на адвокатов, а Нинтенда на них бабок не жалеет.

Да я даже посмотрел бы как их отымеют в суде, и похлопал бы в ладоши.
По тому что глядя на такой высер, появляется лишь желание обоссать лица авторам плагиата.

Crystal 04.03.2020 21:23

Ответ: I.D.S. MONSTERS
 
Что-то взрослая жизнь бьёт временем по щекам.
Первый раз за 3 дня нашёл полтора часа по кодить.

Нашёл страшную недоработку сетки монстра,
если одновременно сетка выползала за обе координаты игрового
поля ниже 0, то сетка подрезалась, но не смещалась по Х вправо,
а на оборот уезжала влево. Решил проблему добавлением этого участка кода:

Код:

                // Выравниваем сетку, когда её координаты вылезают за 0 по обеим осям

                if (Pickposition.x - MonsterHoditX < 0 && Pickposition.z - MonsterHoditZ < 0)
                {
                    SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX - vx, 0, Pickposition.z - MonsterHoditZ - vz);

                }

Ну так же я тут читал, что такое префабы, и с чем их едят.
Частично поглотил информацию, и научился клонировать
своих монстров в нужном месте одной строчкой кода.
Я считаю это прогресс для меня, лол )
В блитце это дело делалось через типы, а в юнити явно проще всё.

Щас нужно будет сделать выделение монстра мышкой через луч,
потом генератор монстров на карте, где мы персонажем бегаем,
чтобы контакт с ними перекидывал нас на сцену боя.
Сделать систему свой-чужой, и пошаговый бой, вот пока
такие планы на ближайшее будущее.
После реализации вышеописанного данную наработку
можно уже официально будет считать игрой.

Crystal 05.03.2020 21:23

Ответ: I.D.S. MONSTERS
 
Сегодня можно было плотно по программировать,
или посмотреть две новые серии ходячих мертвецов.
В общем серии оказались полным говном ))

Однако, сделал выделение монстров кликом мыши.
Пришлось подзапариться с тем, как сделать чтобы
выделялся только один, а также подзапариться
с удаленем сетки уже выделенного монстра.
Альфа вариант успешно функционирует )

В общем как сделать, чтобы не все префабы выделились
при щелчке по одному из них, а только нужный?
Проверить его координаты!

Берём координаты префаба монстра, пускаем луч,
сравниваем позицию префаба по осям X и Z с
точкой падения луча. Если координаты префаба больше
или равны координатам пика, то из координат префаба
вычитаем координаты пика, ну и записываем результат
по обеим осям в соответствующие переменные.
Так-как у нас размер сетки 1 на 1, то проверяем
числа в данных переменных, если они меньше чем 1.01,
значит префаб находится в клетке куда мы луч пускали,
префабу по этим координатам сетку мы и создадим.

Участок кода отвечающий за определение пикнутого лучом монстра:

Код:

                Pickposition = TipaMonster.transform.position;


                if (Pickposition.x >= PickRay.point.x)
                {
                    mx = Pickposition.x - PickRay.point.x;
                }
                else
                {

                    mx = PickRay.point.x - Pickposition.x;
                }

                if (Pickposition.z >= PickRay.point.z)
                {
                    mz = Pickposition.z - PickRay.point.z;
                }
                else
                {

                    mz = PickRay.point.z - Pickposition.z;
                }

      if (mx < 1.01 && mz < 1.01)
                {


А насчёт удаления сетки, когда мы куда-то в другое место пикнули,
то удалять пришлось меш из мешфильтра, а не весь гейм обджект,
я сначала пытался гейм обджект удалять, и новый из префаба вызывать,
но то была проблемная хрень, удалить меш из мешфильтра умное решение.

Удаляем так:

Код:

            if (SetkaDestroyer == 1 && SetkaDvijCreator == 3)
            {
                SetkaDvijCreator = 0;
                SetkaDestroyer = 0;

            }

            if (SetkaDestroyer == 1)
            {
                SetkaDvijCreator = 3;
                Destroy(GetComponent<MeshFilter>().mesh);

                SetkaDvijScaleZ = 5;
                SetkaDvijScaleX = 5;
            }

Если нужна билда, выложу по запросу, но думается мне что никому нах не надо )))

Вот весь код на случай если кто ну очень любопытный.
Предупреждаю, может втсречаться мусор, и неправильные комментарии,
так-как я увлекаюсь самокопипастой, и ваще комментить уже впадлу стало.


Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetkaDvijControl : MonoBehaviour
{

    //Сетка движения юнита.
    //-------------------------------------------------------------------------------------------------------------------------------------------
    public int SetkaDvijCreator = 0;
    public Camera Camera; //Камера конечно
    public GameObject SetkaMobile;
    public GameObject TipaMonster;
    public Object SetkaDvij;
    public int SetkaDestroyer = 0;
    public float SetkaScaleZ = 10;
    public float SetkaScaleX = 10;
    public float SetkaDvijScaleZ = 5; //Размер сетки по оси "Z".
    public float SetkaDvijScaleX = 5; //размер сетки по оси "X".
    public Vector3 RaycastPickCoordinates; //Конечные координаты падения луча в рейкасте на коллайдер
    public string RaycastObjNow; // Текстовая переменная, содержит имя объекта коллайдер которого попал под луч

    public float SetcaDvijPloshad; //Площадь сетки.

    //Статичные переменные для отсчёта в циклах создания клеток сетки.
    public int ZDvij = 0;
    public int XDvij = 0;
    public int UDvij = 0;

    public Vector3 Pickposition;
    public float MonsterHoditX;
    public float MonsterHoditZ;
    public float vx = 0f;
    public float vz = 0f;

    public float mx;
    public float mz;
    public float mDx;
    public float mDz;

    void Update()
    {



        //Сам луч, начинается от позиции камеры и направлен в сторону мыши
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        //Структура луча, нужна для получения информации из Raycast
        RaycastHit PickRay;

        //Пускаем луч
        Physics.Raycast(ray, out PickRay);

        //Если нажата ЛКМ
        if (Input.GetMouseButtonDown(0))
        {



            if (SetkaDestroyer == 1 && SetkaDvijCreator == 3)
            {
                SetkaDvijCreator = 0;
                SetkaDestroyer = 0;

            }

            if (SetkaDestroyer == 1)
            {
                SetkaDvijCreator = 3;
                Destroy(GetComponent<MeshFilter>().mesh);

                SetkaDvijScaleZ = 5;
                SetkaDvijScaleX = 5;
            }

            //Если запустили луч
            if (Physics.Raycast(ray, out PickRay))
            {
                //Получаем координаты пика на коллайдере
                RaycastPickCoordinates = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);
           


                //Пишем в RaycastObjNow и дебаггер конкретно во что воткнулся луч
                RaycastObjNow = PickRay.collider.name;
           

                //Если луч попал в плейн
                if (RaycastObjNow == "Capsule")
                {
                    //Обнуляем RaycastObjNow
                    RaycastObjNow = "NiHuYa";
               

                }


                Pickposition = TipaMonster.transform.position;


                if (Pickposition.x >= PickRay.point.x)
                {
                    mx = Pickposition.x - PickRay.point.x;
                }
                else
                {

                    mx = PickRay.point.x - Pickposition.x;
                }

                if (Pickposition.z >= PickRay.point.z)
                {
                    mz = Pickposition.z - PickRay.point.z;
                }
                else
                {

                    mz = PickRay.point.z - Pickposition.z;
                }




                if (mx < 1.01 && mz < 1.01)
                {


                    if (SetkaDvijCreator == 0)
                    {

                        SetkaDvijCreator = 1;
                        SetkaDestroyer = 1;

                        Pickposition = TipaMonster.transform.position;


                        MonsterHoditX = SetkaDvijScaleX / 2f;
                        MonsterHoditZ = SetkaDvijScaleZ / 2f;


                        SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ);


                        //Регулируем размер сетки выделения и её позицию относительно краёв поля

                        // Если сетка выползла за левый край игрового поля, подрезаем егё на количество выползающих клеток, и на столько же сдвигаем
                        if (Pickposition.x - MonsterHoditX < 0)

                        {
                            vx = Pickposition.x - MonsterHoditX;
                            SetkaDvijScaleX = SetkaDvijScaleX + vx;
                            SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX - vx, 0, Pickposition.z - MonsterHoditZ);
                        }

                        // Если сетка выползла за правый край игрового поля, подрезаем её на количество выползших клеток
                        if (Pickposition.x + MonsterHoditX > SetkaScaleX)

                        {
                            vx = (Pickposition.x + MonsterHoditX) - SetkaScaleX;
                            SetkaDvijScaleX = SetkaDvijScaleX - vx;
                        }


                        // Если сетка выползла за нижний край игрового поля, подрезаем её на количество выползающих клеток, и на столько же сдвигаем

                        if (Pickposition.z - MonsterHoditZ < 0)

                        {
                            vz = Pickposition.z - MonsterHoditZ;
                            SetkaDvijScaleZ = SetkaDvijScaleZ + vz;
                            SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ - vz);
                        }

                        // Если сетка выползла за верхний край игрового поля, подрезаем её на количество выползших клеток
                        if (Pickposition.z + MonsterHoditZ > SetkaScaleZ)

                        {
                            vz = (Pickposition.z + MonsterHoditZ) - SetkaScaleZ;
                            SetkaDvijScaleZ = SetkaDvijScaleZ - vz;
                        }

                        // Выравниваем сетку, когда её координаты вылезают за 0 по обеим осям

                        if (Pickposition.x - MonsterHoditX < 0 && Pickposition.z - MonsterHoditZ < 0)
                        {
                            SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX - vx, 0, Pickposition.z - MonsterHoditZ - vz);

                        }


                        //------------------------------------------------------------------------------------------------------------------------------------


                        Mesh SetkaDvij = new Mesh();
                        //Подключаем меш фильтр.
                        MeshFilter SetkaDvijFilter = GetComponent<MeshFilter>();
                        //Применяем мешфильтр к мешу.
                        SetkaDvijFilter.mesh = SetkaDvij;
                       
                        Debug.Log("Создали SetkaDvij");




                        //Расчёт площади сетки.
                        SetcaDvijPloshad = SetkaDvijScaleZ * SetkaDvijScaleX;

                        //Создаём меш.



                        //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.
                        for (ZDvij = 0; ZDvij < SetkaDvijScaleZ; SetkaDvijScaleZ--)
                        {



                            for (XDvij = 0; XDvij < SetkaDvijScaleX; SetkaDvijScaleX--)

                            {



                                for (UDvij = 0; UDvij < SetcaDvijPloshad; SetcaDvijPloshad--)
                                {








                                    //Создаём вектор вершин с массивом из четырёх штук.
                                    Vector3[] Vershini2 = new Vector3[4]
                                    {
                              //Пишем в массив координаты вершин опираясь на размер сетки по её осям.
                                new Vector3(0,0,0), new Vector3(SetkaDvijScaleX,0,0), new Vector3(0,SetkaDvijScaleZ,0), new Vector3(SetkaDvijScaleX,SetkaDvijScaleZ,0)
                                    };


                                    //Создаём массив с трианглами.
                                    int[] Bermudes2 = new int[6];
                                    Bermudes2[0] = 0;
                                    Bermudes2[1] = 2;
                                    Bermudes2[2] = 1;
                                    Bermudes2[3] = 2;
                                    Bermudes2[4] = 3;
                                    Bermudes2[5] = 1;

                                    Vector2[] TextureCoordinates2 = new Vector2[4]
                                    {

                              new Vector2(0,0) , new Vector2(SetkaDvijScaleX,0) , new Vector2(0,SetkaDvijScaleZ) , new Vector2(SetkaDvijScaleX, SetkaDvijScaleZ)

                                    };



                                    //Задаём вершины мешу.
                                    SetkaDvij.vertices = Vershini2;
                                    //Создаём трианглы меша.
                                    SetkaDvij.triangles = Bermudes2;
                                    SetkaDvij.uv = TextureCoordinates2;

                                    SetkaDvij.RecalculateBounds();
                                    SetkaDvij.RecalculateNormals();
                                    SetkaDvij.RecalculateTangents();

                                }
                            }
                        }





                    }

                        else
                    {


                        SetkaDvijScaleZ = 5;
                        SetkaDvijScaleX = 5;
                     


                    }

                 
                 

                   
                }
            }









   


        }

    }
}



Смотреть мой форумный блог полезно тому, кто соберётся например своих героев меча и магии на юнити написать,
я иду к этой механике, только она будет сложнее. Так что, не пропускайте )

Ах да, монстры из префабов вызываются сейчас так:

Код:

void Start()
    {
        Instantiate(TipaMonster, new Vector3(1.5f, 0, 2.5f), Quaternion.identity);
        Instantiate(TipaMonster, new Vector3(5.5f, 0, 5.5f), Quaternion.identity);
        Instantiate(TipaMonster, new Vector3(9.5f, 0, 9.5f), Quaternion.identity);
    }


ABTOMAT 06.03.2020 02:08

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317081)
Сегодня можно было плотно по программировать,
или посмотреть две новые серии ходячих мертвецов.
В общем серии оказались полным говном ))

Благодаря тому, что ты стал постить прогресс в своём проекте, я решил "а чё я лох штоле" и тоже свой проект достал из пыльного ящика и тоже покодил.

Как в старые-добрые времена, когда чувствовал себя лохом, что посоны на форуме чё-то кодят а ты нет.:-D

Crystal 06.03.2020 05:36

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ABTOMAT (Сообщение 317084)
Благодаря тому, что ты стал постить прогресс в своём проекте, я решил "а чё я лох штоле" и тоже свой проект достал из пыльного ящика и тоже покодил.

Как в старые-добрые времена, когда чувствовал себя лохом, что посоны на форуме чё-то кодят а ты нет.:-D

Похвально. Сложно найти в себе силы что-то делать.
Я вот 10 лет почти искал. Бабы, мотоциклы, автомобили,
онлайн игры, работа, сон в конце концов, не до проектов.
Столько идей нереализованных. Деградировал,
многое упустил в геймдеве. 3DMAX тоже открывал в
2012 году наверно последний раз, по этому в этом проекте
я начну изучать блендер. Пока мы тут жили жизнью обычного
человека, некоторые форумчане продолжили начинания,
и уже живут жизнью необычного, так что надо брать пример.

Ещё для меня хорошим примером стал "Крис Хант", он 12 лет
разрабатывал Kenshi, и всё-таки релизнул, и она начала неплохо
продаваться. До сих пор кстати игру дорабатывает, и продаёт.
ТЫЫЫК

Crystal 09.03.2020 00:47

Ответ: I.D.S. MONSTERS
 
Блин всё-таки этот сраный юнити, да в связке с сишарпом, адище то ещё.
Я сказал что префабы делают всё легче, чем типы в блитце? Забудьте!
Это ад какой-то! Нет, не когда ты в префабах деревья да камни харнишь.
а когда у тебя там боты мать их.
Я тут дошёл до типов, слоёв, триггеров, и т.д. и это мне чуть пукан всё
не порвало, на сколько всё по ублюдски сделано!

Однако, прогресс:
1. Монстры теперь выполнены текстурой на плоском кваде,
который всегда поворачивается на камеру (щас не до моделинга).
И вот с этим поворачиванием я намаялся, всё никак не мог заставить
одновременно всех ботов на камеру смотреть, всё решил в
итоге параметр "This", кто знает, тот поймёт.

2. Теперь монстры имеют радиус обзора, реализованный через триггер,
который отслеживает слой игрока, и если коллайдер игрока залез
в триггер, монстр начинает за ним бежать. У монстра есть отсчёт
времени бега, а также контроль зоны видимости. Пока игрок
в зоне видимости, монстр за ним будет бежать, как только мы
из зоны выйдем, монстр будет бежать по таймеру, который закончится.
Убежать вполне реально.

3. Есть ещё один триггер, это уже на подход монстра вплотную проверка идёт,
чтобы перекинуть нас на сцену боя.

На сцене боя пока можно только по выделять монстров.

----

На самом деле на словах не так много реализовано, но игра уже состоит
из 14 скриптовых файлов, кучи объектов, переменных.
А эти млять триггеры, да слои мне таких проблем насоздавали,
что абсолютно во всём предыдущем коде есть изменения.

В общем ловите билду ТЫК , и тестите. Жду репорты о багах.

ant0N 09.03.2020 20:53

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317090)
Блин всё-таки этот сраный юнити, да в связке с сишарпом, адище то ещё.
Я сказал что префабы делают всё легче, чем типы в блитце? Забудьте!
Это ад какой-то! Нет, не когда ты в префабах деревья да камни харнишь.
а когда у тебя там боты мать их.
Я тут дошёл до типов, слоёв, триггеров, и т.д. и это мне чуть пукан всё
не порвало, на сколько всё по ублюдски сделано!
.

Как же я тебя понимаю... Третий месяц пошел как я работаю с юнити, стулья прогорают один за другим. Но чувствую, это только вершина айсберга.
Вот даже не могу сказать что в юнити сделано хорошо, чтобы без оговорок

Crystal 09.03.2020 21:20

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от ant0N (Сообщение 317091)

Как же я тебя понимаю... Третий месяц пошел как я работаю с юнити, стулья прогорают один за другим. Но чувствую, это только вершина айсберга.
Вот даже не могу сказать что в юнити сделано хорошо, чтобы без оговорок


Ну что хорошо?
Примитивы создаются кликом мыши,
коллизионные примитивы можешь вручную по модели навтыкать,
текстуры кидаются на модель мышкой,
встроенный ПП, график там какой-то по настройке анимаций,
со стрелочками (напоминающий ноды в УЕ4).

Ну и для меня пока всё.
Вот даже это типа редактор-сцена, где можно все объекты расставить,
это хрень, мне на блитце было проще свой редактор написать,
он у меня просто все модели из папки загружал в массив,
и в меню выстраивал. От туда мышкой берёшь и расставляешь.

Слишком много в юнити переплетено в одном окне.

Ах да, невозможность в скрипт префаба в инспекторе перетянуть
геймобджект из иерархии это вообще ор, который мне кучу проблем насоздавал,
и пришлось кодом подключать по тегам, пример:
Код:

CamPapa = GameObject.FindWithTag("CamPapaTag");

ABTOMAT 10.03.2020 13:41

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317090)
Блин всё-таки этот сраный юнити, да в связке с сишарпом, адище то ещё.
Я сказал что префабы делают всё легче, чем типы в блитце? Забудьте!
Это ад какой-то! Нет, не когда ты в префабах деревья да камни харнишь.
а когда у тебя там боты мать их.
Я тут дошёл до типов, слоёв, триггеров, и т.д. и это мне чуть пукан всё
не порвало, на сколько всё по ублюдски сделано!

Однако, прогресс:
1. Монстры теперь выполнены текстурой на плоском кваде,
который всегда поворачивается на камеру (щас не до моделинга).
И вот с этим поворачиванием я намаялся, всё никак не мог заставить
одновременно всех ботов на камеру смотреть, всё решил в
итоге параметр "This", кто знает, тот поймёт.

2. Теперь монстры имеют радиус обзора, реализованный через триггер,
который отслеживает слой игрока, и если коллайдер игрока залез
в триггер, монстр начинает за ним бежать. У монстра есть отсчёт
времени бега, а также контроль зоны видимости. Пока игрок
в зоне видимости, монстр за ним будет бежать, как только мы
из зоны выйдем, монстр будет бежать по таймеру, который закончится.
Убежать вполне реально.

3. Есть ещё один триггер, это уже на подход монстра вплотную проверка идёт,
чтобы перекинуть нас на сцену боя.

На сцене боя пока можно только по выделять монстров.

----

На самом деле на словах не так много реализовано, но игра уже состоит
из 14 скриптовых файлов, кучи объектов, переменных.
А эти млять триггеры, да слои мне таких проблем насоздавали,
что абсолютно во всём предыдущем коде есть изменения.

В общем ловите билду ТЫК , и тестите. Жду репорты о багах.


> Теперь монстры имеют радиус обзора, реализованный через триггер,
который отслеживает слой игрока

Тебе так сильно нужны эти триггеры в 2д-игре?
Радиус — корень суммы квадратов разности по X и Y, не?

Crystal 10.03.2020 15:12

Ответ: I.D.S. MONSTERS
 
Цитата:

Радиус — корень суммы квадратов разности по X и Y, не?
Воу воу полегче вассерман.
Давай по подробнее для двоечников, ок? )

Цитата:

Тебе так сильно нужны эти триггеры в 2д-игре?
Они мне нужны были, чтобы избежать проверок на дистанцию.
Я счёл, что триггеры будут идеальным вариантом. Тем более,
что на юнити почти все так и делают.

ABTOMAT 10.03.2020 15:41

Ответ: I.D.S. MONSTERS
 
Цитата:

Сообщение от Crystal (Сообщение 317094)
Они мне нужны были, чтобы избежать проверок на дистанцию.
Я счёл, что триггеры будут идеальным вариантом. Тем более,
что на юнити почти все так и делают.

А чем плохи проверки на дистанцию (кроме того, что их надо писать) ?
"Все так делают" — нифакт, профессиональные разрабы не ссутся как в старые-добрые писать свой функционал там, где это целесообразно.
Блоггеры на Ютубе в видосах "Своя игра на Юнити за 5 миллисек" юзают триггеры (и им подобные решения) потому что это понятнее для школьной аудитории и не надо знать никакой математики.


Часовой пояс GMT +4, время: 17:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot