[{"body":"","link":"https://staraban.com/sources/","section":"sources","tags":null,"title":"Sources"},{"body":"","link":"https://staraban.com/sources/staraban/","section":"sources","tags":null,"title":"Staraban"},{"body":"\rScreenshot capturing tool\n","link":"https://staraban.com/tools-development/","section":"staraban","tags":[],"title":"Tools Development"},{"body":"","link":"https://staraban.com/staraban/","section":"staraban","tags":null,"title":"Основной блог"},{"body":"","link":"https://staraban.com/","section":"","tags":null,"title":"СЕРГЕЙ ТАРАБАН Блог разработчика игр"},{"body":"","link":"https://staraban.com/categories/","section":"categories","tags":null,"title":"Categories"},{"body":"","link":"https://staraban.com/sources/life/","section":"sources","tags":null,"title":"Life"},{"body":"\rВ мире растет общее число вложений в компании, которые борются со старением. Эта тенденция особенно выросла в последние несколько лет. Это связано с тем, что проблема старения стала более понятна, ее решение уже замаячило на горизонте, и она перестает быть чем то из области научной фантастики. Джеф Безос и Юрий Мильнер Например, недавно один из самых богатых людей мира Джефф Безос инвестировал в биотехнологическую компанию Altos Labs, разрабатывающую способ замедления старения.\nГлавная задача нового компании — изучение процессов старения, разработка технологии для перепрограммирования клеток человека, чтобы бороться со старением.\nВ числе инвесторов компания Altos Labs назвала также российского миллиардера Юрия Мильнера.\nНа данный момент стартап ищет ученых, обещая им доход в размере одного миллиона долларов в год. Институты должны открыться в Сан-Диего, Сан-Франциско, Японии и Великобритании.\nВ состав сотрудников новой научной компании вошел известный своими исследованиями скрещивания эмбрионов обезьяны и человека биолог Хуан Карлос Изписуа Бельмонте.\nМайкл Грев Майкл Грев заявил о создании инициативы в €300 миллионов на инвестиции в омолаживающие биотехнологии. Майкл Грев, является сторонником стратегии инженерии пренебрежимого старения (SENS), которые впервые были предложены ещё двадцать лет назад Обри де Греем и соавторами. Пять лет назад Майкл Грев вложил $10 миллионов на исследования, сфокусированные на SENS, и инвестиции в начинающие компании, возникшие в результате этих исследований.\nЕго венчурная фирма, Kizoo Technology Ventures, инвестировала в компании, разрабатывающие потенциальные приёмы омоложения, такие как энзимы, разрушающие межбелковые сшивки от Revel Pharmaceuticals, и сенолитическая генная терапия от Oisin Biotechnologies.\nВенчурные фонды\nФонды массово вкладывают деньги в стартапы, занимающиеся проблемами старения. Подробнее\n","link":"https://staraban.com/life/bogatye-ljudi-hotjat-zhit-vechno/","section":"life","tags":[],"title":"Богатые люди хотят жить вечно"},{"body":"","link":"https://staraban.com/life/","section":"life","tags":null,"title":"Жизнь"},{"body":"","link":"https://staraban.com/categories/%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8/","section":"categories","tags":null,"title":"Новости"},{"body":"\rКомпании, которые возможно сделают долголетие и бессмертие реальностью. Далее список топ 5 компаний, в которые я инвестирую на долгий срок. Публичные компании (которые можно купить на бирже)\rНе является финансовой рекомендацией!\nСтоит отметить что покупать эти компании стоит на долгосрочный период, т.е. на годы. Все они пока не приносят дохода и являются высоко рискованными вложениями. Пройдет несколько лет прежде чем тот или иной препарат пройдет клинические испытания и покажет свою эффективность. Но этого может не случиться как например с препаратом UBX0101 от Unity. В случае если препарт не окажется эффективным, акции могу упасть более чем на 50-70%. Я предпочитаю вкладывать в эти компании не больше 5% от вложений и не обращать внимание на кратковременные всплески и падения, т.к. акции очень волатильны. Я верю что однажды они значительно вырастут. Unity Biotechnology (UBX)\nУвеличения продолжительности жизни человека. Основная цель компании - замедлить или обратить вспять возрастные заболевания и улучшить здоровье. Ведущими кандидатами на продукты в портфеле компании являются UBX1325 и UBX1967, оба из которых проходят испытания в качестве возможных методов лечения возрастных заболеваний глаз, таких как макулодистрофия, диабетический макулярный отек и пролиферативная диабетическая ретинопатия.\nFrequency Therapeutics (FREQ) Биотехнологическая компания, разрабатывающая методы лечения потери слуха. Его главный кандидат на продукт - FX-322, он оттачивает нейросенсорную тугоухость. В настоящее время проводится ряд испытаний на этапах 1-2 для лечения различных степеней потери слуха, а первые результаты ожидаются во втором полугодии 2021 года.\nFrequency Therapeutics также продвигает доклинические исследования, направленные на восстановление неврологических повреждений у пациентов с рассеянным склерозом.\nLineage Cell Therapeutics (LCTX)\nРаботает в области регенеративной медицины, технологии эмбриональных стволовых клеток человека и технологии индуцированных плюрипотентных стволовых клеток. Он разрабатывает методы лечения, основанные на биологии стволовых клеток и предназначенные для восстановления функций клеток и тканей, утраченных из-за дегенеративных заболеваний и травм.\nCohBar (CWBR)\nCohBar использует другой подход к возрастным заболеваниям, исследуя и разрабатывая терапию на основе митохондрий, новый класс лекарств. Было показано, что новая группа пептидов, закодированных в митохондриальном геноме, регулирует метаболизм и гибель клеток.\nЭти методы лечения потенциально могут быть нацелены на заболевания, связанные со старением и метаболической дисфункцией, такие как неалкогольный стеатогепатит, ожирение, диабет 2 типа, рак, сердечно-сосудистые заболевания и состояния центральной нервной системы. Компания ожидает опубликовать данные в третьем квартале 2021 года для своего клинического исследования фазы 1a / 1b CB4211 для потенциального лечения неалкогольного стеатогепатита и ожирения.\nAgeX Therapeutics (AGE)\nбиотехнологическая компания, разрабатывающая медицинские препараты, связанные с долголетием человека. Его запатентованная платформа долголетия с индуцированной регенерацией тканей и технология PureStem предназначены для помощи в разработке лекарств, которые решают проблемы со здоровьем, связанные со старением, за счет использования регенеративной способности клеток.\nВ начале 2021 года AgeX объявила о сотрудничестве в области исследований с Государственным университетом Огайо. Кандидат на терапию клетками коричневой адипоцитарной ткани компании, названный AgeX-BAT1, будет использоваться на мышах, чтобы определить, может ли трансплантация клеток AgeX-BAT1 улучшить вызванное диетой ожирение и метаболическое здоровье, включая метаболизм глюкозы и сердечную функцию.\nНепубличные компании\rКомпаний очень много. Полный список можно посмотреть здесь. ","link":"https://staraban.com/life/investirovat-v-budushhee/","section":"life","tags":[],"title":"Инвестировать в будущее"},{"body":"","link":"https://staraban.com/categories/%D0%BC%D0%BE%D0%B9-%D0%BE%D0%BF%D1%8B%D1%82/","section":"categories","tags":null,"title":"Мой Опыт"},{"body":"\rИнформация на английском языке https://www.lifespan.io/\nhttps://www.aginganalytics.com/\nhttps://agingbiotech.info/\nhttps://www.nmn.com/\nhttps://www.youtube.com/channel/UCM5hf97Y7N8cEI6bc74Mp2g\nИнформация на русском языке\rhttps://habr.com/ru/users/arielf/posts/\nhttps://habr.com/ru/users/Batin/posts/\n","link":"https://staraban.com/life/ssylki/","section":"life","tags":[],"title":"Ссылки"},{"body":"\rЯ страдаю проблемами с ЖКТ уже 5 лет. У меня хронический ГЭРБ, гастрит с повышенной кислотностью и много других проблем. За время, которое я боролся с недугом мне удалось похудеть на 15 кг за пару месяцев и оздоровить свое тело. Я многое понял и хочу поделиться с вами знаниями, которые помогут вам облегчить и в конце концов победить недуг.\nМне пришлось пройти много обследований и пропить множество различных препаратов. Увы, полностью избавиться от проблем не удалось и периодически обострения дают о себе знать. За время, которое я боролся с недугом я много понял про себя и свое тело и научился справляться с этим хроническим заболеванием. Пусть недуг и не ушел полностью, но я научился жить с ним так что он почти меня не беспокоит и позволяет мне жить полноценно. Возможно, однажды мне удастся его вылечить. В этой статье я расскажу вам как и что нужно делать на своем опыте. Это не рекомендация врача, а моё лично мнение. Решение, следовать ли этим рекомендациям или нет вы принимаете на свой страх и риск. Я не несу ответственности за эти рекомендации.\nВот список того о чем мы будем говорить. В этой списке много пунктов, и все они важны на пути лечения.\nЧастое питание малыми порциями (дробное питание)Уменьшить количество жира в едеПравильный прием углеводовОтказаться от ряда продуктовВести дневник питанияЗаниматься физической активностью / спортомПойти к психологуНаучиться отдыхать. Поменять отношение к работе, и к жизни в целом. Жить для себя, а не ради кого-то.Принимать витаминыЗаботится о своем здоровье\rДробное питание\rМой доктор часто говорил мне. Ешь что хочешь - но главное не передай! Это очень важный момент. Вам не поможет никакое лечение если вы не научитесь контролировать сколько вы едите. С возрастом наш организм перестает справляться с перееданиями. Из-за этого страдает все в нашем теле. Мы так устроены, что организм будет пытаться переработать все что в него вбросите, т.к. в древности это было вопросом выживания. Но тогда и люди обычно не жили дольше 30-ти лет. Вы знаете что для человека ростом 1.70 для наполнения желудка достаточно 0.5 литров пищи/воды. Что примерно соответствует одному ресторанному блюду с одним напитком (стакану какао или чая). Таким образом чисто физиологически вам не нужно первое, второе и десерт. После этого желудок будет растягиваться. Это природный механизм, который позволяет съесть больше чем нужно человеку в данный момент. Обычно он растянется до 0.8 - 1 литра. Этого достаточно для желудочного сока который выделиться после.\nПроблема в том что у людей, которые привыкли есть много, желудок становится больше. И из-за этого чувство насыщения наступает только если желудок наполнен до краев. Более того чем больше у вас желудок и чем больше вы едите, тем сложнее получить чувство насыщения. У людей, больных ожирением, полноценное насыщение невозможно в принципе, они все время хотят есть. Поэтому часто лечение проводят хирургически, пересаживают определенные клетки, которые говорят, что мы наелись, и удаляют клетки, стимулирующие чувство голода. Вообще чувство насыщения и голода и как они формируются это отдельная большая тема. Вы можете почитать об этом в интернете. Возможно я напишу отдельную статью об этом. Но пока важно запомнить что в нормальном состоянии голод и чувство насыщения уравновешивают друг друга при наполнении желудка. А наполнить его можно достаточно быстро. Достаточно съесть всего 300 гр еды и 200 мл напитка, например. Понятно что у разных людей это значение будет отличаться. Но если у вас проблемы с ЖКТ то если вы съедите да же на 100 гр больше то вы сразу это почувствуете. Мы пока не говорим что нельзя запивать еду водой, это отдельный вопрос.\nМысленно поместите еду, которую вы собираетесь съесть, в ладони. Если она не вываливается и помещается в них, то это примерный объем того сколько вам надо съесть чтобы не переесть. Поэтому первое на пути борьбы с гастритами и прочими проблемами ЖКТ это не перегружать желудок и есть строго столько сколько нужно. Примерно это 300 гр пищи. А при обострении едят еще меньше. Еще один способ понять размер порции, это сложить руки вместе как будто вы набираете в руки воду. Выше я выложил рисунок с подписью.\nЧтобы не пропускать прием пищи можете поставить себе трекер питания на телефон. Я использую приложение \"Напоминание о питании\". Их много. Оно будет предупреждать вас что пора поесть или выпить воды. Удобно. Уменьшить количество жира в еде Тут все просто. Исключаете или уменьшаете жирные сорта мяса и рыбы в еде. Кофе пьете с нежирным молоком, а не сливками. Снижаете количество сливочного масла. Творог нежирный и т.д. Супы и борщи без бульона.\nСуть в том что мы и так употребляем много жира, т.к. мы не едим полностью обезжиренный продукты. К тому же вы все равно не будете питаться 100% домашней едой. Оптимально для меня например питаться 50% домашней и 50% ресторанной едой. В ресторане все будет жирное. Я за редким исключением не встречал ресторана где бы подавали полностью диетические продукты.\nЖир увеличивает нагрузку на ЖКТ. И если вы не занимаетесь тяжелой физической нагрузкой, то избыток жиров вам не нужен.\nОтдельно хочу добавить, то полезно есть жирную рабу и вообще морепродукты из-за рыбьего жира. Таблетки можете не пить, они бесполезны. Т.к. полезные жиры очень быстро разрушаются и в таблетках жир уже давно потерял все свои полезные свойства. По этой причине в ресторанах я люблю заказывать рыбные блюда, а дома ем нежирное мясо или нежирную рыбу или креветки.\nКреветки кстати это хорошая альтернатива жирной рыбе поскольку они имею все полезные свойства жирной рыбы, но не такие жирные и легче переносятся при проблемах с ЖКТ\nПравильный прием углеводов Вы думаю знаете что нужно употреблять больше медленных углеводов (с высоким гликемическим индексом), и меньше быстрых (с низким гликемическим индексом). Это значит есть больше фруктов, орехов, и меньше белого хлеба, изделий и теста и т.д. Я например отказался от употребления чистого сахара, и пью чай с несладким печеньем или бананом. Еще очень важно время приема углеводов и их количество. Если вы будете употреблять много углеводов это будет увеличивать сахар в крови. Уровень сахара в крови также зависит от ваших бактерий в кишечнике, поэтому у разных людей уровень будет разный и отличаться он может в разы. Лучше всего употреблять углеводы утром, а хуже - вечером. Т.е. на ночь сладкое есть ни в коем случае нельзя. Более рекомендуется есть много утром, и постепенно снижать размер порций к вечеру. Это тоже способствует снижению общего уровня сахара в крови и не приведет к переизбытку сахара ночью. Также имеет значение, что вы будете делать после приема углеводов. Лежать, стоять, гулять или заниматься спортом. И время в которое вы употребили углеводы. Чем опастно частое превышение уровня сахара - это развитием диабета 2-го типа (толерантность к инсулину). Для того чтобы проверить есть ли у вас признаки диабета нужно здать анализы на гликированный гемоглобин и индекс НОМА. Они покажут среднее значение сахара в крови. Если оно выше нормы (индекс НОМА \u003e 3 и глик. гемоглобин \u003e 7%) то нужно срочно принимать меры. Для контроля сахара есть приборы, которые можно установить на кожу и мерить. Отказаться от ряда продуктов Если вам дорого ваше здоровье и вы хотите жить долго, некоторые продукты нужно вообще прекратить употреблять. В Европе принята классификация проектов по индексу полезности (Nutri-Score) от A (самый полезные) до E (вредный). Производителей обязывают указывать эту информацию на упаковках. A - Высокое содержание фруктов и овощей, клетчатки, белка и полезных масел (рапсовое, ореховое и оливковое масла)\nE - высокое содержание быстрых углеводов, сахара, насыщенных жирных кислот и натрия\nНапример, вы можете ограничить потребление пиццы до 1 раза в месяц, бургеров и картошки до 2-х раз в месяц и т.д. Отказаться от сладких напитков. Этот список можно продолжать очень долго. Важно работать в этом направлении. Вы не сделаете это за неделю, уйдет пол года - год пока вы перейдёте на другое более здоровые продукты. Но важно делать это шаг за шагом. Вести дневник питания Полезно, особенно если у вас фаза обострения гастрита или проблем ЖКТ. Пишете что вы съели и как себя чувствовали. Была ли изжога, или тяжесть. У каждого организм реагирует индивидуально на те или иные продукты. То что одним хорошо, вам будет плохо. Еще полезно при походе в любимый ресторан. Может посмотреть какие блюда вам пошли хорошо, а от каких вам было плохо. Еще не забывайте что в стадии обострения очень важно питаться дробно. Вы не вылечите гастрит если будете переедать. А в ресторане это проще простого, там порции большие и жирные. Заниматься физической активностью Найдите любимый для себя вид спорта и занимайтесь им. Еще полезно ходить на реабилитацию где вы будете заниматься лечебной физкультурой и общей физ подготовкой. Я обычно хочу на тенис 1-2 раза в неделю и 2 раза в зал занимаюсь с тренером ОФП. Особенно если у вас сидячая работа.\nДля сидячей работы кстати очень важно выбрать хороший стул и часто вставать делать разминку или просто ходить. Больше гуляйте, катайтесь на велосипеде. у вас может быть личный автомобиль, но стремитесь не проводить в нем весь день. Это та же сидячая работа. Стремитесь больше ходить, не менее 8000 шагов в день. Можете купить фитнес трекер или умные часы. Они будут вас стимулировать к этому и вознаграждать. Пойти к психологу 80% наших болезней от нервов. Нужно избавиться от багажа неврозов и поменять отношение к проблемам. В этом поможет хороший психолог. В частности проблемы ЖКТ также все от нервов. Да же если вы явно не нервничаете, вы можете это делать неосознанно. Признаки нервных причин заболеваний ЖКТ:\nобострение совпадает с временами года (часто обостряется осень или зимой)в отпуске состояние ЖКТ улучшается, можете есть продукты которые раньше вызвали тяжесть и изжогупримем магния, успокоительных, седативных препаратов улучшает работу ЖКТобострение происходит через пару дней после сильного стресса или переработок на работеваш желудок хуже себя чувствуете после рабочего дня. и лучше на выходных или в начале рабочего дня. Если у вас есть хотя бы один из этих признаков, то это повод задуматься о том правильно вы живете и нужно ли вам переживать тот стресс, что вы переживаете. Это повод разобраться в себе, пойти наконец к психологу, взять отпуск, больше отдыхать. Научиться отдыхать. Поменять отношение к работе, и к жизни в целом. Жить для себя, а не ради кого-то.\rЭто такой собирательный раздел. Многие проблемы у людей из-за того что они не живут своей жизнью, а живет чужой. Люди живут ради родителей, или ради детей, или ради своих партнеров или ради еще чего-то потому что \"так надо\" или \"так принято\". Отказывают себе в чем-то или во всем. В итоге мы не живем своей жизнью и это делает нас нещастными. Человек должен хотеть и желать жить так как он хочет, а не жить навязанной кем то жизнью. Это важно понять.\nКниги где поднимается эта проблема:\nЛичные границы - Дженни МиллерКак говорить нет - Питер БрайтманНе мешай себе жить - Марк ГоулстонВсе книги Роберта Лихи (Лекарство от нервов, Свобода от тревоги, Победить депрессию)Как быть стоиком: Античная философия и современная жизнь - Массимо Пильюччи\rПримать витамины Я в целом положительно смотрю на витамины и БАДы. Есть например вполне обоснованные исследования о пользе некоторых добавок и витаминов. Например, мне очень помог прием йодомарина и магния. А примем поливитаминов Solgar для мужчин помог поправить проблемы с кожей (холодовый дерматит). Я считаю что все необходимые витамины мы можем получить из еды, но для подстраховки не помешает помочь организму дополнительно. Следует быть осторожными с некоторыми добавками и БАДами, т.е. они могут влиять на печень и ЖКТ. Например, коллаген и зеленый чай в таблетках. Например, некоторые вещества успешно применяются наружно (например средства для кожи), а при приеме внутрь оказывают токсическое действие. Поэтому нужно тщательно изучить что вы собираетесь принимать и лучше проконсультироваться с врачом. Заботьтесь о своем здоровье\rМногие проблемы можно предотвратить просто регулярно обследоваться. Если вам уже не 20-ть лет то к вам термин \"само заживет\" уже не применим. Само если и заживет то заживет плохо, перейдёт в хронику и рано или поздно убьет вас или станет неизлечимой тяжелой болезнью. Наше тело это не супер организм. Оно имеет предел отказоустойчивости, оно не лечит болезнь, а адаптируется к ней. Вообще эволюционно мы не должны жить дольше 30-ти лет. При отсутствии лечения организм накапливает последствия невылеченных проблем которые его в итоге убивают. Мой совет - ходите к врачам, ищите хороших врачей, вникайте в тему какие есть болезни, какие есть препараты, какие хорошие, какие плохие. Не нужно пускать дело на самотек. Не будете заниматься спортом, у вас будет грыжа позвоночных дисков, проблемы с суставами и геморрой. Не будете правильно питаться - будет холецистит, панкреатит и язва, а потом инфаркты и инсульты. Не будете лечить простату - будет импотенция и бесплодие. Не будете отдыхать и работать на износ - выгорите, потеряете удовольствие от жизни, получите депрессию. Думайте как жить лучше, получать больше, работать меньше. Учитесь все время. ","link":"https://staraban.com/life/zhizn-s-hronicheskimi-problemami-zhk/","section":"life","tags":[],"title":"Как жить с хроническими проблемами ЖКТ, похудеть и оздоровиться"},{"body":"\rКомпании и университеты по всему миру ищут пути для омоложению и борьбы со старением. В этом посте будет собрана информация про все исследования в этой области\nНикотиномид мононуклеотид (NMN)\rСейчас за открытиями в области NAD+ следит весь мир, поскольку последние данные показывают, что этот элемент напрямую связан со старением живых организмов. NAD + представляет собой соединение, которое содержится в каждой клетке организма и принимает участие во всех важных процессах. Так, никотинамидадениндинуклеотид участвует в энергетическом обмене, восстановлении ДНК и экспрессии генов. Однако, стоит учитывать, что уровень данного вещества в крови снижается с возрастом, что способствует развитию заболеваний и симптомов, связанных со старением. Так, одним из проявлений дефицита NAD + является болезнь Альцгеймера.\nНа графике показано, что с возрастом концентрация NAD снижается. Например к 20 годам она снижается примерно в 2 раза, а к 40 уже в 4 раза. Функции митохондний (выработка энергии для клетки) также снижаются пропорционально. Chromadex - компания продает свой продукт TRU NIOGEN. Проводит множество исследований на разных стадиях. полный список тут . Статус: Фаза 2\nSinclair lab - проводит комплексное исследование на мышах. Статус: Фаза 1 (исследование тут)\nСенолитики\rСобирательно название для препаратов, которые вызывают клеточную смерть старых клеток. Стимулируют организм избавляться от старых клеток, заменяя их на молодые и здоровые. UBX1325 - Компания Unity Biotech. Разрабатывает 2 препарата. Один увы не прошел Фазу 2 и был отменен. Надежда остается на второй препарат UBX1325, которые проходит фазу 2.\nКвасетин и Дисатениб - два препарата успешно прошедшие 1-ю фазу клинических исследований\nФисетин - на данный момент тестируется как сенолитический препарат.\nОстальные препараты пока на ранних стадиях исследования.\nРапамицин\rИммунодепрессант, применяемый для того, чтобы избежать отторжений органов при трансплантации. Выяснилось что он также влияет на продолжительность жизни. Рапамицин блокирует белок TOR, который координирует клеточный ответ на поступление питательный везеств и заставляет клетку расти и запасать ресурсы. Считается, что именно работа TOR приводит к тому, что клетки изнашиваются и стареют, то есть перестают делиться и выполнять свои функции в ткани.\nИсследования:\nPERAL - https://www.lifespan.io/campaigns/pearl-participatory-evaluation-of-aging-with-rapamycin-for-longevity/#description\nТеломераза\rФермент теломераза восстанавливает теломерные участки ДНК, что позволяет клетке жить дольше. За открытие этого фермента трое американских учёных поучили Нобелевскую премию в 2009 по медицине и физиологии.\nПроще говоря, если теломеразы много - клетка живет почти вечно. И в раковых клетках например очень много теломеразы. Таким образом если научиться уменьшать теломеразу в раковых клетках, их можно убить, а если научиться повышать ее в здоровых клетках - то продлить жизнь. Кроме раковых клеток теломеразы также много в стволовых клетках, которые живут значительно дольше остальных клеток организма. Imetelstat - экспериментальный противоопухолевый препарат. Первый ингибитор теломеразы, начавший клинические испытания, в настоящее время проходит 2/3 фазы испытаний для лечения различных типов рака.\nAAV-hTERT - препарат от Libella Gene Therapeutics в фазе 1. Использование генной терапии для экспрессии активной теломеразы (hTERT) в клетках человека для лечения многих нейродегенеративных заболеваний, связанных со старением, включая болезнь Альцгеймера.\nДругие препараты на более ранних этапах разрабатывает компаниями AgeX Therapeutics и рядом научно исследовательских институтов.\nТеломеразу можно вводить только путем генной терапии. Берется вирус-носитель (вектор), в который внедряется определенный ген, производящий теломеразу в клетке. Эксперименты на мышах позволяли продлить жизнь на 24% у молодых мышей и на 13% у старых. В 2015 Элизабет Пэрриш поставила эксперимент на себе, вколов себе вектор с геном теломеразы. Исследования через 2 года показали, что теломеры в ее клетках удлинились на 9%. Но погрешность измерения длинны теломеров также составляет 8-10%. Хотя удлинение теломерных участков и был подтвержден в 2 лабораториях, все равно эксперимент вызывает некоторый скепсис.\nПодробнее про теломеры и теломеразу можно почитать тут.\nВосстановление митохондрий\rGenSight Biologics и препарат GS010 для лечения слепоты. Методы, использованные при разработке этого препарата, позволит использовать их для общего лечения и восстановления повреждения митохондрий.\nВосстановление / борьба с истощением стволовых клеток\rМасса препаратов находится на финальных стадиях исследования. Дорожная карта на английском\rПо этой ссылке находится карта прогресса в этой области на английском языке\nhttps://www.lifespan.io/road-maps/the-rejuvenation-roadmap/\n","link":"https://staraban.com/life/dorozhnaja-karta-omolozhenija/","section":"life","tags":[],"title":"Дорожная карта омоложения"},{"body":"","link":"https://staraban.com/categories/%D0%BD%D0%B0%D1%83%D0%BA%D0%B0-%D0%B8-%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B8/","section":"categories","tags":null,"title":"Наука И Технологии"},{"body":"","link":"https://staraban.com/categories/etf-%D1%84%D0%BE%D0%BD%D0%B4%D1%8B/","section":"categories","tags":null,"title":"ETF Фонды"},{"body":"","link":"https://staraban.com/sources/invest/","section":"sources","tags":null,"title":"Invest"},{"body":"","link":"https://staraban.com/invest/","section":"invest","tags":null,"title":"Инвестиции"},{"body":"\rЛетом 2020-го я опубликовал идею в которой утверждал что график NASDAQ похож на параболический и примерно прикинул что цель для такого движения находится в районе 14000-15000. В этом месяце эта цель была достигнута. Посмотрите как точно мы пришли к ней.\nЕсть мнение что в 1999-2000 году пузырь возник из-за того, что большинство акций интернет компаний не генерировали выручку. Но на сегодняшний день они генерируют выручку, а значит пузыря не может возникнуть. Однако по мультипликаторам мы всеравно видим пузырь, а параболический характер движение цен также очевидно говорит об развитии пузыря. https://www.tradingview.com/chart/IXIC/H30EKsBm-New-Bubble-in-development/\nЛюбое параболическое движение предполагает коррекцию минимум на 50%. Пузырь доткомов привел к коррекции до 78%. Так же как и коррекция по биткоину. Разумеется это не значит что нужно продавать, но вероятно стоит подумать о фиксации прибыли и накоплении кеша.\n","link":"https://staraban.com/invest/%d0%bf%d1%83%d0%b7%d1%8b%d1%80%d1%8c-nasdaq-%d0%b2%d1%85%d0%be%d0%b4%d0%b8%d1%82-%d0%b2-%d0%ba%d0%be%d0%bd%d0%b5%d1%87%d0%bd%d1%83%d1%8e-%d1%84%d0%b0%d0%b7%d1%83/","section":"invest","tags":[],"title":"Пузырь NASDAQ входит в конечную фазу"},{"body":"","link":"https://staraban.com/categories/%D0%B0%D0%BA%D1%86%D0%B8%D0%B8/","section":"categories","tags":null,"title":"Акции"},{"body":"","link":"https://staraban.com/categories/%D0%B8%D0%B4%D0%B5%D0%B8/","section":"categories","tags":null,"title":"Идеи"},{"body":"\rАкции скорректировались и показали хорошие точки входа. Взял с хорошим R/R ratio.\nСейчас я стараюсь мало покупать и постепенно фиксирую прибыльные сделки, чтобы нарастить кеш. Ситуация на рынках пугает меня. Но тут появлись несолько хороших точек входа, упускать которые я не стал\nGM - General Motors\nВ канале три импульсных движения, что указывает на что то это не может быть клином 5-й волны. Прогнозы аналитиков на buy с целями 73-90. Снизу сильный уровень + ma100 + граница канала. Первая цель 73 поскольку это 1.6 от движения, дальше посмотрим. Фундаментально компания сильно перекуплена, как и все сейчас. В мае аналитики давали ей найтральную оценку. С другой стороны Tipranks Rate: 10/10\nhttps://www.tradingview.com/chart/GM/3og6UqHQ-GM-Long/\nPETQ - PetIQ Inc\nДокупил еще 3 акции на коррекции с текущим трем\nСнизу у нас трендовая линия и граница двух каналов + 100ma и 200ma. Оценка аналитиков: нейтрально-положительная. Tipranks Rate: 3/10, хотя имеет позитивный сентимент. https://www.tradingview.com/chart/PETQ/jxrSzTRn-PETQ-Long/\nAXTI Снизу 2 уровня поддержки + 200 ma. Возможное окончание ABC коррекции с отбоем он пробитого канала. Коррекция явно закончилась на 50% движения (фибо уровень 0.5)\nhttps://www.tradingview.com/chart/AXTI/S1NPv7SO-AXTI-Long/\nLRCX - Lam Research Corp\nПрогноз на импульсное либо коррекционной движение вверх. Цена отбилась от поддержки в виде уровня + 100ma + трендовой линии + границы канала. Явный паттерн импулса + ABC коррекция.\nhttps://www.tradingview.com/chart/LRCX/ddGyWQNh-LRCX/\nОбсудить\nhttps://t.me/taraban_invest_ru/8\n","link":"https://staraban.com/invest/%d0%ba%d1%83%d0%bf%d0%b8%d0%bb-gm-petq-axti-lrcx/","section":"invest","tags":[],"title":"Купил акции GM, PETQ, AXTI, LRCX на хороших уровнях"},{"body":"","link":"https://staraban.com/categories/%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B2%D0%B0%D0%BB%D1%8E%D1%82%D1%8B/","section":"categories","tags":null,"title":"Криптовалюты"},{"body":"\rРазметка на 10.07.2021 BTCUSD.\nВ работе два сценария.\n1. Коррекция WXY завершена. Заходной импульс в виде влина (волна 1) + ABC коррекция (волна 2)\n2. Коррекция WXY не завершена, волна Х развивается и предстоит поход вниз. Возможно на 20000. Это более вероятный сценария на мой взгляд, но пока пробую отыграть первый сценария и открыл позицию в районе 33000\nГрафик также напоминает Накопление Вайкоффа. Сравните график с схемой ниже. Очень похоже\nФундаментально все ждут биткоин по 100 000. Были также новости что биткоин активно выкупают от 33 000. На данный момент у нас типичная фаза накопления, из которго может быть прорыв как вверх как и вниз. Посмотрим.\nОбсудить\nhttps://t.me/taraban_invest_ru/6\nИдея: https://www.tradingview.com/chart/BTCUSD/mS65Q9Rp-BTC-Long-setup/\nНе является инвестиционной рекомендацией.\n","link":"https://staraban.com/invest/bitcoin-long-btcusd/","section":"invest","tags":[],"title":"Покупаю Биткоин. Волнновой анализ, прогнозы"},{"body":"","link":"https://staraban.com/categories/gamedev-@en/","section":"categories","tags":null,"title":"Gamedev @En"},{"body":"","link":"https://staraban.com/categories/games/","section":"categories","tags":null,"title":"Games"},{"body":"Hi to all. I\u0026rsquo;ve just released my new puzzle game for iOS (iPad and iPhone). This is a game about a boy who falls in love and you need to help him solving maze to reach his love.\nDownload from Apple Store\nIt takes 6 months to make this game. I was the only one developer. The other my friends do the art, design and promotion. We also started the small gamedev company called WellDoneGames. Here is our website. Not completely ready but look good already.\nMy WellDoneGames startup!\nGameplay Video\nIt was challenging but I am happy about the result.\rI am going to write an article about making this game afterward. If will cowers maze generation and Apple AR integration.\rSubscribe to my twitter to get further updates and news. https://twitter.com/sergeytaraban\n","link":"https://staraban.com/released-my-new-game-a-maze-in-love-ios/","section":"staraban","tags":[],"title":"I've released my new game A Maze In Love"},{"body":"This tutorial is about writing automatic screen shot capturing tool for Unity. You know this is always pain to make game screenshots for multiple devices and platforms when you have plenty of resolutions. So this tool makes life match easier.\n:ad:\rThere are a couple of ways how to implement screenshot capturing. First you can use R2T, attach it and take a screenshot directly from game camera, but this approach have a lot of drawbacks and are complicated for implementation. If you want to try it you can look into this unity store plug-in called Instant Screenshot.\nIn this tutorial I will show you I think better and easiest way to take screenshots. We will just manually resize GameView window and then use CaptureScreenshot function of Application class.\nIn the next tutorial I will show how to implement multiple screenshot taking and hi resolution screenshots support.\nScreenshotTaker script from the video\rusing UnityEngine;\rusing System.Collections;\rusing UnityEditor;\rpublic class ScreenshotTaker { [MenuItem(\u0026ldquo;Tools/TakeScreenshots\u0026rdquo;)] public static void MenuItem_TakeScreenshots() { //get game view System.Type gameViewType = System.Type.GetType(\u0026ldquo;UnityEditor.GameView, UnityEditor\u0026rdquo;); var gameView = EditorWindow.GetWindow(gameViewType); if (gameView == null) EditorApplication.ExecuteMenuItem(\u0026ldquo;Waindow/Game\u0026rdquo;);\ngameView = EditorWindow.GetWindow(gameViewType); if (gameView == null) { Debug.LogError(\u0026ldquo;Game View not find!\u0026rdquo;); return; }\n//resize game view int width = 1024; int height = 768; int gameViewBarHeight = 17;\nvar rect = gameView.position; rect.x = 0; rect.y = 0; rect.width = width; rect.height = height + gameViewBarHeight; gameView.position = rect;\n//take screenshot string fileName = \u0026ldquo;screenshot_\u0026rdquo; + System.DateTime.Now.ToString(\u0026ldquo;yyyy-MM-dd-hh-mm-ss\u0026rdquo;) + \u0026ldquo;.png\u0026rdquo;; string folderPath = Application.persistentDataPath; fileName = System.IO.Path.Combine(folderPath, fileName); Application.CaptureScreenshot(fileName); Application.OpenURL(folderPath); } }\n","link":"https://staraban.com/screenshot-capturing-tool-for-unity-video-tutorial-part-1/","section":"staraban","tags":[],"title":"Screenshot capturing tool for Unity. Video tutorial. Part 1"},{"body":"Полное прохождение Deus Ex: Mankind Divided без коментариев и озвучивания, на стелсе. Новые видео выкладываются по мере прохождения.\nПредыстория игры - краткий сюжет Deus Ex: Human Revolution\rМиссия 1. Город Дубай\rПрага. Начало. Гуляем вокруг, осматриваемся\r:ad:\rDeus Ex: Mankind Divided: Нати Колера в книжном магазине\rФабрика игрушек. Разбираемся с поддельными документами. Драгомир. Эдвард и Иренка\rНейропластический калибратор\rПольность на стелсе\r","link":"https://staraban.com/deus-ex-mankind-divided-letsplay-full-ru/","section":"staraban","tags":[],"title":"Deus Ex: Mankind Divided Полное видео прохождение"},{"body":"","link":"https://staraban.com/categories/%D0%B8%D0%B3%D1%80%D1%8B/","section":"categories","tags":null,"title":"Игры"},{"body":"Full game passing of Deus Ex: Mankind Divided without commenting and talking. Adding new video during the game playing\nStory of Deus Ex: Human Revolution at the beginning of Mankind Divided\rMission 1. Dubai Praha. Walking around\r:ad:\rDeus Ex: Mankind Divided: Find Koller inside the book store. Call Sarif\rToy factory. Get deal with fake documents. Meeting document agent. Deal with Drahomir. Irenka and Edvard. Authority office\rNeuroplasticity Calibrator\rFull stealth completion\r","link":"https://staraban.com/deus-ex-mankind-divided-videos-full-game-lets-play/","section":"staraban","tags":[],"title":"Deus Ex: Mankind Divided videos full game let's play"},{"body":"Недавно состоялся релиз бесплатной миниигры по популярной вселенной Hook Wars на платформу Android. Игроку нужно уворачиваться от препядствий и собирать монеты.\nТакже игроку нужно находить потерны из монет (всего 30) и собрать полную коллекцию из них. В игре также есть 5 героев котоыре открываются в процессе игры и 4 уникальных карты.\nРазработчики планирую сделать резил игры на платформу iOS в ближайшее время.\nСкачать игру можно по ссылке:\nСКАЧАТЬ\n","link":"https://staraban.com/hook-wars-run-pudge-run-minigame-novaya-igra-android/","section":"staraban","tags":[],"title":"Hook Wars: Run Pudge Run! Новая игра по вселенной Hook Wars вышла на Android"},{"body":"Recently there was a release of new free to play game - Hook Wars: Run Pudge Run! on Android platform.\nIn this game player should survive the hook hunt in the endless runner. During game player collecting coins and coin patterns (30 unique). Also there are 5 heroes in game to unlock and 4 unique maps.\nI\u0026rsquo;ve player this game for several hours and find it funny and challenging.\nDevelopers are going to release new version on iOS soon.\nYou can download this game from google play store by link:\nDOWNLOAD\n","link":"https://staraban.com/hook-wars-run-pudge-run-game-was-released-on-android/","section":"staraban","tags":[],"title":"Hook Wars: Run Pudge Run! game was released on Android"},{"body":"В статье я опишу советы по игре, защите базы и нападению, а также основные наборы атакующих войск\nСоветы по расстановке обороны базы\rКогда строите базу всегда стройте защиту так, чтобы она перекрывала друг друга и перекрывала все ваши постройки. Размещайте самую сильную защиту так чтобы она всегда перекрывала штаб. Старайтесь не делить защиту на \"лево\" и \"право\". Ведь тогда вам надо иметь одинаково сильную защиту в обоих направлениях.\rНе размещайте сильное оружия в одном месте. Так его легко уничтожить ракетами или заблокировать шокером.\nНе размещайте оборону вплотную друг к другу. Она не должна соприкасаться. Иначе одной бомбой, брошенной в место соприкосновения построек, будет задеты обе постройки.\nПример хорошего построения на мой взгляд. Оно не идеально, но все правила, изложенные выше, соблюдены.\nДругая популярная стратегия постройки базы это расстановка обороны с покрытие берега. Но недостатком этого типа является то что у вашей базы есть фланг. И всегда можно обойти вашу базу и зайти с фланга.\nУ вас все равно не хватит защиты чтобы покрыть берег и обеспечить хорошую защиту штаба. Вы можете посмотреть разные варианты расстановки баз в конце этой статьи.\n:ad:\nПро расстановку мин\rМаскируйте мины за большими статуями (там где голова статуи.\rНе ставьте мины рядом друг с другом или вокруг сильной защиты. Враг будет делать обстрел по сильной защите в первую очередь и он подорвет ваши мины.\nМинируйте маршруты которые будут чаще использовать для обхода вашей базы. Но помните что простые мины мало эффективны против танков, поэтому используйте красные мины в особенно чувствительных участках защиты. Также минируйте прямой проход к базе чтобы не дать войнам в дыму пройти к базе.\nСтатуи и кристаллы\rБерегите синие кристаллы. Они самые редкие. Зеленые кристаллы, наоборот, получающеюся очень часто. Но их то же стоит добывать для получения пыльцы. Вы получаете 7 штук пыльца при разбое статуи типа Шедевр.\rОбщая тактика игры\rИграя в бум бичь вам нужно выбрать тактику игры - фермерство или война. Бывает, что на определенно стадии игры можно стать фермером для накопления ресурсов, но это не всегда необходимо\rИгрок - Воин\rБум Бичь это не ферма. В ней надо нападать и воевать. Для война нужно иметь статуи: 2 красных, 2 фиолетовых, 1 синюю и 1 зеленую (обычно на золото)\rВкладываться в оборону то же нужно для сохранения и накопления ресурсов, но только после того как у вас будут хорошо прокачанные Канонерка и Лодки. Обычно прокачка лодок должна быть (для уровня 14-15) минимум 12 уровня и одна 11 уровня для медиков. Так вы сможете взять максимально эффективное число войск.\nОсновная тактика прокачки это чередования легкого фермерства и фарминга. Т.е. вы намеренно оставляете базы «жирных» противников, а атакуете в основном мелкие базы NPC. Одновременно выкладываетесь в оборону. Дальше, когда время приходит, вы грабите все базы игроков на карте и вкладываете добытые ресурсы в прокачку штаба или дорогие постройки.\nНе тратте алмазы впустую. Экономьте их для больших построек или прокачки штаба.\nИгрок - Фермер\rНе очень уважаемая каста игроков. Во-первых, потому что они мало полезны для клана. Во-вторых, потому что они имеют высокий уровень базы при низком количестве медалей, поэтому они часто выпадают игрокам-войнам которые не могут взять их базы.\rВ общем, если вы фермер, в клан вас скорее всего не возьмут.\nФермера можно определить по большему число зеленых и синих статуй, хорошей защите и плохой прокачке войск.\nСлив медалей\rСоперники выбираются только по приблизительно равному числу медалей у вас и у него. Это значит, что, если вы заработаете кучу медалей, вам будут даваться сильные противники, которых часто очень сложно победить.\rОдин из простых выходов — слив медалей. Для этого игроки выставляют свою базу как можно ближе к берегу убрав всякую защиту. Это позволяет атакующему без труда взять вашу базу.\nПеред тем как делать такое обсудите это с руководством клана. За такое могут выгнать из клана.\nПопулярные наборы атакующих войск\r1. Только пехота Наносят огромный урон\rВысокая выживаемость\rНизкая цена и быстрая скорость постройки\rУязвимы к защите (в порядке приоритета):\rшокер\rогнемет\rракета\rпулемет\rмортира\rмины\rТакой набор войск подходит для практически любой базы любого уровня. Исключения составляют добывающие базы с защитой преимущественно оружием кучного действия типа пулеметов, огнеметов, мортир и ракет.\rСмешанная пехота (14) + громилы (12) + базуки (8) + медики (3) (вместо них можно брать базуки 8 или пехоту)\nУязвимы к защите:\nракетница\rмортира (опасны для базук)\rпушка\rшокер\rогнемет\rЭто хорошая комбинация войск эффективная против баз с разным видом вооружения. Пока громилы отвлекают на себя огонь, пехота и базуки, которые стоят дальше от громил, наносят основной урон. Минус такой защиты в том что громилы стоят ближе всего и умирают очень быстро оставляя пехоту и базуки беззащитными.\rХинт: Медики лечат в дыму. Используйте дым чтобы подлечить войска во время боя.\nТанки + Медики (в народе \u0026ldquo;танкомедики\u0026rdquo;) Танки уровня 3 и выше + минимум 3 медика\nвысокая огневая мощь и защита\rпочти не восприимчивы к огнеметам и мортирам\rвысокая устойчивость к пулеметам, шокерам и ракетам\rна достижимы для огнеметов\rМинусы:\rвысокая цена и время постройки\rбесполезны на картах с кучей пушек\rтратят энергию при высадке (около половины)\rУязвимы к защите:\rпушки и пушки-бум, роковая пушка\rснайперы\rЭффективны только против баз с малым количеством пушек и снайперов. Как показывает практика хорошо подходят для большинства баз живых игроков\rПример добывающих баз для атак танками:\nВыносим пушку слева сразу, дальше обходим слева\nВойны или Торы Основная тактика - используя дым провести скрытно к базе противника. Чтобы они атаковали только базу. Дальше, перед тем как дым рассеется, кинуть шокеры на самую сильную оборону. Хороши против баз которые близко расположены к берегу.\nГренадеры Армия из одни лишь гренадеров. Хороша против баз которые не простреливают берег и место высадки.\nЗащита базы также не должна быть слишком разнесена по карте.\nТипы построения баз и как их брать\rПеред тем как брать базу важно сделать три важные вещи:\rОпределить лучший вариант войск для этой базы\rНайти оптимальный путь к штабу\rНайти уязвимые места\rТипы баз:\rЦентральная\rШтаб находится в центре карты или ближе к берегу. Обычно он просто обходится войсками (обычно слева) и атакуется с тыла. Используется дым для маскировки. Обычно постройки в таком построении выносятся за базу. Поэтому уничтожить надо сначала их а потом уже саму базу.\nУгловая\rБаза в левом верхнем или правом верхнем углу. Легче всего брать дальнобойными юнитами вроде танков или гренадеров. Я считаю это одной из самых эффективных построений базы. Особенно левая верхняя.\nРаспределённая\rЗащита и постройки перемешаны. Обычно такое берется очень просто с левого или правого угла базы.\nАвтор: Сергей Тарабан\n","link":"https://staraban.com/boom-beach-strategii-i-taktiki-uspeshnoj-igry/","section":"staraban","tags":[],"title":"Boom Beach. Стратегии и тактики успешной игры"},{"body":"","link":"https://staraban.com/tags/","section":"tags","tags":null,"title":"Tags"},{"body":"","link":"https://staraban.com/tags/unity/","section":"tags","tags":null,"title":"Unity"},{"body":"Several days ago \u0026ldquo;Unity 5 beta 1\u0026rdquo; was leaked to the web. And I think that it is time to start migration of my game project to new Unity version.\nChanges\rFull list of changes in Unity 5\rUnity provide you a tool for updating your code. This would be an error message about updating the code and you need to click it. But it doesn\u0026rsquo;t help me a lot.\nUser GetComponent() instead of quick property. For javascript use GetComponent.\u0026lt;\u0026gt;() Removed quick property accessors, like .rigidBody, .rigidbody2D, .camera, .light, .animation, .constantForce, .renderer, .audio, .networkView, .guiTexture, .collider, .collider2D, .particleSystem, .particleEmitter, .guiText, .hingeJoint for modularization. Instead, use GetComponent to get references.\rThis will force you to change a lot of legacy code because it was more fast and useful to user short property instead of GetComponent, but Unity decided to drop it for modularization reasons.\r“transform” is now cached on the C# side, no more need to cache it yourself. And GetComponent performance was improved. Good news. For better performance we usually cache transform value because access transform was the same as GetComponent(), but this operation was heavy.\nMethod and fields changes SetTriangles instead SetTriangleStrip orthographic instead isOrthographic (camera property) \u0026ldquo;offset\u0026rdquo; instead of \u0026ldquo;center\u0026rdquo; property for BoxCollider2D\nExternal SDK\rNGUI\rWorks fine. You need manual change code according to changes I've mentioned.\rAlso don\u0026rsquo;t forget to change this lines of defines #if !UNITY_3_5 \u0026amp;\u0026amp; !UNITY_4_0 \u0026amp;\u0026amp; !UNITY_4_1 \u0026amp;\u0026amp; !UNITY_4_2 \u0026amp;\u0026amp; !UNITY_4_3 \u0026amp;\u0026amp; !UNITY_4_4 \u0026amp;\u0026amp; !UNITY_4_5\nPhoton Cloud (PUN Plugin)\rAlso works fine but I had a problem with Ping class when try to build for Web GL. So just change Unityengine.Ping class to C#\rusing System.Net.NetworkInformation;\r...\rSystem.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();\rSystem.Net.NetworkInformation.PingOptions options = new System.Net.NetworkInformation.PingOptions ();\roptions.DontFragment = true;\rPingReply reply = ping.Send (regionIp);\rwhile (reply.Status != IPStatus.Success/*!ping.isDone \u0026\u0026 Time.time \u003c startTime + timeout*/)\r{\r// sometimes Unity ping never returns, so we use a timeout here\ryield return 0;\r}\rApp42 Cloud\rCrash on user login. Somewhere inside the lib. I've already send crash report to Shephertz.\rHTML5 support (WebGL build)\rUnity 5 build targets\rNew define UNITY_WEBGL added.\nAfter making all porting stuff I was not able to compile my project to HTML5. I have got an error messages: Recursive Serialization is not supported. You can\u0026rsquo;t dereference a PPtr while loading Fatal error in Mono CIL Linker Failed to resolve System.Collections.Hashtable UnityEngine.WWWForm::get_headers()\nAngly Bots demo was compiled normally for HTML5. Compilation take match more time than for web player.\nConclusions\rIt is a first beta so it has some bugs and unfinished features. It crashes periodically. Looks like Web GL feature didn't ready yet. Also there is no Tizen build target. So I think we need to wait more clear version.\rBut be ready to change your code because this version bring some significant changes.","link":"https://staraban.com/unity-5-beta-overview-migration-to-new-unity-version/","section":"staraban","tags":["Unity"],"title":"Unity 5 beta overview. Migration to new Unity version"},{"body":"","link":"https://staraban.com/tags/games-@en/","section":"tags","tags":null,"title":"Games @En"},{"body":"Hook Wars: Pudge Revenge is a browser 3D multiplaeyer game, a reincarnation of a greate Pudge Wars game mode for Warcraft. Powered by Unity Web Player technology.\nHook Wars: Pudge Revenge is my Unity game project I have worked on last half year with my friends. Recently we\u0026rsquo;ve decided to release our firs stable alpha version for public community. Press Play for play the game\nGameplay\rBase gameplay is based on original Pudge Wars map for Warcraft III with a lot of gameplay and graphic improvements.\nThere are two teams - Red and Blue. Each team has three players. The players goal is to kill as many enemies as they can for winning the round.\nFor killing you can use hand weapon ( hand axe ) and ranged weapon ( Hook ). Player can improve hero characteristics in game shop using money owned during game.\nPlayer can also own some uniq deadliest abilities from river boxes.\nFountain in the center of the map can heal player if he stands near it.\nCurrently there are two game modes in game: Quick Game and Training.\nQuick Game - is a multiplaeyer game with random players and random map.\nTraining - is a single game with bots.\nSoon we plan to add custom map and friends invitation.\nOur plans\rFriends, invitation and close multiplayer rooms\rMobile and desktop versions\rNew gameplay features\rCustom round\rSeveral new characters\rNew maps\rInventory\rCharacter customization\rNeed your feedback\rWe have a lot of plans about our game. But also we need to know what community thinking about it. So do not hesitate to write about your wishes and expectations.\rSubscribe to our groups and write your feedbacks and idea about the game.\nTwitter Facebook VKontakte Youtube\nRelated posts\r2D Game Tutorial. Part 1. Character creating and tinting\rColor picker for Unity\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\r","link":"https://staraban.com/hook-wars-pudge-revenge-game-open-alpha-test/","section":"staraban","tags":["Unity","games @en"],"title":"Hook Wars: Pudge Revenge new multiplayer 3D game. Avaliable for early access now!"},{"body":"Игра Hook Wars: Pudge Revenge - это браузерная мультиплеерная 3D игра работающая на технологии Unity Web Player. Реинкарнация известной карты Pudge Wars.\nИгра Hook Wars: Pudge Revenge - это мой проект на движке Unity, над которым я работал вместе с друзьями последние пол года. Недавно проект перешел в стадию стабильной альфа версии и мы решили сделать его доступным для всех желающих. Чтобы играть нажмите Play.\nГеймплей\rГеймплей основан на популярной пользовательской карте Pudge Wars для Warcraft 3 с некоторыми изменениями и улучшениями. Также похожий режим игры недавно появился в игре Dota 2.\rНа карте играют две команды - Красная и Синя по 3 игрока в каждой. Задача игрока - убить как можно больше игроков другой команды для того чтобы команда выиграла раунд. Для убийства можно использовать оружие ближнего боя (Тесак) или оружие дальнего боя - Крюк. Игрок может улучшать свое оружие и характеристики героя, которым он играет. Для этого игрок покупает улучшения в игровом магазине за деньги, заработанные во время раунда за убийства других игроков.\nТакже игрок может получить различные уникальные умения из ящиков, плавающих по реке.\nФонтан в центре карты лечит игрока если он походит к нему.\nСейчас в альфа версии присутствует пока два режима игры: Быстрая игра и Тренировка.\nБыстрая игра - мультиплеерная арена 3 на 3 игрока со случайной комнатой\nТренировка - игра с ботами без подключения к сети\nСкоро мы планируем добавить создание закрытых комнат и друзей. А также сделать отдельную версии для популярных мобильных и десктопных платформ.\nНаши планы\rДрузья и закрытые комнаты\rМобильные и декстопные версии\rНовая карта\rНовые фичи по геймплею\rРаунд с пользовательскими настройками\rНесколько новых персонажей\rИнвентарь, лидерборд\rКастомизация персонажа\rНужно ваше мнение\rУ нас есть много планов насчет игру. Но нам также очень важно знать мнение сообщества о ней. Мы будем очень признательны вам если вы напишете ваши пожелания, замечания и рекомендации по игре.\rПодписывайтесь на наши группы чтобы получать самые свежие новости и делиться с нами вашими впечатлениями.\nTwitter Facebook Вконтакте Канал Youtube\nПочитать по теме\rChild of Light. Прохождение игры\rWasteland 2. Обзор и прохождение\rAssassin’s Creed 4. Советы по игре\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\rX Rebirth. Первые впечатления об игре\r","link":"https://staraban.com/hook-wars-pudge-revenge-multipleernaja-3d-igra-na-unity-otkryt/","section":"staraban","tags":["unity @ru","обзор"],"title":"Hook Wars: Pudge Revenge. Мультиплеерная 3D игра. Открытая альфа"},{"body":"","link":"https://staraban.com/tags/unity-@ru/","section":"tags","tags":null,"title":"Unity @Ru"},{"body":"","link":"https://staraban.com/tags/%D0%BE%D0%B1%D0%B7%D0%BE%D1%80/","section":"tags","tags":null,"title":"Обзор"},{"body":"","link":"https://staraban.com/categories/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8%D0%B3%D1%80/","section":"categories","tags":null,"title":"Создание Игр"},{"body":"Недавно вышла игра Child of Light от компании Ubisoft Monreal. Это квест про маленькую девочку Аврору, дочку короля и королевы, которая как то раз заснула и не проснулась.\nИгра имеет неповторимую атмосферу , прекрасную музыку и арт. Особенно радует отличная русская локализация. Все диалоги написаны стихами.\nАвтор: Сергей Тарабан\n:ad:\rУправление\rДвижение стрелками. Прыжок - стрекла вверх. Спуститься на уровень ниже - удерживаем кнопку вниз и пробел. Взаимодействие - Е.\rКамни и их бонусы\rКамни выпадают после боя и их можно получить из сундуков или как награду за задания. Их можно вставлять в оружие, одежду или в амулет. Это позволяет добавлять разные умения вашему персонажу.\rИз камней можно крафтить новые камни. Правила крафта такие:\n3 любых камня одного цвета = 1 камень следующего уровня (с улучшенными свойствами)\nСиний + Красный + Зеленый = Белый\nСиний + Красный = Фиолетовый\nКрасный + Зеленый = Желтый\nСиний + Зеленый = Голубой\nФиолетовый+ Желтый+ Голубой= Черный\nБелый+ Черный = Светло-зелено-оранжевый (шпинель)\nБезупречный белый + Безупречный черный + Безупречный Шпинель = Камень принцессы\nУровни камней: необработанный, неровный, ограненный, безупречный\nДалее описание свойств каждого из камней. В скобке через запятую величина для каждого из уровней камня.\nСиний\nоружие: урон водой и усиление атаки (5%, 8%, 12%, 16%)\rодежа: сопротивление магии воды (8%, 14%, 18%, 24%)\rамулет: шанс уклонение во время выполнения приема (5%, 10%, 15%, 20%)\rКрасный оружие: урон огнем и усиление атаки (5%, 8%, 12%, 16%)\rодежа: сопротивление магии огня (8%, 14%, 18%, 24%)\rамулет: увеличиваем макс здоровье (+2, +4, +12, +20)\rЗеленый\rоружие: урон молнией и усиление атаки (5%, 8%, 12%, 16%)\rодежа: сопротивление магии земли (14%, 18%, 24%)\rамулет: увеличиваем макс манну (+2, +4, +6, +8)\rЖелтый (Цитрин)\rоружие: урон светом и усиление атаки (5%, 10%, 15%, 20%)\rодежа: шанс уклонения во время защиты (5%, 10%, 15%, 20%)\rамулет: шанс подвинуть врага на шкале времени в бою (5%, 10%, 15%, 20%)\rФиолетовый (Аметист)\rоружие: увеличивает физический урон если здоровье меньше (20% на 20%, 20% на 30%, 30% на 20%)\rодежа: снижение урона от физ. атак (5%, 10%, 15%, 20%)\rамулет: увеличивает магический урон если здоровье меньше (20% на 20%, 20% на 30%, 30% на 20%)\rГолубой (Турмалин)\rоружие: шанс обездвижить цель(5% на 3 сек, 10% на 3 сек, 15% на 6 сек)\rодежа: снижение урона от магических атак (5%, 10%, 15%, 20%)\rамулет: усиливает магию (+2, +4, +6, +8)\rБелый (Алмаз)\rоружие: увеличивает скорость (+1, +2)\rодежа: дает дополнительный опыт после боя (+5%, +10%)\rамулет: увеличивает скорость применения приема (3%, 6%)\rЧерный (Оникс)\rоружие: увеличение мощности (10%, 15%)\rодежа: снижение урона от физ. и маг. атак если уровень здоровья меньше (20% на 30%)\rамулет: шанс уклонения при применении приема когда здоровье ниже (20% шанс 30%)\rСветло-зелено-оранжевый (шпинель)\rоружие: усиливает атаку (15%, 20%, 30%)\rодежа: увеличивает скорость если произошло прерывание на (10% на 1 сек)\rамулет: каждый раунд начинается впереди на (5%, 10%, 15%)\rКамень принцессы\rоружие: усиливает атаку на 40%\rодежа: снижает урон от физ. и маг. атак на 25%\rамулет: усиливает мощность на 35%\rГлава 1. Девочка и светлячок\rСакура\rИдем вправо вниз. Доходим до пещеры с волком. Над пещерой поднимаемся на дерево. Там будет подъем прямо возле входа в пещеру, дальше по веткам.\nПоходим до цветущего розового дерева. Говорим со светлячком Ингикулюсом. Он ищет Аврору - это мы.\nСветлячком можно управлять мышкой и светить если зажать правую кнопку. На это расходуется энергия света. Её можно собирать из светящихся цветов.\nСветлячок может остлеплять врагов, что позволит их обходить ен вступая с ними в бой.\nДоходим до дерева. Светим светлячком на цветы. на дереве появляется солнечный зацчик. Направляем его на нужный символ. Проходим в дверь. Внутри вытаскиеваем мечь из камня и сражаемся с первым врагом.\nБой\rЕсть две фазы - фаза ожидания и фаза атаки. Если вас атакуют в фазе атаки - ваша атаки сбивается. Точно также если вы атакуете врага в этой фазе - его атака збивается. Если вы видете что враг быстрее вас и вы не успеете его атаковать, то нужно брать защиту.\rЕсли светить на варага светлячком он становиться медленным. Это помогает вам сделать больше атак. Энергию для светлячка можно взять из цветов которые растут на уровне боя.\nПерсонажа можно лечит если зажать светлячка на персонаже.\nТакже если вы зайдете к врагу сзади вы сможете его атаковать сразу (внезапная атака).\nПрокачка персонажа - три ветки: магия, сила и пассивные умения.\nГлава 2. Королева Света\rСпускаемся вниз. Проходим по подземелью и выходим наверх до руин. Там будет дверь справа, которую надо как то открыть. Рядом берем ящик и перемещаем его вправо до уступа. Поднимаемся и доходим до двери. Входим в нее.\rГоловоломка с механизмами. Активируем водьемник кнопкой по центру. Подинмаемся и спаскаем ящик. Двигаем его вправо до упор. Преепрыгиваем уступ. Там двигаем второй ящик до упора. Поднимаемся на верх и включаем рычаг. Начинает подниматься платформа. Возвращаемся тем еж путем что и пришли. Берем первый ящик и вдигаем его на платформу. Понимаемся с ним вместе и ставим его на активную плитку в полу. Проходим через вдерь. Убиваем или отвлекаем монстра. Активируем рычаг и спрыгиваем вниз. Дверь открыта. Входим в нее.\nИдем вправа, перелазим через люстру с цветными стеклами и актвируем рычаг слева. Тут все провто. Выбираем нужный цвет, такой как на кристалах сверху. Зажимаем мышкой на витраже и тянем пока не видим солнечный зайчик такого же цвета. наводим зайчик на кристалы. Там для каждого кристала.\nТеперь мы умеем летать!\nКогда разобъем витраж, нужно сразиться с двумя стражниками.\nПосле победы появиться фея. Она даст нам крылья и флейту. Теперь мы модем летать. Летим в самый верх. Слева берем бонус (молния) за стеной возле сундука.\nГлава 3. Навстречу приключениям\rЛетим влево. Встречаем циркачку Рубеллу. Нужно найти ей найти её брата. Она присоединиться к вам.\rУ нее очень быстрая атака, она может воскрешать вас и лечить.\nЛетим вниз, берем из ящику рубин. Его можно прикреплять к оружию или броне. Также из рубинов можно создавать более крутые рубины.\nВеликан\nЛетим строго влево пока не встретим великана. Он не дает нам пройти и говорит что съест нас на завтрак. Деремся с ним. Летим вверх и подбираем страницу со стихами в воздухе. Из можно почитать в меню \u0026ldquo;Записи\u0026rdquo;\nЛетим дальше влево к дереву с шипами. Ваша задача пролететь до указатели, указывающий направление в деревню. Можно до указателя свернуть вниз, дальше будет как бы полая часть дерева. Летим по ней вверх. Там будет большой дракон, убиваем его и получим бонус к защите.\nВозвращаемся до указателя и опускаемся уже после него вниз. Летим влево и прилетаем в деревню Капилли.\nПеред самым выходом с локации поднимаемся вверх и берем еще одну страницу (стихи).\nГлава 4. Глубокий колодец\rЗлая ведьма превратила всех в ворон. Идем в верхнюю локацию и встречаем гнома Финна. Нам надо залезть в колодец и набрать воды. Вода из колодца вернет жителям нормальный облик.\rГном присоединиться к вам как маг воды и огня. Спускаемся в колодец.\nТут из врагов - синие пауки. Имеют устойчивость к огню и воде, но уязвимы к молнии. У гнома есть отличная магия молнии. Пауки наносят урон водой, поэтому ставим на броню синий изумруд.\nСпускаемся вниз к подземной реке, но воды увы нет.\nЛетим влево к двери, открываем её как обычно. Нужно зажать мышкой на месяц и поместить его на рисунок над дверью и точно также на стойке с символом солнца.\nВходим в дверь.\nИдем вправо. Тут попадаются огненные собаки. Для них уязвима атака водой, а они сами атакуют огнем.\nБой с гидрой\nВходим в большую пещеру. Поднимаемся в потолок подбираем страницу. Проходим в право и входим в пещеру со статуей. Начитается бой с гидрой. Тут все просто - красная голова уязвима к воде, синяя - к молнии, а зеленая к огню.\nПосле боя возвращаемся в деревню, все расколдованы.\nБерем задание у гнома Не райский сад. Надо очистить его сад от пауков. Летим к Алтарю Матильды, там у выхода с карты рядом с сакурой цветущей нужно убить всех пауков.\nЕще один квест берем у девушки в деревне гномов. Она попросит найти её поросенка в локации Мельницы. На нем будет метка. Найти его не проблема, у меня он был где то в середине карты. Метка видна только если на него посветить.\nИдем вправо в лес к равнинам Рамбера.\nТут попадаются лучники. Они уязвимы к огню. Наносят урон землей.\nДоходим до указателя. Его продумает ветер. Спускаемся в проход рядом с ним. В самом низу будет дверь которую охраняет моб. Если вы хотите получить бонус + 5 к магии то спускаемся туда. Входим в нее.\nДалее следуем по тоннелю с шипами. Вам нужно взять ящик сверху и пометить его на платформу снизу чтобы пройти в комнату с бонусом. Активируем рычаг. Выходим через дверь слева.\nВозвращаемся к указателю. Идем влево, берем еще два бонуса защиты от магии по пути. Там будет водоворот воздушный. А в том районе возьмете еще одну страницу стихов.\nВыходим из пещер на равнину.\nГлава 5. Нежданная встреча\rИдем влево. Доходим до колеса и проходим под ним через гору. Там нас ждет сестра Нора. Она присоединяется к нам.\rВстреча с сестрой\nОна как боец слабый, но она может кидать заклинания защиты, усиления или ослабления. Причем её очень быстро можно прокачать так что она кидает замедление и ускорение сразу на группу. Это незаменимо пригодиться позже в бою с очень быстрыми и сильными противниками.\nПо мере продвижения вы дойдете до девушки пирата. Он вам даст еще синих камней. Прямо после нее есть проход в гору. Там есть дверь, в которой можно спуститься в комнату с лавой, там в ящике будет лежать камень \u0026ldquo;цитрин\u0026rdquo; (желтый камень).\nОн добавляет урон светом, дает шанс уклонения или шанс отодвинуть порождение тьмы по шкале времени во время боя.\nИдем дальше и попадаем в огромную пещеру. Мы как бы внутри горы. Тут прохода не будет, но нужно все исследовать. Тут есть золотая пещера с шахтером которые предлагает купить у нас светлячка.\nЕсть дверь, которая ведет к большому красному босу-камню (у входа плато с рукой, торчащей из земли. Нужно лететь прямо влево до конца, там будет вход)\nКогда вы все обследовали возвращаемся и летим вверх по склону горы. Наша задача как то попасть на город который\nГород мышей\nлетает наверху. Но пока это невозможно.\nПерелетаем через гору и попадаем в город.\nГлава 6. О мышках\rНа башне мышь со скрипкой дает нам яблоко. Летим с этим яблоком в деревню гномов в школу. И отдаем его учителю. Он даст вам лопату. Лопату относим гному с телегой, которого вы встретите на пути в старый Монастырь. Он отдает вам фонарь. Фонарь отдаете искателю золота в золотой пещере рядом с деревней мышей. За это он дает вам слиток золота. Отдаем его мышке со скрипкой и получаем хорошую награду (6 единиц увеличения урона).\rВ городе можно помочь одному мышку убрать склад. Там будет куча огненных приведений. За это получим пару улучшений для персонажа.\nВ самом конце справа будет зал где сидит главная мыш, губернатор. Говорим с ним, потом выходим на улицу и встречаем молодую мышь. Он к нам присоединиться для похода в хранилище. Якобы он знает другой путь через гору.\nГора\nОн очень хороший лучник. У него есть отличная групповая атака стрелами.\nИдем к горе. Она оказывается живой. Она соглашается поднять нас нас в город в небе, но у нее тяжело в груди и она не может встать. В её сердце сидит паук.\nГора открывает рот и мы входим внутрь. Ваша задача убить трех пауков и победить большего паку, сидящего в сердце.\nСердце горы\nТут я вам советую взять в бой Нору и мышку-лучника. Биться вы будете против трех пауков, которые бафают на себя ускорение, а на вас замедление. И урон у них приличный. Норой сразу бафаете на них всех замедление, а на отряд - ускорение. Лучником - групповая атака стрелами, Норой - стандартная её атака мечем для пропуска хода противника. Иногда есть шанс обездвижить.\nКогда найдете хранилище, мышка попросит вас помочь его открыть.\nКод к хранилищу: один поворот рычага справа, два слева, потом снова один справа. Затем активируете последовательно три вращающихся светящихся кнопки. Все, хранилище ваше.\nБой с пауком\nБой с пауком\nБерете сестру Нору + мышь лучника. Убиваете двух обычных пауков точно также как всех предыдущих. После этого меняете лучника на Аврору (девочку), потому что мышь-лучник наносит маленький урон боссу (порядка 30 единиц). А Аврора будет наносить до 150 единиц урона светом. У боса паука примерно 2000 жизней.\nПосле боя возвращаемся в город. Потом идем к горе и поднимаемся вверх. Мышь-лучник сообщит что пойдет с нами. Отлично.\nГлава 7. Герцог и герцогиня\rТут нужно постепенно подниматься вверх и обследовать карту. В самой левой части карты в самом верху будет остатки цирка. Там вы найдете брата циркачки Рубеллы. Он присоединиться к вам.\rПоднимаетесь к выходу в самом верху карты.\nБой с грифоном\nТут нам предстоит бой с гигантским грифоном. Берем Нору и Аврору. Бафаем замедление и ускорение на себя. Авророй атакуем на всех светом. Как только привидения будут уничтожены постоянно атакуем грифона мечем. Если грифон кидает заклинание замедления, кидаем Норой заклинание ускорения на всех.\nПроходим дальше в храм. Тут нас ждет расставание с друзьями. Прощаемся и идем с Норой через зеркало.\nМы попадаем в замок. Он захвачен злыми колдуньями, и Нора предает нас. Она была все время с ними заодно. Нас пытаются убить, но нас защищает колдовство, поэтому нас решили кинуть в темницу.\nГлава 8. Ввысь\rМы очнулись в камере. Играем на флейте. Охранник Энгус нас выпускает и присоединяется к нам. Это отличный персонаж-танк. У него есть способность брать урон на себя.\rЛетим вверх берем лист о стихами 4.\nДалее летим строго вниз. Там будет комната с механизмами. Чтобы из включить нужен светлячок. Летим влево, там будет красная дверь. Заходим. Освобождаем наших друзей.\nГоловоломка с цепью. Активируем рычаг слева (меняет направление вращение главной шестерни). Дальше отодвигаем крайне правую. Затем активируем главную шестерню вверху.\nПеред тем как спускаться поднимемся вверх заберем бонусы.\nПо врагам:\nВойны тьмы уязвимы к физ. атаке, свет приносит средний урон\rСиние собаки уязвимы к свету и устойчивы к физ атаке\rЛетим внизу. Тут Энгус попросит нас помочь ему освободить его друзей воинов. Внизу нас ждет вход в лабиринт Эрин.\rТут система такая. Нужно идти в ту дверь, на которой или рядом с которой есть символ, изображенный на щите у статуи. Нужно найти на уровне статую со знаком, а затем найти дверь с таким точно знаком. Пройдя 4-5 уровней лабиринта приходим в комнату с войнами.\nЗатем выходим из комнаты и идем влево. Встречаемся с сестрой Корделией. Бой я играл за Энгуса и Аврору. Атакуем светом убивая привидений. Затем валим сестру физической атакой. активно приходиться юзать зелья для снятия замедления.\nПосле победы забираем луну и превращаемся во взрослую девушку. Летим вправо в затопленные земли.\nГлава 9. Рыбники и огр\rУровень проходил за Энгуса + Аврора. Аврора и Энгус имеют такой набор камней: турмалин (голубой), аметист (розовый), цитрин (желтый)\rВраги:\nкабан - уязвим к свету\nогненный летун - уязвим к свету\nлошадь-призрак - уязвим к физ атаке\nЛетим вправо. Общаемся с статуей. Далее идем до деревни. Узнаем про огра, который утащил жителей на глубину. Нужно их спасти.\nИдем до пещеры справа. Входим в нее. Тут надо обчистить сундуки.\nПроходим дальше вправо после пещеры. Тут будет вход в жилье троля. Нужно открыть вход. Для этого найдите вверху две римских буквы на постаменте и спустите их вниз.\nЗатем светите на них светлячком и наводите зайчик на нужные символы.\nБой с огром несложный. Он уязвим к физическому урону, а его собаки - к свету. Можно завалить сначала огра, потом его собак.\nПосле его смерти входим в дверь и спускаемся под воду.\nГлава 10. Бездна\rЛетим вправо, встречаем Духа стихий, светлячка. Он попросит ему помочь найти 5 светлячков в мире. Первого найдем у алтаря слева.\rСпускаемся вниз по кристаллу (по нему молнии идут), справа первая пещера - огромный босс-кабан. Уязвим к свету.\nЛетим дальше влево и попадаем в подводный город. Заглядываем в фонтан. Затем бьемся с водяным боссом.\nДалее летим от фонтана верх и чуть левее, в потолке будет скрытый проход. Там находиться тайник Кинбела. Забираем 6 черных камней из ящика.\nЛетим влево.\nТам будут ворота. Нужно последовательно осветить знаки на воротах. Порядок такой: ракушка(слева крайняя), крылья, копье, арфа.\nВходим в чертоги Солнца.\nИдем вправо пока не доберемся до огромного зала. Там встречаем сестру Нору, которую теперь звать Нокс. Она выпускает ядовитый газ и улетает вверх. Надо быстро пройти в проходы справа и слева чтобы открыть проход.\nПеред тем как сражаться с Нокс распределите все очки у умений и камки, иначе потом такой возможности у вас не будет.\nПосле боя смотрим заставку и деремся с Мачехой. У нее два грифона по 800 жизней каждый.\nТут главное почаще ставить на себя защиту. Валить можно как физическим уроном, так и светом. Но светом предпочтительней.\nМожно кинуть на мачеху зелье замедление. И валить только её светом. Иначе если завалите грифона, она его воскресит.\nВсе, конец. Дальше свободное прохождение.\nВы можете также начать новую игру \u0026ldquo;Новая игра +\u0026rdquo;. У вас останется инвентарь, прокачка персонажа и уровень. И враги станут пропорционально сильными.\nРасположение светлячков:\nРядом с алтарями\nВрата Солнца сразу слева от того места там где дают задание\nЗатопленные земли - за деревней рыбаков\nМельницы - рядом с горой и девушкой - пиратом\nДеревня Капили - возле входа со стороны алтаря Матильды\nАлтарь Матильды - левый верхний угол карты. Под местом где мы нашли циркачку Рубеллу.\nСадимся на руку горы, она нас поднимает в локацию воздушного города. Алтарь будет с краю справа в середине карты.\nАвтор: Сергей Тарабан\nПочитать по теме\rHook Wars: Pudge Revenge. Ремейк игры Pudge Wars. Открытая альфа\rWasteland 2. Обзор и прохождение\rAssassin’s Creed 4. Советы по игре\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\rX Rebirth. Первые впечатления об игре\r","link":"https://staraban.com/child-of-light-prohozhdenie/","section":"staraban","tags":["прохождение"],"title":"Child of Light. Прохождение игры"},{"body":"","link":"https://staraban.com/tags/%D0%BF%D1%80%D0%BE%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5/","section":"tags","tags":null,"title":"Прохождение"},{"body":"","link":"https://staraban.com/tags/unreal-engine-@en/","section":"tags","tags":null,"title":"Unreal Engine @En"},{"body":"In this article I will briefly describe a basics concepts of the developing using Unreal Engine 4 and compare it with Unity developing. It will help you to fast understand how Unreal Engine 4 works especially if you are Unity programmer. This article is based on UE4 guide for Unity developers and contained additional information\nAuthor: Sergey Taraban\n:ad:\nKey concepts\rGame logic\rUnity\rGame logic is writing using Mono environment. Scripts manipulate the objects. Object can have a lot of scripts or does not have any. Every script are equal.\nMinimal application does not have any scripts or objects (empty scene). Programmer should creates objects with scripts which realize required game logic\nUnreal Engine 4\nGame logic are writing using C++ and/or Blueprint Editor. C++ class and blueprint manipulates the objects. Object can have only one class and blueprint connected to this class.\nMinimal application has stiff architecture which consist of several main classes were wrote on C++, which realize multilayer FPS game logic. Programmer in common case should derives from this class for realize required game logic.\nGame start\rUnity\rBy default level with index 0 is loaded. After this Awake function of script, which object were spawned first, is called, or if this script has highest priority (Script Execution Order).\nUnreal Engine 4\nLevel setted by default (Edit \u0026gt; Project Settings \u0026gt; Maps \u0026amp; Modes ) is loaded. Every level has settings WorldSettings class. using this class UWorld class are created. UWorld creates object of class GameMode in scene. GameMode object creates PlayerController object and other object.\nProgram enter point is constructor of the class inherited from GameMode.\nScene\rConcept of the Scene in both engines is the same. Unity3D and UE4 have different axes definitions.\rUnity\nY axis up.\nX - left, right\rY - up, down\rZ - forwards, backwards\rFile format: *.scene\rUse GameObject static methods for scene objects operations ( find, spawn, destroy)\nLevel loading: Application.LoadLevel(string name);\nUnreal Engine4\nZ axis up.\nX - forwards, backwards\rY - left, right\rZ - up, down\rFile format: *.umap\rUse UWorld class method for scene objects operations ( find, spawn, destroy). You can get UWorld using GetWorld() method of class PlayerController.\nLevel loading: GetWorld()-\u0026gt;ServerTravel(string URL);\nURL - path to the level. Can include additional parameters. Example:\n/Game/Maps/\u0026lt;map_name\u0026gt;?\u0026lt;key_1\u0026gt;=\u0026lt;value_1\u0026gt;\u0026amp;\u0026lt;key_2\u0026gt;=\u0026lt;value_2\u0026gt;\nReading parameters in code (GameMode class) GetIntOption(OptionsString, \u0026lt;key_1\u0026gt;, \u0026lt;default_value\u0026gt;);\nScene objects\rUnity\rBase scene object - GameObject.\nGameObjects are containers for all other Components. Has Transform component by default. Components are then added to give the GameObject functionality. GameObject cannot has components with the same type (except scripts). Components not support parent-child relation.\nYou can combine several Game Objects in group and link to root Game Object (parent-child relation).\nUnreal Engine 4\nBase scene object - Actor.\nAn Actor is the base object that can be placed or spawned into the world. An Actor by itself does not even contain a Transform component. The Actor is simply the base object which can have a presence in the level. Components are the independent objects. It is like a GameObject in Unity. One Actor can has a lot of components of one type. Most of components support parent-child relation (but not all).\nProgrammer can inheriting from default components and creates his own.\nComponent spawn example:\nTSubobjectPtr SceneComponent = PCIP.CreateDefaultSubobject(this, TEXT(\"SceneComp\"));\rRootComponent = SceneComponent;\rInput events\rUnity\rClass Input\rInput.GetAxis(\"MoveForward\");\rInput.GetTouch(0);\rUnreal Engine 4\rComponent UInputComponent of Actor class\rInputComponent-\u003eBindAxis(\"MoveForward\", this, \u0026AFirstPersonBaseCodeCharacter::MoveForward);\rInputComponent-\u003eBindTouch(EInputEvent::IE_Pressed, this, \u0026AStrategyPlayerController::OnTapPressedMy);\r...\rvoid AStrategyPlayerController::OnTapPressedMy(ETouchIndex::Type index, FVector ScreenPosition)\r{\r}\rPrint to console (log)\rUnity\rDebug.Log(\"Log text \" + (0.1f).ToString());\rDebug.LogWarning(\"Log warning\");\rDebug.LogError(\"Log error\");\rUnreal Engine 4\rUE_LOG(LogTemp, Log, TEXT(\"Log text %f\"), 0.1f);\rUE_LOG(LogTemp, Warning, TEXT(\"Log warning\"));\rUE_LOG(LogTemp, Error, TEXT(\"Log error\"));\rFError::Throwf(TEXT(\"Log error\"));\rFMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT(\"Dialog message\")));\rMain classes and function\rBase data types\rUnity3D\rUnreal Engine 4\rint\rint32, int24, int8\rstring\rFString\rTransform\rFTransform\rQuaternion\rFQuat\rRotation\rFRotator\rGameobject\rActor\rArray\rTArray\rMember Functions and Variables\rMost popular using function and variables\rUnity3D\rUnreal Engine4\rUpdate()\rTick()\rtransform\rGetActorTranform(), GetFocalLocation()\rtransform.position\rGetActorTranform().GetLocation()\rtransform.roation\rGetActorTranform().GetRotation()\rtransform.localScale\rGetActorTranform().GetScaled3D()\rDestroy()\rDestroy()\rFind()\rFActorIterator ActorItr(GetWorld()),ConstructorHelpers::FObjectFinder object(name)\rMathF\rFMath\rRayCast\rTrace\rSphereCast\rSweep\rComponents\rUnity3D\rUnreal Engine4\rTransform\rUSceneComponent\rCamera\rUCameraComponent\rBoxCollider\rUBoxComponent\rMeshFilter\rUStaticMeshComponent\rParticleSystem\rUParticleSystemComponent\rAudioSource\rUAudioComponent\rRelated links\rUnreal Engine 4 overview. Features, cons and pros\rUnity Fog of War. Part 3. Static and dynamic fog of war\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war tutorial. Part 1 (video tutorial)\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\rQuaternions support in irrlicht engine\rAuthor: Sergey Taraban\n","link":"https://staraban.com/unreal-engine-4-key-consepts-of-cpp-programming-and-comp-with-uniy/","section":"staraban","tags":["unreal engine @en"],"title":"Unreal Engine 4 key concepts of C++ programming and comparison with Unity"},{"body":"","link":"https://staraban.com/tags/unreal-engine/","section":"tags","tags":null,"title":"Unreal Engine"},{"body":"В этой статье я кратко расскажу об основных моментах разработки на игровом движке Unreal Engine 4 в сравнении с движком Unity. Это поможет вам быстро разобраться как работает Unreal Engine 4, особенно если до этого вы разрабатывали игры на Unity. Статья основана на переводе инструкции по миграции для разработчиков Unity (UE4 guide for Unity developers) и содержит дополнительные материалы, не освещенные в оригинальному документе.\nАвтор: Сергей Тарабан\n:ad:\nКлючевые концепции\rИгровая логика\rUnity\rИгровая логика пишется в среде Mono. Все манипуляции с объектами осуществляется через скрипты. Объект может иметь сколько угодно скриптов или не иметь вообще. Каждый скрипт является равноправным.\nМинимальное приложение не имеет никаких скриптов и объектов. Программист должен создавать объекты со скриптами, которые реализуют необходимую ему игровую логику.\nUnreal Engine 4\nИгровая логика пишется на С++ и/или визуальном редакторе чертежей (Blueprint Editor). Вся манипуляции с объектами осуществляется через C++ классы и/или чертежи. Объект может иметь только один класс и один чертеж для этого класса.\nМинимальное приложение имеет жесткую архитектуру из ряда основных классов, написанных на С++, которые реализуют логику игры от первого лица. Программист в общем случае должен наследоваться от этих классов и переопределять их функции для реализации своей игровой логики.\nАрхитектура игры изначально мультиплетная.\nНачало игры\rUnity\rПо умолчанию загружается уровень с индексом 0, который считается уровнем по умолчанию. После этого вызываются функция Awake произвольного скрипта, игровой объект которого был заспаунен первый или для которого выставлен самый высокий приоритет в настройках сцены (Script Execution Order).\nUnreal Engine 4\nЗагружается уровень, выставленный в настройках проекта как уровень по умолчанию (Edit \u0026gt; Project Settings \u0026gt; Maps \u0026amp; Modes ). Для каждого уровня определяется класс настроек WorldSettings.h. Используя этот класс создается класс UWorld. Он в свою очередь создает экземпляр класса GameMode в сцене, который задается в настройках уровня. Этот объект далее создает PlayerController и другие вспомогательные классы сцены.\nВходной точкой является конструктор класса, унаследованного от класса GameMode.\nСцена\rКонцепция сцены в обоих движках одинаковая. Используются разные системы координат.\rUnity\nY ось смотрит вверх.\nX - left, right\rY - up, down\rZ - forwards, backwards\rФормат файла: *.scene\rРабота со объектами сцены ведется через статические методы класса GameObject ( спаун, удаление, поиск объектов в сцене)\nЗагрузка уровня: Application.LoadLevel(string name);\nUnreal Engine4\nZ ось смотрит вверх.\nX - forwards, backwards\rY - left, right\rZ - up, down\rФормат файла: *.umap\rРабота с объектами сцены ведется через методы класса UWorld ( спаун, удаление, поиск объектов в сцене). UWorld можно получить методом GetWorld() класса PlayerController.\nЗагрузка уровня: GetWorld()-\u0026gt;ServerTravel(string URL);\nURL - это путь к уровню. Может включать дополнительные параметры, которые можно прочитать в коде.\n/Game/Maps/\u0026lt;map_name\u0026gt;?\u0026lt;key_1\u0026gt;=\u0026lt;value_1\u0026gt;\u0026amp;\u0026lt;key_2\u0026gt;=\u0026lt;value_2\u0026gt;\nПолучить опции можно в классе GameMode так: GetIntOption(OptionsString, \u0026lt;key_1\u0026gt;, \u0026lt;default_value\u0026gt;);\nОбъекты сцены\rUnity\rБазовый объект сцены - GameObject.\nGameObject это контейнер для комопнентов. По умолчанию имеет не удаляемый компонент Transform. Компоненты используются для расширения функциональности GameObject. GameObject не может иметь несколько одинаковых компонентов (скипты это разные компоненты). Компоненты не поддерживают иерархию.\nМожно объединять несколько GameObject в группу с общим родителем (отношение родитель - потомок. ).\nUnreal Engine 4\nБазовый объект сцены - Actor.\nActor это базовый класс, который является контейнером для компонентов и может размещаться в сцене. По умолчания он не содержит никаких компонентов. Компоненты являются самостоятельными объектами в составе Actor-ра. Можно сказать, что фактически каждый компонент это аналог GameObject в Unity. В одном Actor может быть сколько угодно компонентов одного типа. Компоненты поддерживают иерархию (не все). Компоненты можно присоединять к другим компонентам, образуя отношение родитель - потомок.\nПрограммист также может наследоваться от стандартных компонентов или писать свои собственные.\nПример создания компонентов:\nTSubobjectPtr SceneComponent = PCIP.CreateDefaultSubobject(this, TEXT(\"SceneComp\"));\rRootComponent = SceneComponent;\rОбработка событий от устройств ввода\rUnity\rКласс Input предоставляет прямой доступ к событиям устройств ввода через статические методы.\rInput.GetAxis(\"MoveForward\");\rInput.GetTouch(0);\rUnreal Engine 4\rКомпонент UInputComponent класса Actor предоставляет доступ к событиям устройств ввода используя биндинги.\rInputComponent-\u003eBindAxis(\"MoveForward\", this, \u0026AFirstPersonBaseCodeCharacter::MoveForward);\rInputComponent-\u003eBindTouch(EInputEvent::IE_Pressed, this, \u0026AStrategyPlayerController::OnTapPressedMy);\r...\rvoid AStrategyPlayerController::OnTapPressedMy(ETouchIndex::Type index, FVector ScreenPosition)\r{\r}\rЛогирование\rUnity\rDebug.Log(\"Log text \" + (0.1f).ToString());\rDebug.LogWarning(\"Log warning\");\rDebug.LogError(\"Log error\");\rUnreal Engine 4\rUE_LOG(LogTemp, Log, TEXT(\"Log text %f\"), 0.1f);\rUE_LOG(LogTemp, Warning, TEXT(\"Log warning\"));\rUE_LOG(LogTemp, Error, TEXT(\"Log error\"));\rFError::Throwf(TEXT(\"Log error\"));\rFMessageDialog::Open(EAppMsgType::Ok, FText::FromString(TEXT(\"Dialog message\")));\rОсновные классы и функции\rБазовые типы данных\rUnity3D\rUnreal Engine 4\rint\rint32, int24, int8\rstring\rFString\rTransform\rFTransform\rQuaternion\rFQuat\rRotation\rFRotator\rGameobject\rActor\rArray\rTArray\rФункции и переменные\rСписок самых распространенных функций\rUnity3D\rUnreal Engine4\rUpdate()\rTick()\rtransform\rGetActorTranform(), GetFocalLocation()\rtransform.position\rGetActorTranform().GetLocation()\rtransform.roation\rGetActorTranform().GetRotation()\rtransform.localScale\rGetActorTranform().GetScaled3D()\rDestroy()\rDestroy()\rFind()\rFActorIterator ActorItr(GetWorld()),ConstructorHelpers::FObjectFinder object(name)\rMathF\rFMath\rRayCast\rTrace\rSphereCast\rSweep\rОсновные компоненты\rUnity3D\rUnreal Engine4\rTransform\rUSceneComponent\rCamera\rUCameraComponent\rBoxCollider\rUBoxComponent\rMeshFilter\rUStaticMeshComponent\rParticleSystem\rUParticleSystemComponent\rAudioSource\rUAudioComponent\rПочитать по теме\rUnreal Engine 4. Обзор нового игрового движка от Unreal Technology\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков\r2D Игра. Часть 1. Создание и раскраска персонажа используя шейдер маски (видеоурок)\rИмплементация DLC системы в Unity\rДелаем туман войны в Unity. Видеоурок.\rАвтор: Сергей Тарабан\n","link":"https://staraban.com/vvednie-v-nativnuju-razrabotku-na-unreal-engine-4-kljuchevye-momenty-i-sravnenie-s-unity-3d/","section":"staraban","tags":["unreal engine"],"title":"Введние в с++ разработку на Unreal Engine 4. Ключевые моменты и сравнение с Unity 3D"},{"body":"В этом видео уроке я расскажу про создание 2D персонажа с разным набором спрайтов (текстур) и с разными состояниями, например, ходьба в разном направлении, покой и т.д. Такой персонаж может состоять из большего числа разных спрайтов и изменять их динамически, что позволяет создавать большое число разных персонажей, используя одну и ту же анимацию и логику движения.\nАвтор: Сергей Тарабан\n:ad:\rЧасть 1. Создание и раскраска персонажа используя шейдер маски\nВ уроке используется персонаж из предыдущей части. Из него, используя новый спрайт женского персонажа, создается персонаж-девушка. Оба этих персонажа имеют разные прически, но имею одинаковые состояния: движение вверх, вниз, вправо и влево.\rДля работы с такими персонажами был написан скрипт, которые динамически меняет спрайты и состояния персонажа.\nMultiSpriteCharacter скрипт\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing System.Collections;\rusing System.Linq;\r[System.Serializable] public class SpritePartInfo { public Transform Part; public string SpriteName; public Vector3 scale = Vector3.one; }\n[System.Serializable] public class SpriteSetForPart { public Transform Part; public int CurrSpriteID = -1; }\n[System.Serializable] public class AnimPartInfo { public string StateInfo; //read only public SpritePartInfo[] SpriteParts = new SpritePartInfo[1]; };\npublic class MultiSpriteCharacter : MonoBehaviour {\npublic enum eState\r{\rDEFAULT = 0,\rMOVE_TOP,\rMOVE_BOTTOM,\rMOVE_LEFT,\rMOVE_RIGHT,\r};\rpublic eState State = eState.DEFAULT;\rstatic char[] Separator = {'#'};\rpublic string MainSpriteName = \u0026quot;\u0026quot;; public SpriteSetForPart[] SpriteSet = null;\rpublic AnimPartInfo[] AnimPartDesc = new AnimPartInfo[1];\rvoid OnValidate()\r{\rUpdateParts();\r}\rvoid Start () {\rUpdateParts();\r}\rpublic void SetState(eState state)\r{\rState = state;\rUpdateParts();\r}\rvoid UpdateParts()\r{\rbool error = false;\rUnityEngine.Object[] sprites = Resources.LoadAll(MainSpriteName) as UnityEngine.Object[];\rif(sprites == null || sprites.GetLength(0) == 0) {\rerror = true;\r}\rint i = 0;\rforeach(var part in AnimPartDesc)\r{\rif(part != null)\r{\rpart.StateInfo = ((eState)i).ToString();\rif(error)\r{\rpart.StateInfo = \u0026quot;ERROR\u0026quot;;\rcontinue;\r}\r}\ri++;\r}\rif((int)State \u0026lt; AnimPartDesc.GetLength(0)) { AnimPartInfo part = AnimPartDesc[(int)State]; if(part.SpriteParts != null) { foreach(var spritePart in part.SpriteParts) { if(spritePart.Part == null) { continue; } UnityEngine.Sprite spr = null; //process '#' symbol SpriteSetForPart spriteSetForPart = System.Array.Find(SpriteSet, s =\u0026gt; s.Part.name == spritePart.Part.name) as SpriteSetForPart;\rif(spriteSetForPart != null)\r{\rint spriteSetID = spriteSetForPart.CurrSpriteID;\rstring spriteName = spritePart.SpriteName;\rstring[] splitSpriteNames = spriteName.Split(Separator);\rbool is_two_part_sprite = splitSpriteNames.GetLength(0) \u0026gt; 1;\rif(is_two_part_sprite) {\rspriteName = splitSpriteNames[0] + spriteSetID + splitSpriteNames[1];\r}\relse {\rspriteName = splitSpriteNames[0] + spriteSetID;\r}\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spriteName) as UnityEngine.Sprite;\rif(spr == null)\r{\rif(is_two_part_sprite) {\rspriteName = splitSpriteNames[0] + splitSpriteNames[1];\r}\relse {\rspriteName = splitSpriteNames[0];\r}\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spriteName) as UnityEngine.Sprite;\r}\r}\relse\r{\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spritePart.SpriteName) as UnityEngine.Sprite;\r}\rif(spr != null)\r{\rspritePart.Part.GetComponent().sprite = spr;\r}\rspritePart.Part.localScale = spritePart.scale;\r}\r}\r}\r}\r}\nСкрипт случайной кастомизации\rЯ использую этот скрипт для случайного изменения вида персонажа\rusing UnityEngine;\rusing System.Collections;\rpublic class RandomCustomizator : MonoBehaviour {\nColor32[] SkinColorSet = {\rnew Color32(226, 200, 173, 255),\rnew Color32(114, 86, 65, 255),\rnew Color32(204, 179, 138, 255),\rnew Color32(237, 220, 204, 255),\rnew Color32(220, 171, 141, 255),\rnew Color32(253, 180, 155, 255)\r};\rvoid OnTriggerEnter2D(Collider2D obj)\r{\rMultiSpriteCharacter msc = obj.GetComponent();\rmsc.SpriteSet[0].CurrSpriteID = Random.Range(0, 5); //change hairdress\rCharacter chr = obj.GetComponent();\rchr.HairColor = GetRandomColor();\rchr.SkinColor = SkinColorSet[(int)Random.Range(0, SkinColorSet.GetLength(0))];\rchr.HandColor = chr.SkinColor;\rchr.SkirtColor = GetRandomColor();\rchr.PaintPlayer();\r}\rColor GetRandomColor()\r{\rVector3 color = new Vector3(Random.Range(0, 1.0f), Random.Range(0, 1.0f), Random.Range(0, 1.0f));\rcolor.Normalize();\rreturn new Color(color.x, color.y, color.z, 1.0f);\r}\r} Автор: Сергей Тарабан\nПочитать по теме\r2D игра. Часть 1. Создание и раскраска 2D персонажа используя шейдер маски\rДиалог выбора цвета для Unity\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Project Anarchy vs Unity 3D. Сравнение двух игровых движков\rКватернионы — для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/2d-igra-chast-2-multisprajtovyj-2d-personazh-s-neskolkimi-sostojanijami/","section":"staraban","tags":["unity @ru"],"title":"2D Игра. Часть 2. Мультиспрайтовый 2D персонаж с несколькими состояниями"},{"body":"In this video tutorial I will talk about 2D character, combined with random sprites sets and which has several states, like walk, idle etc. This character can consist of a lot of different sprite sets and change them dynamically, which allows as to create a lot of different characters using same animation and movement logic.\nAuthor: Sergey Taraban\n:ad:\rPart 1. Character creating and tinting\nI have a girl and a boy characters. Both of them have several heads with different haircuts. These characters has five states: idle, walk top, walk bottom, walk left and walk right. I need to change these states when move character in some direction.\nFor this I write a very useful script for dynamic state changing and simplifying working with different sprites for same character.\nTutorial plan:\nProblem overview. Girl and boy sprites\rSetuping and using script for simple state changing\rAdding sprite set changing feature (different haircuts)\rGeneration of random characters\rMultiSpriteCharacter script\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing System.Collections;\rusing System.Linq;\r[System.Serializable] public class SpritePartInfo { public Transform Part; public string SpriteName; public Vector3 scale = Vector3.one; }\n[System.Serializable] public class SpriteSetForPart { public Transform Part; public int CurrSpriteID = -1; }\n[System.Serializable] public class AnimPartInfo { public string StateInfo; //read only public SpritePartInfo[] SpriteParts = new SpritePartInfo[1]; };\npublic class MultiSpriteCharacter : MonoBehaviour {\npublic enum eState\r{\rDEFAULT = 0,\rMOVE_TOP,\rMOVE_BOTTOM,\rMOVE_LEFT,\rMOVE_RIGHT,\r};\rpublic eState State = eState.DEFAULT;\rstatic char[] Separator = {'#'};\rpublic string MainSpriteName = \u0026quot;\u0026quot;; public SpriteSetForPart[] SpriteSet = null;\rpublic AnimPartInfo[] AnimPartDesc = new AnimPartInfo[1];\rvoid OnValidate()\r{\rUpdateParts();\r}\rvoid Start () {\rUpdateParts();\r}\rpublic void SetState(eState state)\r{\rState = state;\rUpdateParts();\r}\rvoid UpdateParts()\r{\rbool error = false;\rUnityEngine.Object[] sprites = Resources.LoadAll(MainSpriteName) as UnityEngine.Object[];\rif(sprites == null || sprites.GetLength(0) == 0) {\rerror = true;\r}\rint i = 0;\rforeach(var part in AnimPartDesc)\r{\rif(part != null)\r{\rpart.StateInfo = ((eState)i).ToString();\rif(error)\r{\rpart.StateInfo = \u0026quot;ERROR\u0026quot;;\rcontinue;\r}\r}\ri++;\r}\rif((int)State \u0026lt; AnimPartDesc.GetLength(0)) { AnimPartInfo part = AnimPartDesc[(int)State]; if(part.SpriteParts != null) { foreach(var spritePart in part.SpriteParts) { if(spritePart.Part == null) { continue; } UnityEngine.Sprite spr = null; //process '#' symbol SpriteSetForPart spriteSetForPart = System.Array.Find(SpriteSet, s =\u0026gt; s.Part.name == spritePart.Part.name) as SpriteSetForPart;\rif(spriteSetForPart != null)\r{\rint spriteSetID = spriteSetForPart.CurrSpriteID;\rstring spriteName = spritePart.SpriteName;\rstring[] splitSpriteNames = spriteName.Split(Separator);\rbool is_two_part_sprite = splitSpriteNames.GetLength(0) \u0026gt; 1;\rif(is_two_part_sprite) {\rspriteName = splitSpriteNames[0] + spriteSetID + splitSpriteNames[1];\r}\relse {\rspriteName = splitSpriteNames[0] + spriteSetID;\r}\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spriteName) as UnityEngine.Sprite;\rif(spr == null)\r{\rif(is_two_part_sprite) {\rspriteName = splitSpriteNames[0] + splitSpriteNames[1];\r}\relse {\rspriteName = splitSpriteNames[0];\r}\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spriteName) as UnityEngine.Sprite;\r}\r}\relse\r{\rspr = System.Array.Find(sprites, s =\u0026gt; s.name == spritePart.SpriteName) as UnityEngine.Sprite;\r}\rif(spr != null)\r{\rspritePart.Part.GetComponent().sprite = spr;\r}\rspritePart.Part.localScale = spritePart.scale;\r}\r}\r}\r}\r}\nRandom customizator script\rI use this script for change character appearance in random way.\rusing UnityEngine;\rusing System.Collections;\rpublic class RandomCustomizator : MonoBehaviour {\nColor32[] SkinColorSet = {\rnew Color32(226, 200, 173, 255),\rnew Color32(114, 86, 65, 255),\rnew Color32(204, 179, 138, 255),\rnew Color32(237, 220, 204, 255),\rnew Color32(220, 171, 141, 255),\rnew Color32(253, 180, 155, 255)\r};\rvoid OnTriggerEnter2D(Collider2D obj)\r{\rMultiSpriteCharacter msc = obj.GetComponent();\rmsc.SpriteSet[0].CurrSpriteID = Random.Range(0, 5); //change hairdress\rCharacter chr = obj.GetComponent();\rchr.HairColor = GetRandomColor();\rchr.SkinColor = SkinColorSet[(int)Random.Range(0, SkinColorSet.GetLength(0))];\rchr.HandColor = chr.SkinColor;\rchr.SkirtColor = GetRandomColor();\rchr.PaintPlayer();\r}\rColor GetRandomColor()\r{\rVector3 color = new Vector3(Random.Range(0, 1.0f), Random.Range(0, 1.0f), Random.Range(0, 1.0f));\rcolor.Normalize();\rreturn new Color(color.x, color.y, color.z, 1.0f);\r}\r} Author: Sergey Taraban\nRelated posts\r2D Game Tutorial. Part 1. Character creating and tinting\rColor picker for Unity\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\r","link":"https://staraban.com/2d-game-tutorial-part-2-2d-character-with-several-states-and-dynamic-sprite-changing/","section":"staraban","tags":["Unity","tutorial"],"title":"2D Game Tutorial. Part 2. 2D character with several states and dynamic sprite changing"},{"body":"","link":"https://staraban.com/tags/tutorial/","section":"tags","tags":null,"title":"Tutorial"},{"body":"","link":"https://staraban.com/tags/overview/","section":"tags","tags":null,"title":"Overview"},{"body":"This article is a brief overview of the new Unreal Engine 4. I\u0026rsquo;m going to describe a basic features, cons and pros of the new game engine.\nAuthor: Sergey Taraban\n:ad:\rRecently in GDC 2014 new engine from Epic Games was presented - Unreal Engine 4. You can get UE4 for 19€ per month for Europe region and 19$ per month for all other world. Moreover you get full source code access via github. By the way, if you pay only first month and stop pay, you still will have access to game engine, but without updates and access to asset store.\nUsing UE4 you can build for: Windows, Mac, iOS and Android. Support of HTML5, Linux and Steam Machine was announced in future versions.\nEngine are completely differ from UDK and Unreal Engine 3. Unreal Engine 4 are looks differ, has a lot of new features and gets rid of some disadvantages. Now it is more looks like a new engine which is more friendly for developer.\nNew features and differences from Unreal Engine 3:\nNew user interface\rSimple projects creating and management\rWhiting code using С++ (minimum Visual Studio 2013 or XCode 5 required)\rNo more UnrealScript\rScaleform not included in Unreal Engine 4. A simple GUI system used. You can buy Scaleform separately and integrate it into engine (I don't check it)\rBlueprint system for writing game logic. (In detail)\rCompiling С++ code on the fly (Hot Reload system. You don't need to stop game if you need to change and recompile some code)\rFull source code access\rNew material editor, cut scene editor and animation editor/li\u003e\rTerrain redactor was improved. New terrain LOD system for huge terrains\rAI system for bots\rFull DirectX 11 support\rparticle end visual effect editor - Cascade\rImproved postprocessing effects\rUseful links:\rDocumentation Unreal Engine 4\rVideo lessons and tutorials for Unreal Engine 4\rWIKI\rGithub projects\rUnreal Engine 4 EULA (License) System requirements:\rDesktop PC or Mac\rWindows 7 64-bit or Mac OS X 10.9.2 or later\rQuad-core Intel or AMD processor, 2.5 GHz or faster\rNVIDIA GeForce 470 GTX or AMD Radeon 6870 HD series card or higher\r8 GB RAM\rThe first acquaintance\rAfter registration and payment you download a launcher. It verify your license and after that downloads and install engine sdk on your computer. Launcher has several insets:\rNews\rCommunity\rLearning\rMarketplace - something like Unity Store\rUnrealengine 4 launcher\rEngine size is about 7 Gb. Furthermore, you also can download Content Examples - 3 Gb. It is project with a lot of demo scenes.\nLaunch button run editor. First window is Project Browser (like Project Wizard in Unity). Here you can create new project or open resents. You also can create new project directly in editor.\nProject browser\nEditor window is consisted of several standard windows: Scene Outliner, Content Browser, Details, Modes. You can add other elements using Windows menu.\nEditor window\nWhen you double press on some object a special editor will appear.\nBlueprints (designs)\rIt is a one of the major features of UE4.\rBlueprint is a main game logical object. It is like prefab in Unity. It is a bundle of components with script on it. For editing this bundle Blueprint Editor is using. Behaviour logic of blueprint is wrote using С++ class or graph editor. You can use both.\nEvery blueprint has parent class. This class is C++ class. You can create your own C++ classes derivating from defaults (like Actor.h) and then use this custom classes in blueprint as parent class. This is how it works.\nMore about blueprint feature\nBlueprints editor\nTest С++ project\rI have created test TP_TopDown C++ project. Visual Studio will been opened automatically. If you want open this project in editor you need to compile it first in Visual Studio. Editor will been opened automatically after build complete.\rUnreal Engine 4 editor has excellent synchronization with Visual Studio. You can use breakpoints during game play in editor. Intellisense also works fine.\nС++ project\nBuild from source codes\rAs I mention before, you have access to source code of Unreal Engine 4 in github and you can build it.\rYou can download in here if you have access: https://github.com/EpicGames/UnrealEngine/releases For build on Windows you need Visual Studio 2013 and June 2010 DirectX runtime\nGenerate project using GenerateProjectFiles.bat file in root folder. Then open project, chose Development Editor configuration and Win64 target platform. Build UE4 project only (right click on it and select Build from context menu)\nBuild take 20 min time. After build you can run RegisterShellCommands.bat with admin rights for connect unreal project files with compiled editor.\nConclusions\rUnreal Engine 4 looks promising. In fact, for $ 19 you get the high-end engine with more functions than Unity and open source. Unreal has created a new ecosystem with a large number of training material, content store and developer community. The ability to write code using both native and visually editor.\rNow, about the cons. The engine is still more professional and this is why it is more difficult to understand than Unity. Content store is very primitive. Also, there is no editor for Linux and there are only four plarform for distribution. Scaleform is not included in the Unreal Engine 4.\nAuthor: Sergey Taraban\nRelated links\rUnreal Engine 4 key consepts of C++ programming and comparison with Unity\rUnity Fog of War. Part 3. Static and dynamic fog of war\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war tutorial. Part 1 (video tutorial)\rUnity fog of war tutorial. Part 2 (video tutorial)\rQuaternions support in irrlicht engine\r","link":"https://staraban.com/undeal-engine-4-overview-features-cons-and-pros/","section":"staraban","tags":["overview","unreal engine @en"],"title":"Unreal Engine 4 overview. Features, cons and pros"},{"body":"Payment transaction failed.\rtry again\r","link":"https://staraban.com/donation-failed/","section":"staraban","tags":[],"title":"donation-failed"},{"body":"Payment transaction was processed success. Greate thanks for your contribution!\r","link":"https://staraban.com/donation-success/","section":"staraban","tags":[],"title":"donation-success"},{"body":"Эта статья - краткий обзор и первое впечатление от нового движка Unreal Engine 4. Я опишу основные возможности, а также достоинства и недостатки нового игрового движка.\nАвтор: Сергей Тарабан\n:ad:\rВчера на GDC 2014 был представлен новый движок компании Epic Games - Unreal Engine 4. Движок можно получить по подписке за 19€ в месяц для европейского региона и за 19$ для остального мира. Кроме того, вы получаете доступ к полным исходным кодам движка. Стоит отметить, что, если вы оплатите только первый месяц подписки, вы лишаетесь только возможности получать обновления, а уже установленным ранее версией можно пользоваться сколько угодно (так сказано в лицензии).\nДоступна сборка под Windows, Mac, iOS и Android. Заявлена поддержка HTML5, Linux и Steam Mashine в будущих версиях.\nДвижок совсем не похож на UDK или Unreal Engine 3. Unreal Engine 4 визуально выглядит другим, имеет множество новых возможностей и избавился от некоторых недостатков предыдущих движков. Перед нами действительно новый движок, который стал более удобным и дружественным к пользователю.\nНовые возможности и основные отличия от Unreal Engine 3:\nНовый интерфейс\rЛегкое создание новых проектов и менеджмент существующих\rМожно писать на С++ (нужна минимум Visual Studio 2013 или XCode 5)\rОтказ от UnrealScript\rScaleform не входит в Unreal Engine 4. Используется свой простой GUI. Scaleform можно купить и подключить отдельно (как это сделать пока неясно)\rСистема Blueprint для написания игровой логики. (Подробнее)\rКомпиляция С++ кода на лету во время игры (Hot Reload - не нужно ставить на паузу или пересобирать приложение)\rПолный доступ к исходным кодам\rНовый редактор материалов, анимации, редактор кат-сцен\rУлучшенный редактор ландшафтов. Новая система динамической детализации терейна позволяет создавать очень больше ландшафты\rВстроенный AI (искусственный интеллект)\rПоддержка DirectX 11\rРедактор частиц и визуальных эффектов Cascade\rУлучшенный постпроцессинг\rПолезные ссылки:\rДокументация по Unreal Engine 4\rВидео уроки по Unreal Engine 4\rWIKI\rПроекты Unreal на github\rЛицензия на Unreal Engine 4 (EULA) Системные требования:\rDesktop PC or Mac\rWindows 7 64-bit or Mac OS X 10.9.2 or later\rQuad-core Intel or AMD processor, 2.5 GHz or faster\rNVIDIA GeForce 470 GTX or AMD Radeon 6870 HD series card or higher\r8 GB RAM\rПервое знакомство\rПосле регистрации и оплаты вы выкачиваете лаунчер. Он верифицирует вашу лицензию и после этого выкачивает и устанавливает сам движок. В нем есть вкладки\rНовости\rФорум\rОбучение\rМагазин - скромный аналог Unity Store\rUnrealengine 4 launcher\rДвижок весит порядка 7 Gb. Кроме того, вы можете еще выкачать Content Examples размером 3 Gb. Это проект с кучей сцен для демонстрации возможностей движка.\nСбоку находится кнопку Launch, которая запускает редактор. При запуске редактора по умолчанию открывается окно Project Browser (как Project Wizard в Unity). Тут можно создать новый проект или открыть старый. Новый проект можно потом создать через редактор.\nProject browser\nОкно редактора состоит из стандартных окон - Содержимое сцены (Scene Outliner), Браузер контента (Content Browser), Окно свойств объекта (Details), Режимы работы (Modes). Другие элементы можно добавить через меню Windows.\nОкно редактора\nПри двойном клике на материал или модель откроется свой специализированный редактор для этого объекта.\nЧертежи (Blueprints)\rОсновным объектом игровой логики является элемент Blueprint - чертеж. Это нечто вроде Prefab в Unity. По своей сути - это сборка из компонентов, которая образует сложный объект игрового мира. Редактировать такую сборку можно через Редактор Чертежей (Blueprint Editor). Поведение сборки управляет С++ класс и редактор графов. Вместе они дополняют друг друга.\rИгровая логика а С++ пишется путем наследования от стандартных классов. В свою очередь каждый blueprint наследуется от С++ класса, который называется родительским классом чертежа. Этот класс может быть как стандартным, так и пользовательским.\nРедактор чертежей\nТестовый С++ проект\rЯ создал тестовый проект TP_TopDown C++. При это будет создан проект для Visual Studio, который откроется автоматически после создания. Чтобы открыть его в редакторе его нужно сначала собрать в студии. Редактор откроется сам после сборки проекта.\rРедактор Unreal Engine 4 отлично синхронизируется с Visual Studio. При запуске сборки через студию проект запустится в редакторе, а в студии можно ставить бряки и отлаживаться. Intelicense тоже отлично работает.\nС++ project\nСборка из исходных кодов\rКак уже говорилось, исходные коды Unreal Engine 4 доступны на github и их можно собрать.\rИсходные коды и зависимости можно скачать здесь при наличии у вас доступа: https://github.com/EpicGames/UnrealEngine/releases Для сборки под Windows нужны Visual Studio 2013 и June 2010 DirectX runtime\nДалее генерим проект используя GenerateProjectFiles.bat файл в корне. Затем открываем проект студией, выбираем конфигурацию Development Editor и целевую платформу Win64. Правой клавишей на UE4 и билд выбранного проекта.\nБилд занимает примерно 20 минут. После успешной сборки можно запустить файл RegisterShellCommands.bat с правами администратора чтобы связать файлы проекта с редактором.\nЗаключение\rUnreal Engine 4 выглядит многообещающе. Фактически за 19$ мы получаем движок с большим функционалом чем Unity и с открытыми исходными кодами. Кроме того для него была создана новая экосистема с большим числом обучающего материала, магазином контента, форумом и сообществом разработчиков. Возможность писать как на нативном коде, так и на визуальном редакторе.\rТеперь про минусы и недостатки. Движок все таки более профессиональный и от этого более сложен в освоении, чем Unity. Магазин контента увы пока очень примитивный. Также нет редактора под Linux и платформ для сборки пока всего четыре. Scaleform не входит в Unreal Engine 4.\nАвтор: Сергей Тарабан\nПочитать по теме\rВведние в с++ разработку на Unreal Engine 4. Ключевые моменты и сравнение с Unity 3D\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков\rИмплементация DLC системы в Unity\rДелаем туман войны в Unity. Видеоурок.\r","link":"https://staraban.com/unreal-engine-4-obzor-novogo-igrovogo-dvizhka-ot-unreal-technology/","section":"staraban","tags":["unreal engine","обзор"],"title":"Unreal Engine 4. Обзор нового игрового движка от Epic Games"},{"body":"Полное прохождение игры Wasteland 2 и краткий обзор (последняя бета 39080 от 18.04.14). p.s. Вышла новая бета 42098. Скоро добавлю прохождение.\nАвтор: Сергей Тарабан\n:ad:\rПерейти к прохождению\nПри покупке игры через Стим вы получите оригинальную игру Wasteland 1988 года. Именно с нее черпали вдохновение создатели Fallout. Единственным минусом будет то, что игра пока не локализована на русский язык. В этой статье я переведу все основные сюжетные моменты чтобы вам было понятно как играть.\nБаги и глюки\rИгра пока еще на стадии беты, поэтому могут быть разные глюки. Самые критичные из них:\rЧерные экран при старте, глюки с мышкой (похоже проблема с полноэкранным режимом). Лечится комбинацией Shift+Enter или Ctrl+Enter. Далее в настройках явно ставите полноэкранный режим.\rЕсть патроны к оружию, но игрок их не видит (говорит нет патронов). Уберите оружие из рук в инвентарь и возьмите снова.\rКакой то квест может не засчитаться\rИгровой процесс\rИгровая механика и стиль Wasteland 2 в общем и целом очень похожа на механику Fallout, Fallout 2 и Fallout Tactics. Оригинальность в том, что в игре другая систему диалогов, новые умения и характеристики, а также немного изменена механика игры. В остальном - это тот же классический Fallout с современной графикой, другим сюжетом и немного переработанным геймплеем.\rДействия игры происходят в недалеком будущем после ядерной войны. Весь мир - это радиоактивная пустыня. Кое где остались небольшие поселения выживших людей.\nВ начале игры можно создать персонажа или выбрать готового.\nХарактеристики героя делятся на Атрибуты, Умения, Личность и Внешний вид.\nКакие скилы лучше качать\rНужные вашему герою скилы - Лидерство, Взлом, Ремонт тостеров, Энерго оружие.\rПочти в начале игры у вас будут напарники со скилами: Медик, Хирург, Ремонт, Компьютер, Грубая сила, Оружейник\nИз боевых у вас будут: пару с умением штурмовые винтовки, 1 снайпер, 1 с дробовиком, 1 с пистолетами и тяжелым оружием\nАтрибуты игрока\rОкно атрибутов игрока\rКоординация. Рейджер с хорошей координацией обладает грациозностью, мягкостью прикосновений и хорошими двигательными умениями. Влияет на способность избегать ловушек и атак, вскрытие замков, а также улучшает прицеливание.\n++ к очкам действия во время боя ++ к вероятности критического удара\nТребуется для некоторого оружия дальнего боя\nУдача. Некоторые рейнджеры имеют преимущество от природы. Пули пролетают мимо них, их атаки всегда находят слабое место противника и они находят больше вещей чем все остальные.\n++ к вероятности критического удара + к шансу критического удара в рукопашном бою + к шансу увернуться + к шансу получить дополнительные CON за уровень (получить больше очков жизни) + к шансу получить дополнительные очки действия за ход (во время боя)\nОсведомлённость. Рейнджер с высокой осведомленностью замечает каждую деталь окружающего его мира. Его трудно застать врасплох или обнаружить в засаде, и он часто может быть на шаг впереди своих врагов.\n+++ инициатива в бою (скорость перезарядки очков действия во время боя) ++ к шансу увернуться ++ к шансу критического удара в рукопашном бою\nСила. Рейнджер с высокой силой способен тяжело бить, нести больше вещей, получать больше повреждений, восстанавливаться быстрее после тяжелых травм и использовать тяжелое оружие.\n++ максимальное число жизней за уровень ( CON за уровень ) + к базовому урону в рукопашном бою ++ к переносимому весу ++ стартовому количеству жизней + числу очков действия Требуется для некоторого оружия ближнего боя\nСкорость - это не просто как быстро рейнджер может бегать. Это еще и его рефлексы и время реакции, которые влияют на его инициативу в бою. Чем больше скорость, тем раньше рейнджер может реагировать.\n+++ скорость боя (сколько расходуется очков действия на то или иное действие во время боя) ++ инициатива в бою (скорость перезарядки очков действия во время боя)\nчисло очков действия Интеллект. Интеллект позволяет рейнджеру изучать и перерабатывать информацию эффективно, давая ему ранний доступ к широкому спектру умений и способность быстро овладеть ими.\n++ число очков выживания, которые получает персонаж ++ способность читать книги высокого уровня\nчисло очков действия Требуется для некоторых продвинутых умений\nХаризма - соединяющая сила личности рейнджера и его восприятия в обществе. Люди будут реагировать более дружелюбно на рейнджера с высокой харизмой и могут говорить о вещах, о которых в другой ситуации они бы промолчали.\nУмения игрока\rУмения игрока\rУмений больше чем в Fallout. Они делятся на три категории- боевые, интеллектуальные и общие.\nК боевым умениям относятся:\nштурмовое оружие\rколющее оружие\rтупое оружие\rкулаки или кастеты\rэнерго оружие\rпистолеты\rтяжелое оружие\rдробовики\rснайперское оружие\rавтоматическое оружие\rУлучшение этих навыков влияет на прицельность стрельбы, вероятность критического удара и урон.\rК интеллектуальным умениям относятся:\nобезвреживание ловушек\rработа с компьютерами\rподрывник\rполевой медик - добавление ХП (жизней) используя разные медикаменты\rвзлом замков\rвзлом сейфов - отдельный навык для сейфов\rремонт\rхирург - воскрешение умершего участника команды и лечение отравлений\rремонт тостеров - умение добавлено, похоже, ради прикола. Можно найти на локации поломанный тостер, с которого может выпасть что то полезное + опыт при удачном ремонте.\rК общим умениям относятся:\rобщение с животными (дословно \"животный шептун или сплетник\") - недоступно в бете\rторговец (бартер из Fallout) - снижает цены при торговле\rгрубая сила - умение ломать и разрушать неодушевленные предметы\rгопник - добиваться своего используя угрозы\rподлиза - добиваться своего используя подлизывание\rлидер (лидерство) - не позволяет вашим союзникам терять контроль во время боя (Lost Control), т.е. действовать по своему усмотрению\rпутешественник (выживальщик) - умение избегать случайных встреч\rвосприятие - умение находить интересные места на пустошах во время путешествий\rхитрец - добиваться своего используя свои знания\rюго западный фольклор - недоступно в бете\rоружейник - умеет обслуживание, ремонтировать и апгрейд оружия\rсекретное умение - недоступно в бете\rЛичность и внешний вид\rНастройки личности\rТут можно выбрать:\nПол муж/жен\rИмя и возраст от 16 до 99\rРелигиозные взгляды: атеист, буддист, индус, абориген(видимо местная религия), еврей, мормон, мусульманин, сикх или ничего не указать\rМарка сигарет которую вы курите: Bones, Coffin Nails, Nico-Pops, Red Rooster, Styx или ничего не указать. Если указать, у вас появится пачка сигарет этой марки. Персонаж может их курить\rНациональность: Американец, Китаец, Мексиканец, Индеец или Русский\rНиже можно написать свою биографию\rВнешний вид игрока\rДалее идет окно кастомизаци персонажа. Тут все стандартно - цвет кожи, прическа и т.д. Лучше выбрать что то случайное.\nПрохождение\rКарта мира в конце статьи.\rЦитадель Рейнджеров пустыни (Rangers Citadel)\rВход в цитадель\rВы новобранец в отряде рейнджеров пустыни. Первым с кем вы говорите - это Генерал Варгас. Он сообщает вам, что рейнджер Эйс был убит на задании. На его похоронах вы сейчас находитесь. Генерал расскажет вам, что Эйс говорил о каком то странном сигнале перед тем как был убит. Вам нужно выяснить почему его убили. Для этого надо найти его дневник. Также нужно найти \u0026ldquo;repeater units\u0026rdquo;(это детали для радиопередатчиков) которые он доставлял. Эйс также говорил, что в послании было сказано что то про людей и роботов. И их объединение в одно целое.\nГенерал Варгас\nЕсли вы справитесь - то пройдете экзамен на рейнджера и вас пустят за \u0026ldquo;большую железную дверь\u0026rdquo;.\nТут можно взять лопату. Ею можно выкапывать могилы. Свежую могилу Эйса на глазах у всех лучше не копать.\nЕще важный момент с радио. По радио вы должны отчитываться во время или после окончания миссии.\nИнвентарь и меню персонажа\nТолько так вам засчитают миссию. И если вы получили уровень, распределить очки навыков вы можете только закончив миссию после общения по радио.\nПоговорите со всеми. Зайдите к торговцу.\nТакже нужно обязательно взять себе напарницу Анжелу Дес возле выхода с локации. Без нее вы не сможете пройти задание, т.к. она 14-го уровня, а вы первого. Она сама вам предложит помощь. Во вторую руку дайте ей гаечный ключ. Вообще для экономии патронов можете использовать её как бойца ближнего боя.\nНасчет боя не забывайте что у персонажа есть положение сидя и стоя. Сидя точность будет выше.\nПутешествие по пустыне к радио вышке\rВыбираете кратчайший путь. У вас есть запас воды, который будет расходоваться. После того как вы пройдете первую миссию, во время пути вы будете находить оазисы, где сможете пополнить запас воды. Также с гор радиус обзора лучше.\rТакже на карет есть радиоактивные зоны. Их лучше обходить, иначе вы будете терять жизни. Облучится в игре нельзя, возможно эту фичу добавят позже.\nРадио вышка\nРадио башня (Radio tower)\rТут нужно идти по кровавым следам. По пути исследуйте всю локацию. На локации также есть тостер, который можно починить и скрытый сундук в кустах.\rВ итоге придете к лагерю бандитов, которые охраняют радио вышку. Им можно или заплатить, или вступить с ними в бой. От них выше, в пещере, сразитесь с гигантской жабой. Там же вы найдете деталь робота (металлическую ногу) и вещи Эйса: его записи и два repeater units. Их надо вставить в радио вышки в локациях Highpool и Ag Center. Деталь робота надо отвести в Цитадель для изучения. Также в записях Эйса есть несколько имен, а на его звезде рейнджера что то нацарапано. В общем, вокруг загадки и тайны, которые надо распутать.\nHighpool и Ag Center расположены на юге. Вы также можете поехать на север мимо радиоактивных полей (нужно объехать их с востока) в Лагерь Рейл Норманд, но там вам понадобится топор или что то другое чтобы повалить дерево.\nAg Center\rAg Center это большая ферма и завод по производству удобрений. Расположен прямо на юге. По время путешествия к нему вы получите сигнал бедствия из городка Highpool. На него напали бандиты.\rСразу стоит сказать, что для прохождения тут нужен будет навык взлом замков 2 и выше\nСмертельно опасные поля (Killing Fields)\nПрибыв на место, вы обнаружите что по территории разгуливают мутировавшие животные и насекомые, и растения выросли до гигантских размеров. Люди укрылись в помещении завода. Сначала стоит прогуляться по карте. Тут вы найдете много закрытых дверей для которых понадобиться навык взлома 2 и выше. Я нашел одну могилу (вдоль ЖД путей) и два сейфа. Первый находится в закрытой двери на тором этаже какого то здания, второй на ЖД путях рядом с вагоном.\nПосле зачистки карты идем к людям в центральный комплекс. Рядом с дверью будет мешок со спорами. Выстрелите в него на расстоянии, чтобы на вас не попали ядовитые споры. Можно также подбедать и потом быстро отбежать, и он сам взорвется. Через переговорное устройство девушка сообщается, что растения сошли с ума и откроет вам вход в центральный комплекс.\nЦентральный или главный комплекс (Central Complex)\nТут вы встретите Кетти и торговца Мэтта. Кетти говорит, что они ждали вас 11 часов, спасаясь от помидоров-убий и от кучи других мутировавших овощей. Также появились мешки со спорами, которые заражают людей и превращают их в подобие зомби. Они даст вам задание собрать 10 фрагментов спор.\nДалее она даст вам два основных задания:\nПомочь её коллеге в поиске лекарства от заражения и спасти таким образом её людей\rВыключить систему орошения чтобы остановить распространение спор и дальнейшие мутации растений\rМожно также спросить её про радио вышку, и если у вас высокий навык Подлизы, то вы узнаете что попасть туда возможно сможете только если поможете с проблемой мутировавших растений. Пусть туда блокирован ветками и побегами.\rПоговорите с Мэттом-торговцем. У него вы узнаете детали из жизни Эйса. Он даст вам наводку на фермера, который знал Эйса. Этого фермера надо спасти. Также он скажет вам, что Эйс общался с каким то наемником. И детали можно узнать у этого фермера, если он еще жив. Искать фермера надо на ферме грибов.\nДальше Кетти откроет вам три двери. Центральная дверь ведет к компьютеру, та что слева - к вышке связи, а правая - к коллеге Кейти и фермерским помещениям фабрики. Идем в ту что справа от входа.\nТут очень важно купить у торговца как можно больше препаратов для лечения (которые восстанавливают жизни), т.к. их вы дальше почти нигде не найдете.\nЗаходим в боковой кабинет и берем себе нового напарника - девушку-ученого. У нее прокачан талант медика, хирурга и пистолетов. Идем дальше, убиваем зараженного зомби. Далее выходим в большой зал, где на четырех фермеров нападают зомби. Убиваем врагов, убиваем споры и собираем лут. Проходим дальше и выходим в комнату с люком. В люк не идем, возвращаемся назад в комнату управления и отдаем собранные споры Кейти. Они удалится в кабинет делать лекарство вместе с Мэттом-торговцем. У Мэтт-а больше нельзя ничего купить.\nДальше идем в люк по центру и спускаемся вниз.\nГлавное подвальное помещение (Central Basement) Central Basement\nТам будет компьютер. Он открывает одну из трех двери (воздушных шлюзов) на выбор:\nДверь S (Airlock S) - ведер к ферме грибов, где вам надо достать компонент для лекарства и найти выживших\rДверь W (Airlock W) - ведет к генератору, который отвечает за вентиляцию. Его надо замедлить чтобы не дать распространятся инфекции.\rДверь E (Airlock E) - ведет к системе ирригации, которую надо остановить чтобы не дать распространятся инфекции\rЯ решил пойти на ферму грибов (Дверь S).\rТут надо все зачистить. Будет комната, где вы найдете выжившего Скинера. Он попросит вас вывести его. Тут вы также находите первое энерго оружие - Ионное Копье (Ion Lance). Также в этой же комнате возьмите квестовый предмет (какое то вещество для распыление), который нужен для лекарства. Тут все. Можете еще проти по пещере, поубивать монстров. Там будут ящички и сейфы.\nГрибная ферма\nВозвращаемся тем же путем назад. Можно пойти к Кейти, отдать ей квестовый предмет, она сделает лекарство которым вылечит Мэтта. Теперь с ним опять можно торговать.\nДальше идем в Дерь W к генератору. Тут вас ждет коридор с отравленным воздухом. Надо быстро его пробежать и укрыться в боковой двери справа (в операционной). Дальше берем героя с навыком взлома 3 и выше и взламываем дверь в отравленном коридоре. Как только он взломает её, проходим в новую часть коридора. Тут два варианта - или починить робота (ремонт 2+), или проломить стену сбоку. Ломаем стену, вступаем в бой с зомби и гусеницами. Дальше ломаем стену опять и включаем вентилятор через панель в стене. Воздух стал чистым, выключаем вентилятор, проходим под ним и поднимаемся на поверхность.\nЗападные поля (West Fields) Тут врагов почти не будет. Обыскиваем все. Встречаем дедушку-снайпера, который стреляет по зайцам. Он пойдет с вам до выхода из локации.\nВам нужно попасть в большое здание слева от генератора. Для этого надо взломать дверь. Внутри вы найдете ремень. Он нужен чтобы замедлить генератор.\nДалее идете к генератору и вставляете в него ремень. Все, можно возвращаться назад тем же путем.\nГлавное подвальное помещение (Central Basement)\nТеперь идем в Дерь E.\nТут то же отравленный тоннель. Прячемся в комнату слева, затем идем дальше и ломаем замок в двери справа. Там выключаем один из вентиляторов. Это позволит нам пройти дальше. Проходим до лестницы вверх. Поднимаемся.\nВосточные поля (East Fields)\nТут огромная карта с полями и коровником. Исследуем все. Находим мальчика Питера в центре карты, спасаем его. Дальше идем к коровнику. Убиваем зайцев и идем к зданию, перед входом лежит труп который кровью написал на полу \u0026ldquo;Не верьте\u0026rdquo;.\nВнутри будет ирригационная система. Вокруг раскиданы трупы и в центре полуживой Доктор Патрик Ларсон в луже крови. Спасаем его от мух и гусениц.\nПосле разговора с ним станет ясно, что это он все подстроил. Убиваем его и взаимодействуем с системой ирригации. Миссия пройдена.\nВозвращаемся назад.\nГлавное подвальное помещение (Central Basement)\nМы оказались снова в тоннеле с отравленными газами. Зайдите в комнату слева от выхода в восточные поля. Это большой зал, заблокированный растениями. Теперь эти побеги засохли и их можно убрать. Также можете не опасаться мешков со спорами, теперь они безвредны.\nРасчистив путь зачищаем комнату. Тут будет тостер. Если его починить получите Кровавую палку, которая увы бьет хуже гаечного ключа. Доходим до компьютера и поднимаемся наверх.\nЦентральный комплекс (Central Complex)\nРадиостанция Ag Center\nИдем влево. Расчищаем растения, попадаем в комнату с радио станцией. Спасаем человека от его мутировавших кроликов. Далее вставляем repeater unit в блок управления. После диалога с Цитаделью, идем влево к закрытой двери. Ваша напарница ученый знает код и скажет, что откроет дверь с другой стороны. Ждем где то минуту, пока она откроет дверь.\nТеперь идем в комнату к Кейти (там где торговец). Она говорит что все отлично, осталось только ввести вакцину в воду, чтобы заражение не распространилось дальше. Она дает вам 5 банок с вакциной и просит добавить её в воду в Зеленом Доме. Это помещение находится по коридору в право от нее так где вы спасали четырех фермеров от зомби. Прямо вверху. Проход заблокирован растениями.\nИдя туда поговорите с Питером, которого вы спасли ранее, чтобы вам засчитался квест о его спасении. Добавив лекарство в бак, вернитесь опять к Кейти. Вот и все, дело сделано. Один только глюк, у меня не засчитался квест о спасении фермеров, хотя я их спас. Думаю исправят в релизе.\nЕдем в Highpool.\nHighpool\rМы опоздали. Город лежит в руинах, все убиты рейдерами. Наверное надо было ехать туда в начале, а потом уже в Ag Center, но неизвестно чтобы бы было тогда там.\rHighpool в руинах\nЗачищаем территорию, заходим в дом и говорим с единственным выжившим. Он дает вам координаты лагеря рейдеров, на случай если мы хотим отомстить.\nДальше поднимаемся вверх по склону к радио вышке. Она уничтожена. Докладываем на базу.\nНам говорят, что есть еще одна вышка в городе недалеко от тюрьмы под названием Демонта ( Damonta ). Его расположение неизвестно, но известно где находится локация Тюрьма. Надо ехать туда. Возможно там кто то знает где находится Damonta.\nПо пути я заехал в лагерь рейдеров и зачистил его.\nДальше вы можете либо поехать в Тюрьму, либо в Цитадель рейнджеров. Там вы можете взять новых рекрутов - 3 человека, закупиться припасами и сдать квесты. Я решил поехать в Тюрьму.\nТюрьма\rТюремная Деревня (Prison Valley)\rТюремная деревня\nТут всем заправляют Красные Скорпионы. Они переименовали себя в RSM - Милиция Красных Скорпионов, а деревню фермеров вокруг Тюрьмы переименовали в Счастливую Деревню. По сути это обычные бандиты, которые собирают со всех дань и терроризируют местное население.\nЕсли идти прямо по дороге найдете торговца. Ему надо помочь освободить телегу, которая застряла. Она стоит рядом с ним. Используем умение Грубая сила на повозку.\nВ деревне полно несчастных фермеров, у которых отобрали все. Тут можно взять квест починить колодец. Нужен навык Ремонт 1 и выше. Также один фермер попросит вас вернуть его свиней.\nТут можно найти женщину, которая попросит её убить. Если это сделать, на вас нападет её сын и его то же придется убить. Я решил не убивать её. Рядом с ней есть проход в шахту.\nИдем дальше, говорим со всеми. Встречаем отряд сборщиков налогов возле моста. За проход они требуют 100 долларов. Вы можете не заплатить. Тогда они нападут на вас. Убить их можно, хотя это и не так просто. Самое сложное это разобраться с метателем гранат. Он сидит за камнем и достать его очень сложно.\nПосле их убийства вы не сможете попасть на территории Тюрьмы на прямую через их базу и нужно будет обходить.\nНедалеко от базы Скорпионов вы можете найти дом с клетками, в которых сидят секс рабыни. Их можно освободить.\nСлева от их базы будет проход (сетчатый забор с воротами) и с небольшими турелями по бокам. Для прохода надо ввести prefered code. В деревне люди говорили вам разные варианты этого кода:\n123456789\rPREFERED\rCODE\rНи один из них не работает. На первый вариант терминал выдаст что код устарел.\rТурели можно вынести при наличии 4-5 гранат или снайпера. Турели до снайпера не достанут и их можно спокойно убить.\nПройдя внутрь вы найдете торговца, который торгует хламом. Ничего нормального он вам не продаст. Но он скажет вам где найти город Демонта ( Damonta ). Если не хочет говорить сразу погуляйте вокруг, потом поспрашивайте еще и еще. И он скажет.\nДемонта находится за редиоактивной стеной. Чтобы пройти через нее нужно найти костюм от радиации и найти проход в каньон. Это единственный проход через радиоактивную стену. Проход охраняют Сумасшедшие Монахи. С ними можно договориться чтобы вас провели.\nЧтобы найти Демонту нужно следовать вдоль восточной радиоактивной стены пока вы не услышите пение монахов по радио. В этот момент поверните на восток и пройдите через небольшую стену радиации. Но туда пока рано идти.\nПройдя дальше от торговца вы найдете стадо козлов. Рядом с ними могут быть мины и ловушки. Рядом с одним из козлов есть проход в пещеру с волками.\nПосле того как вы все обследовали можно идти в локацию Тюрьма.\nПопасть в локацию Тюрьма можно такими способами:\nПрямо через лагерь Красных Скорпионов\rОбойти лагерь справа. Для этого надо разбить забор\rИмея навык Работа с компьютерами 1 и выше можно взломать терминал управления магнитным краном. Это разблокирует еще один проход в локацию Тюрьма. В этому случае вам придется идти через пещеру с кучей врагов.\rТюрьма (Prison)\rЕсли входить через центральный вход вы окажетесь перед небольшой базой Красных Скорпионов. Её можно обойти по верху справа или по низу слева (через минное поле). Базу легко вынести, главное первым убейте гренадера (который метает гранаты).\nДальше можно зачистить пещеру слева. В ней вы окажетесь если попадете в Тюрьму третьим способом. Там много противников.\nДальше будет блок пост посерьезней, который у меня взять не получилось. Я решил поехать в Цитадель рейнджеров.\nЦитадель Рейнджеров пустыни (Rangers Citadel)\rВход в цитадель\rСразу подходим и берем трех новобранцев. Они сидят на замле прямо у выхода с локации.\nДалее идем к железным дверям. Т.к. мы справились с задачей и стали рейнджером, мы можем войти в цитадель.\nЦитадель\nЦитадель рейнджеров\nСправа от входа находится музей довоенного прошлого. Там говорим с смотрителем музея и с картографом. Отдаем звезду Эйса и завершаем квест.\nПрямо возле музея есть комната. Там доктор Эрик Тайдмеэн. Он может бесплатно лечить всю вашу команду. И у него также можно купить препараты для лечения.\nДоктор умирает от неизлечимой болезни. Он даст вам два задания найти для него лекарство. Для этого надо найти деревню под названием Деревня Дарвина (Darvin\u0026rsquo;s Village). Она где то к северу отсюда.\nПодходим к картографу (мужчина за столом). Он добавит маркер на вашу карту. Деревня появилась на карте.\nПроходи выше от доктора по коридору. Там тюрьма. Говорим с охранником, а затем с заключенным. Он расскажет вам где взять Rad Sute (костюм против радиации). В замен мы пообещали ему свободу. Появляется новая локация. Едем туда, находим сейф возле вагончика. Код 733. Забираем защитный костюм. Одеваем его на себя в слот общего снаряжения в инвентаре. Он будет действовать на всю команду и даст +4 защиту от радиации. теперь радиация не будет на вас влиять.\nВозвращаемся обратно в цитадель.\nДалее идем влево туда где много торговцев. Отдаем девушка металлическую ногу. У нее можно получить бесплатно оружие. Выходя от нее говорим еще с одним торговцем, который то же может продать вам оружие, если вы ничего никому не скажете. Также вы получите задание у одного из торговцев собрать сырой материал для него.\nПроходим дальше по коридору будет столовая. тут можно наполнить флягу с водой.\nВыходим и идем к лестснице. Справа от нее будет магазин тяжелого оружия. Забираем у него тяжелое оружие. Торговец даст вам задание приносить ему любые экскременты которые найдете. Он получает из них нитрат аммония для взрывчатки.\nВ цитадели все. Едем в Darvin\u0026rsquo;s Village. Ехать туда нужно через Rail Nomads Camp.\nDarvin's Village\rНебольшой городок забитый зомби. Зомби очень слабые и медлительные, поэмтоу убить их не составит труда.\rПроходим до двери в научную лабораторию.\nТут у меня был глюк. Ваша напарница из Ag Center знает этот комплекс т.к. когдато работала там. Она откроет вам вход в него. После открытия двери игра виснет. Чтобы этого избежать забираете у нее все вещи и удаляем из команды (кнопка Dismiss в окне персонажа). Дальше ломаете дверь навыком компьютеры (нужно уровень 3 и выше). После берете её обратно в команду.\nВходим внутрь. В зале находим ученого, который говорит что создал вакцину. Нам надо забрать её и включить вентиляцию. Тут все просто. Зачищаем помещение, доходим до зарытой двери, ломаем её и забираем вакцину. Чуть дальше будет комната с генератором. Включаем его и возвращаемся обратно.\nГоворим с ученым и его отрядом. Говорим, что никому не скажем про их лабораторию.\nВыйдя из комплекса говорим с девушкой - мутантом. Он попросит присоединиться к отряду. У нее прокачаны навыки взлом компьютеров, восприятие и энерго оружия.\nЕдем обратно в Цитадель и отдаем вакцину доктору. Дальше едем в тюрьму.\nТюрьма\rТюрьма (Prison)\rДве турели и ворота\nБез труда выносим всех врагов на карте. Поднимаемся на гору к ферме. Тут трудятся рабы. Находим бывшего хозяина фермы. Он даст вам задание убить главаря Красных Скорпионов. Проходим чуть дальше и выпускаем свиней. Это приведет к началу боя.\nИдем дальше мимо фермы и доходим до забора с огромными турелями. Вынести их нереально и похоже пока это конец бета версии.\nВозвращаемся назад. Сдаем квест со свиньями.\nИдя по дороге к выходу встречаем Pitbull. Этот владелец секс рабынь которых мы выпустили. Разобраться с ним не составит труда.\nДальше остается только искать проход в каньон к городу Демонта.\nЧтобы его найти нужно двигаться влево и чуть выше от Тюрьмы (на северо-восток) прямо через радиоактивную зону. При подходе к локации услышите странный сигнал (шипение).\nКаньен Титана (Canyon of Titan)\rПри входе с нами связывается командование. Поступит приказ Ангеле Дейвс покинуть ваш взвод и ввернуться на базу.\nПервого кого мы встречаем это группа фермеров, на которых напали рейдеры. Лечим Дока - это торговец медикаментами. Говорим с фермером и с рейнджером. Узнаем, что для того чтоыб пройти через блок посты Монахов нужно заплатить подать - подношение их богу Титану. За это нам дадут Метку Монахов. Подношением может быть все что угодно - обычно какой то уникальный предмет.\nПолучаем задание найти пропавшего ковбоя в каньоне.\nИдем дальше и встречаем фермера, у которого рейдеры убили сына, забрали жену и угнали скот. Получаем задание помочь ему найти жену.\nДалее встречаем таинственного солдата, который ведет вас в безопасное место. Он является представителем группировки Милиции Даймонблэка. Он вводит вас в курс дела о текущей ситуации и предлагает вам помочь его организации свергнуть Монахов, захватить власть и устновать закон и порядок. Монахи обосновались в Цитадели Титана. Это бункер с ракетами. Исползуя их они контролирую регион.\nВыше по дороге встречаем группу монахов. Даем им какой нибудь ненужный предмет.\nПройдя влево от них находим монаха и кратер с трупами. Он попросит вас передать послание другому монаху на блко посте чтобы ему помогли.\nВозвращаемся и идем дальше через мост до блок поста. Там нас попросят принести зеленую слизь (slug) и дадут три фляги для нее. Возвращаемся по мосту вверх и идем по боковой дороге под мост. Там зачищаем местность и набираем зеленую слизь из бочки используя контейнер. Возвращаемся и получаем монаха.\nЕсли монаха убьют, дальше все будут на вас нападать. Монах - это ваш пропуск через блок посты. Прикол также в том, что часто монахи просто взрывают себя вместе с врагами. И часто при этом погибают тех, кого они сопровождают. А те кто выживает, не может идти дальше, т.к. у него нет сопровождения.\nДальше начинается лабиринт из проходов. Ваша цель тут найти еще бочки и наполнить пару контейнеров слизи.\nПо пути вы также найдете солдата который попросит отвести его в безопасное место.\nПосле большой базы рейдеров будет торговец, стоящий перед мостом. После моста, если идти вверх (как бы к точке где вы появились на карте), будет закрытый камнями вход со стоящей вагонеткой.\nЕсли идти вниз вы придете к последнему блок посту и входу в Храм Титана. Монах на посту спросит вас про DMA (Милицию Даймонблэка). Можно их сдать или промолчать.\nХрам Титана (Temple of Titan)\rСлева от входа отдаем парню контейнер со слизью, чтобы он мог встретиться с девушкой в Демонте. Идем вверх до входа в комплекс . Там нас попросят дать дар для бога. Я просто выбрал что не буду давать дар и монах напал на меня. Он скомандовал начать обратный отсчет.\rТут нужно всех убить. После этого придет самый главный монах. Он отменит обратный отсчет, ракета опуститься на место. Дальше он нам предложит два варианта - или сдаться и пойти в тюрьму, или сражаться. Я выбрал пойти в тюрьму.\nЗабираем из ящика рядом с камерой наше оружие.\nНаша цель здесь выбраться на поверхность.\nВот карта локации. Красным обозначены заминированные области.\nКарта локации Храм Титана\nВыход справа внизу выведет вас на поверхность за базой рейдеров недалеко от выхода в каньон. Там вас будет ждать засада. Идти дальше не советую, т.к. сопровождения у вас нет и все рейдеры будут на вас нападать.\nВыход слева приведет вас к внутреннему двору, куда вы путались попасть вначале и вступили в бой с монахами. Там надо взломать компьютер или ввести код 60845. Код можно знать у парня возле входа если зайти во внутренний двор храма по другому.\nВыход в самом верху в больнице нельзя использовать, т.к. доктор нападет на вас. Поэтому используем левый нижний выход.\nНа верху можно поговорить с ассистентом доктора. Он может вас провести вниз в больницу. Доктор может установить вам имплантация или что то в это роде но не станет этого делать, т.к. вы рейнджер. Возможно, можно его убедить при наличии скила Smart Ass 2 и выше.\nИдем выше к выходу из каньона. Дальше ехать нет смысла, локации Silo 7 нет. Пока это конец беты.\n(продолжение следует)\nКарта мира\rКарта Wasteland 2 на момент прохождения\rАвтор: Сергей Тарабан\nПочитать по теме\rHook Wars: Pudge Revenge. Ремейк игры Pudge Wars. Открытая альфа\rAssassin’s Creed 4. Советы по игре\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\rX Rebirth. Первые впечатления об игре\r","link":"https://staraban.com/wasteland-2-obzor-i-prohozhdenie/","section":"staraban","tags":["игры","обзор","прохождение"],"title":"Wasteland 2. Обзор и прохождение"},{"body":"","link":"https://staraban.com/tags/%D0%B8%D0%B3%D1%80%D1%8B/","section":"tags","tags":null,"title":"Игры"},{"body":"Вернуться к статье (Урок часть 3) Урок часть 1 Урок часть 2 :ad2: [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_demo_part3.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-chast-3-staticheskij-i-dinamicheskij-tuman-vojny-ispolzuja-render-v-teksturu-web-demo/","section":"staraban","tags":[],"title":"Туман войны в Unity. Часть 3. Статический и динамический туман войны используя рендер в текстуру. Web демо"},{"body":"","link":"https://staraban.com/tags/fog-of-war/","section":"tags","tags":null,"title":"Fog of War"},{"body":"","link":"https://staraban.com/tags/tutorial-@ru/","section":"tags","tags":null,"title":"Tutorial @Ru"},{"body":"В этом уроке я расскажу о том, как сделать простой статический и динамический туман войны в Unity используя рендеринг в текстуру. Статический туман войны- это туман, который остается после движения персонажа, т.е. персонаж как бы открывает карту и рассеивает туман войны.\nАвтор: Сергей Тарабан\n:ad:\rЭта техника моежт быть использована для большого числа объектов. Но вам нужна Pro версия Unity, т.к. рендеринг в текстуру не входит в бесплатную версию Unity.\rЧасть 1 Часть 2\nPLAY DEMO\rВ качестве базового проекта я использовал проект из предыдущих уроков.\rСкачать файл проекта: unity_fog_of_war_part_3.unitypackage\nПочитать по теме\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Туману войны в Unity. Часть 2 (мобильная версия)\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/unity-fog-of-war-chast-3-staticheskij-i-dinamicheskij-tuman-vojny-ispolzuja-render-v-teksturu/","section":"staraban","tags":["fog of war","tutorial @ru","unity @ru","шейдер"],"title":"Туман войны в Unity. Часть 3. Статический и динамический туман войны используя рендер в текстуру"},{"body":"","link":"https://staraban.com/tags/%D1%88%D0%B5%D0%B9%D0%B4%D0%B5%D1%80/","section":"tags","tags":null,"title":"Шейдер"},{"body":"","link":"https://staraban.com/tags/fog-of-war-@en/","section":"tags","tags":null,"title":"Fog of War @En"},{"body":"","link":"https://staraban.com/tags/shader-@en/","section":"tags","tags":null,"title":"Shader @En"},{"body":"In this tutorial I show how to make simple static and dynamic fog of war using render to texture (i.e. render target or RT). Static fog of war is fog that saves after the character movement.\nAuthor: Sergey Taraban\n:ad:\rThis technique can be used for unlimited number of characters. But you need Unity Pro version for use this feature.\rPart 1 Part 2\nPLAY DEMO\rAs a basic project I use project from Part 2 tutorial.\rDownload project file for this tutorial: unity_fog_of_war_part_3.unitypackage\nRelated links\rUndeal Engine 4 overview\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war tutorial. Part 1 (video tutorial)\rUnity fog of war tutorial. Part 2 (video tutorial)\rQuaternions support in irrlicht engine\r","link":"https://staraban.com/unity-fog-of-war-part-3-static-fog-of-war-using-render-to-texture/","section":"staraban","tags":["Unity","fog of war @en","shader @en","tutorial"],"title":"Unity Fog of War. Part 3. Static and dynamic fog of war using render to texture (video tutorial)"},{"body":"Back to article ( Tutorial part 3 )\nTutorial part 1 Tutorial part 2\n:ad2: [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_demo_part3.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-part-3-static-and-dynamic-fog-of-war-using-render-to-texture-web-player-demo/","section":"staraban","tags":[],"title":"Unity fog of war. Part 3. Static and dynamic fog of war using render to texture. Web player demo"},{"body":"Сегодня состоялся релиз игры Assassin\u0026rsquo;s Creed 3: Liberation HD (Освобождение) на PC. Это игра создана в сеттинге Assassin\u0026rsquo;s Creed 3 и происходит одновременно с действием оригинальной игры.\nАвтор: Сергей Тарабан\n:ad:\rИгра является портом с игры для PS Vita, но со значительно улучшенной графикой, геймплеем, квестами и звуком. Если оригинальную игру для Виты делала только студия в Софии, то портированием занимались студии в Монреале и в Софии, так что игра обещает быть намного интереснее.\nГлавный герой и персонажи второго плана\rПротагонистом игры является молодая сексуальная темнокожая девушка по имени Авелина де Гранпе. Кстати, это первая игра серии, где мы играем за девушку. Днем она живет простой жизнью, а ночью - вершит правосудие и борется с рабством в образе ассасина.\rИз второстепенных персонажей стоит отметить её приемную мать, которая помогает её с борьбой против рабства. Она помогает беглый рабам.\nУ нее также есть отец, который очень хочет выдать её замуж.\nЕще у нее есть хороший друг и возможный жених, вместе с которым они борются против тамплиеров за свободу против рабства.\nГеймплей\rГеймплей Liberation имеет ряд отличий от Assassin's Creed 3. В него добавлены ряд нововведений. О них поговорим подробнее.\rПереодевания\rЛичина госпожи\rАвелина может одевать три типа костюмов (три личины) - рабыни, ассасина и госпожи. При этом фактически это будет три разных персонажа, у которых может быть разная известность (разыскиваемость). Переодеваться можно в специальных местах для переодевания, которые можно покупать, как магазины. Также можно шить себе новые платья.\nКаждый режим позволяет делать разные вещи и проходить миссии по разному.\nЛичина рабыни\nВ костюме госпожи персонаж может соблазнять мужчин (стражников, охрану, важных персон и т.д.), что позволит проникать в охраняемые области. А также подкупать стражников. Но в этом костюме нельзя лазать по зданиям и персонаж слабее, т.к. у вас нет брони ассасина.\nВ костюме рабыни можно играть роль рабыни, например, если взять ящик и нести его, стража не будет обращать на вас внимание, думая что вы раб. В нем также можно лазить по зданиям. Но у рабыни и у госпожи есть ограничение на оружие, которыми они могут пользоваться, в отличии от ассасина.\nУ ассасина соответственно есть все, но он не может маскироваться и чаще вызывает подозрение. Зато у него максимальная защита и весь арсенал оружия.\nМногие миссии можно проходить разными персонажами.\nБой\rОсновная боевая система существенно не изменилась. Есть разные комбо приемы, блоки. Авелина может подбирать оружие во время боя. На мой взгляд бой стал проще.\rГрупповой бой - новый режим боя\nПоявился новый режим боя - групповой бой. В этом режиме можно остановить время (удерживать клавишу Т), а затем выбрать каких врагов чем атаковать.\nИз оружия у нас пока есть - пистолет, сабля, скрытые клинки и холодное оружие (тесак мясника в начале игры).\rИгровой процесс\rВ игре меньше свободы, чем раньше. Игра больше напоминает атмосферный интерактивный фильм. Акцент тут сделан именно на сюжете. Тут нет той свободы, которая была в основной серии саги про ассасинов. Возможно это связано с тем, что игра имеет меньший бюджет и не делалась всем миром как Assassin\u0026rsquo;s Creed 4. Да и обычно в мобильных играх делают акцент в сторону меньшего взаимодействия с пользователем в виду сложности управления.\nВ игре есть точки обзора и магазины, которые можно открывать. В начале игры побочных квестов нет, но они будут дальше.\nАнимус мы покинуть не можем и об игроке, который играет на Авелину, ничего не известно.\nМир\rВ игре меня очень порадовала графика и атмосфера. Очень много атмосферной музыки, красивый воссозданный город Новый Орлеан с толпами людей и рабов, трудящихся на плантации. Все очень красиво и детализировано.\rКупили себе новое платье. Рабыня несет покупку\nЗаключение\rИгра Assassin's Creed 3: Liberation HD больше похожа на интерактивный фильм с акцентом на сюжете. Игра чуть более линейна, чем Assassin's Creed 3, выглядит проще и не так масштабно. В игре прекрасная музыка и атмосфера. Красивая и интересная главная героиня. Интересный сюжет. Интересные нововведения в геймплее. Но геймплей более простой и не такой разнообразный.\rОценка: 8/10\nАвтор: Сергей Тарабан\nПочитать по теме\rWasteland 2. Обзор и прохождение\rAssassin’s Creed 4. Советы по игре\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\rX Rebirth. Первые впечатления об игре\r","link":"https://staraban.com/assassins-creed-3-liberation-obzor-i-prohozhdeniju/","section":"staraban","tags":["игры","обзор"],"title":"Assassin's Creed 3: Liberation HD. Обзор"},{"body":"Статья :ad2: [WP_UnityObject src=\u0026quot;/resources/color_picker_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/color-picker-for-unity-webplayer-demo-ru/","section":"staraban","tags":[],"title":"Color Picker для Unity. Web player demo"},{"body":"/en/unity-web-demos-2/2d-game-tutorial-part-1-characters-with-cusomization-using-tint-shader-web-player-demo/\n/en/unity-web-demos-2/unity-fog-of-war-webplayer-demo/ ","link":"https://staraban.com/unity-web-demos-2/","section":"staraban","tags":[],"title":"Unity Web demos"},{"body":"/unity-web-demos/2d-igra-chast-1-sozdanie-i-raskraska-personazha-ispolzuja-shejder-maski-web-demo/\n/unity-web-demos/unity-fog-of-war-web-player-demo/\n","link":"https://staraban.com/unity-web-demos/","section":"staraban","tags":[],"title":"Unity Web demos"},{"body":"\rKharkiv - my home city\rAll about the Kharkiv - interesting places, events, photos etc.\r","link":"https://staraban.com/miscellany/","section":"staraban","tags":[],"title":"Miscellany"},{"body":"В этом видео уроке я покажу вам как создать и раскрасить 2d персонажа в Unity используя шейдер цветовой маски. Я написал такой шейдер и скрипт для кастомизации персонажа.\nАвтор: Сергей Тарабан\n:ad:\rЧасть 2. Мультиспрайтовый 2D персонаж с несколькими состояниями\nЭто первая часть моих уроков по 2d играм.\nВ демо я использую мой селектор цветов. Вы можете найти его тут.\nВидео урок\nColorTint шейдер\r// ColorTint shader v.1.0\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \u0026ldquo;Particles/ColorTint\u0026rdquo; { Properties { _MainTex (\u0026ldquo;Particle Texture\u0026rdquo;, 2D) = \u0026ldquo;white\u0026rdquo; {} _TintColorRed (\u0026ldquo;Tint Color Red\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) _TintColorGreen (\u0026ldquo;Tint Color Green\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) _TintColorBlue (\u0026ldquo;Tint Color Blue\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) }\nCategory { Tags { \u0026ldquo;Queue\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; \u0026ldquo;IgnoreProjector\u0026rdquo;=\u0026ldquo;True\u0026rdquo; \u0026ldquo;RenderType\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; } Blend SrcAlpha OneMinusSrcAlpha AlphaTest Greater .01 ColorMask RGB Cull Off Lighting Off ZWrite Off BindChannels { Bind \u0026ldquo;Color\u0026rdquo;, color Bind \u0026ldquo;Vertex\u0026rdquo;, vertex Bind \u0026ldquo;TexCoord\u0026rdquo;, texcoord }\n// ---- Fragment program cards\rSubShader {\rPass {\rCGPROGRAM\r#pragma vertex vert\r#pragma fragment frag\r#pragma fragmentoption ARB_precision_hint_fastest\r#pragma multi_compile_particles\r#include \u0026quot;UnityCG.cginc\u0026quot;\rsampler2D _MainTex;\rfixed4 _TintColorRed;\rfixed4 _TintColorGreen;\rfixed4 _TintColorBlue;\rstruct appdata_t {\rfloat4 vertex : POSITION;\rfloat2 texcoord : TEXCOORD0;\r};\rstruct v2f {\rfloat4 vertex : POSITION;\rfloat2 texcoord : TEXCOORD0;\r};\rfloat4 _MainTex_ST;\rv2f vert (appdata_t v)\r{\rv2f o;\ro.vertex = mul(UNITY_MATRIX_MVP, v.vertex);\ro.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);\rreturn o;\r}\rsampler2D _CameraDepthTexture;\rfloat _InvFade;\rfixed4 frag (v2f i) : COLOR\r{\tfloat4 baseColor = tex2D(_MainTex, i.texcoord);\rfloat alpha = baseColor.a;\rbaseColor = alpha * (baseColor.r * _TintColorRed + baseColor.g * _TintColorGreen + baseColor.b * _TintColorBlue);\rbaseColor.a = 1.0f - step(alpha, 0.1);\rreturn baseColor;\r}\rENDCG }\r}\r} }\nPlayer script\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rpublic class Player : MonoBehaviour {\npublic Transform head;\rpublic Transform body;\rpublic Transform hand_left;\rpublic Transform hand_right;\rpublic Color HairColor;\rpublic Color EyeColor;\rpublic Color SkinColor;\rpublic Color BodyColor;\r// Called in editor mode\rvoid OnValidate()\r{\rColorTint();\r}\r// Use this for initialization\rvoid Start () {\rColorTint();\r}\r// Update is called once per frame\rvoid Update () {\r}\rvoid ColorTint()\r{\rif(head != null)\r{\rMaterial tempMaterial = new Material(head.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorRed\u0026quot;, SkinColor);\rtempMaterial.SetColor(\u0026quot;_TintColorBlue\u0026quot;, HairColor);\rtempMaterial.SetColor(\u0026quot;_TintColorGreen\u0026quot;, EyeColor);\rhead.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\rif(body != null)\r{\rMaterial tempMaterial = new Material(body.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorGreen\u0026quot;, BodyColor);\rbody.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\rif(hand_left != null \u0026amp;\u0026amp; hand_right != null)\r{\rMaterial tempMaterial = new Material(hand_left.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorRed\u0026quot;, SkinColor);\rhand_left.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\rhand_right.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\r}\r}\nАвтор: Сергей Тарабан\nПочитать по теме\r2D игра. Часть 2. Мультиспрайтовый 2D персонаж с несколькими состояниями\rДиалог выбора цвета для Unity\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Project Anarchy vs Unity 3D. Сравнение двух игровых движков\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/2d-igra-chast-1-sozdanie-i-raskraska-personazha-ispolzuja-shejder-maski/","section":"staraban","tags":["tutorial @ru","unity @ru"],"title":"2D Игра. Часть 1. Создание и раскраска персонажа используя шейдер маски (видеоурок)"},{"body":"Видео урок :ad2: [WP_UnityObject src=\u0026quot;/resources/unity-2d-game-1-character-tint/unity_2d_game_1_character_tint.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/2d-igra-chast-1-sozdanie-i-raskraska-personazha-ispolzuja-shejder-maski-web-demo/","section":"staraban","tags":[],"title":"2D Игра. Часть 1. Создание и раскраска персонажа используя шейдер маски (видеоурок). Web demo"},{"body":"In this video tutorial I show you how to create and colour simple 2d character in Unity using tint shader. I write a tint shader and script for character customization.\nAuthor: Sergey Taraban\n:ad:\nPart 2\rThis is first part of my tutoroial. I am going to write others in near feature.\nI use my color picker in this demo. You may find it here.\nVideo tutorial\nColorTint Shader\r// ColorTint shader v.1.0\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \u0026ldquo;Particles/ColorTint\u0026rdquo; { Properties { _MainTex (\u0026ldquo;Particle Texture\u0026rdquo;, 2D) = \u0026ldquo;white\u0026rdquo; {} _TintColorRed (\u0026ldquo;Tint Color Red\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) _TintColorGreen (\u0026ldquo;Tint Color Green\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) _TintColorBlue (\u0026ldquo;Tint Color Blue\u0026rdquo;, Color) = (0.5,0.5,0.5,0.5) }\nCategory { Tags { \u0026ldquo;Queue\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; \u0026ldquo;IgnoreProjector\u0026rdquo;=\u0026ldquo;True\u0026rdquo; \u0026ldquo;RenderType\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; } Blend SrcAlpha OneMinusSrcAlpha AlphaTest Greater .01 ColorMask RGB Cull Off Lighting Off ZWrite Off BindChannels { Bind \u0026ldquo;Color\u0026rdquo;, color Bind \u0026ldquo;Vertex\u0026rdquo;, vertex Bind \u0026ldquo;TexCoord\u0026rdquo;, texcoord }\n// ---- Fragment program cards\rSubShader {\rPass {\rCGPROGRAM\r#pragma vertex vert\r#pragma fragment frag\r#pragma fragmentoption ARB_precision_hint_fastest\r#pragma multi_compile_particles\r#include \u0026quot;UnityCG.cginc\u0026quot;\rsampler2D _MainTex;\rfixed4 _TintColorRed;\rfixed4 _TintColorGreen;\rfixed4 _TintColorBlue;\rstruct appdata_t {\rfloat4 vertex : POSITION;\rfloat2 texcoord : TEXCOORD0;\r};\rstruct v2f {\rfloat4 vertex : POSITION;\rfloat2 texcoord : TEXCOORD0;\r};\rfloat4 _MainTex_ST;\rv2f vert (appdata_t v)\r{\rv2f o;\ro.vertex = mul(UNITY_MATRIX_MVP, v.vertex);\ro.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);\rreturn o;\r}\rsampler2D _CameraDepthTexture;\rfloat _InvFade;\rfixed4 frag (v2f i) : COLOR\r{\tfloat4 baseColor = tex2D(_MainTex, i.texcoord);\rfloat alpha = baseColor.a;\rbaseColor = alpha * (baseColor.r * _TintColorRed + baseColor.g * _TintColorGreen + baseColor.b * _TintColorBlue);\rbaseColor.a = 1.0f - step(alpha, 0.1);\rreturn baseColor;\r}\rENDCG }\r}\r} }\nPlayer script\r// Copyright (C) 2014 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rpublic class Player : MonoBehaviour {\npublic Transform head;\rpublic Transform body;\rpublic Transform hand_left;\rpublic Transform hand_right;\rpublic Color HairColor;\rpublic Color EyeColor;\rpublic Color SkinColor;\rpublic Color BodyColor;\r// Called in editor mode\rvoid OnValidate()\r{\rColorTint();\r}\r// Use this for initialization\rvoid Start () {\rColorTint();\r}\r// Update is called once per frame\rvoid Update () {\r}\rvoid ColorTint()\r{\rif(head != null)\r{\rMaterial tempMaterial = new Material(head.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorRed\u0026quot;, SkinColor);\rtempMaterial.SetColor(\u0026quot;_TintColorBlue\u0026quot;, HairColor);\rtempMaterial.SetColor(\u0026quot;_TintColorGreen\u0026quot;, EyeColor);\rhead.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\rif(body != null)\r{\rMaterial tempMaterial = new Material(body.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorGreen\u0026quot;, BodyColor);\rbody.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\rif(hand_left != null \u0026amp;\u0026amp; hand_right != null)\r{\rMaterial tempMaterial = new Material(hand_left.GetComponent\u0026lt;Renderer\u0026gt;().sharedMaterial);\rtempMaterial.SetColor(\u0026quot;_TintColorRed\u0026quot;, SkinColor);\rhand_left.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\rhand_right.GetComponent\u0026lt;Renderer\u0026gt;().material = tempMaterial;\r}\r}\r}\nAuthor: Sergey Taraban\nRelated posts\rPart 2. 2D character with several states and dynamic sprite changing\rColor picker for Unity\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\r","link":"https://staraban.com/2d-game-tutorial-part-1-simple-characters-with-cusomization-using-tint-shader/","section":"staraban","tags":["Unity","tutorial"],"title":"2D Game Tutorial. Part 1. Character creating and tinting"},{"body":"Моя поездка в Италию весной 2011\n[nggallery id=8 template=carousel]\n","link":"https://staraban.com/trevel-italy-2011/","section":"staraban","tags":[],"title":"Поездка в Италию"},{"body":"\rХарьков – мой родной город\rВсе о Харькове - интересные места, события, фотографии и т.д.\rПоездка в Чехию (фотоальбом)\rМоя поездка в Чехию весной 2013\rПоездка в Италию (фотоальбом)\rМоя поездка в Италию весной 2011\r","link":"https://staraban.com/miscellaneous-raznoe/","section":"staraban","tags":[],"title":"Разное"},{"body":"Простой и удобный селектор цветов для Unity на основе Unity GUI.\nАвтор: Сергей Тарабан\nВы можете скачать пакетный файл с готовым для работы компонентом ColorPicker и исходными кодами скриптов.\rWeb player demo\nБесплатно скачать с Unity Asset Store\nили скачать с сайта: color_picker.unitypackage\nКак использовать Color Picker\rColor Piker open/close\rДля открытия диалога выбора цвета нажмите на цветную иконку. Чтобы закрыть селектор цветов нажмите на палитру цветов или на любое место вне компонента.\nDrag Mode: Удерживайте кнопку мышки на палитре цветов. При этом цвет будет применяться в реальном времени. При отпускании кнопки мышки диалог закроется.\nИнтеграция\rЭто короткое видео расскажет вам как интегрировать диалог выбора цветов в свое приложение\rТакже смотрите сцену color_piker_demo.scene из пакета для более детальной информации.\nПочитать по теме\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Project Anarchy vs Unity 3D. Сравнение двух игровых движков\rУправляемые системы частиц в движке Unity\r","link":"https://staraban.com/dialog-vybora-cveta-dlja-unity/","section":"staraban","tags":["unity @ru"],"title":"Диалог выбора цвета для Unity"},{"body":"Simple and handy color selector UI control based on Unity GUI system.\nAuthor: Sergey Taraban\nIt is free to use. You can download Unity pack file with ready to work ColorPicker component and source codes.\rWeb player demo\nDownload for free from Unity Asset Store\nMiror: color_picker.unitypackage\nHow to use color picker\rColor Piker open/close\rFor opening color picker you need to press on colored icon. For closing picker click on selected color in color space texture or press anywhere outside the color picker.\nDrag Mode: If you want to change color in realtime hold left mouse button and drag it along color space image. Color will apply to the object immediately. When you have released mouse button color picker dialog will close.\nHow to integrate\rWatch the short video tutorial to undestand how to use and integrate color picker.\rAlso see scene file color_piker_demo.scene from this package for more information about integration.\nRelated posts\rUnity DLC system implementation tutorial\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\rUnity custom particle system video tutorial. Making Christmas tree and curves\r","link":"https://staraban.com/simple-color-picker-control-for-unity/","section":"staraban","tags":["Unity"],"title":"Color picker for Unity"},{"body":"Tutorial :ad2: [WP_UnityObject src=\u0026quot;/resources/color_picker_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/color-picker-for-unity-webplayer-demo/","section":"staraban","tags":[],"title":"Color picker for Unity. Web player demo"},{"body":"Tutorial :ad2: [WP_UnityObject src=\u0026quot;/resources/unity-2d-game-1-character-tint/unity_2d_game_1_character_tint.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/2d-game-tutorial-part-1-characters-with-cusomization-using-tint-shader-web-player-demo/","section":"staraban","tags":[],"title":"2D Game Tutorial. Part 1. Character creating and tinting. Web player demo"},{"body":"Видео урок о программируемых или управляемых системах частиц в движке Unity.\nАвтор: Сергей Тарабан\n:ad:\rПрограммируемая система частиц - это фича движка Unity, которая позволяет вам создавать и управлять системой частиц напрямую скриптом. Это очень полезная фишка если вам нужно управлять большим количество одинаковых объектов с максимальной производительностью или нужно реализовать свою логику поведения системы частиц.\nВ этом видео уроке я сделаю веревку в виде динамически изменяемой кривой, а также новогоднюю елку, используя управляемые системы частиц в Unity. Язык - английский.\nВсе ресурсы которые я использовал в уроке вы можете найти в пакете ниже.\nСкачать пакетный файл Unity: CustomParticleSystem.unitypackage\nСкрипт для управления частицами\rЭтот скрипт реализует простую обертку, которая позволит вам управлять системой частиц в Unity.\r// ParticlesController script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine; using System.Collections; using System.Collections.Generic; using System;\n[RequireComponent(typeof(ParticleSystem))] public class ParticlesController : MonoBehaviour { public Color color = Color.white; public Vector3 segmentDir = new Vector3(1.0f, 0, 0); public float StartAngle = 0.0f;\nprivate Mesh m_Mesh;\rprivate int[] m_Indices;\rprivate Vector2[] m_UVs;\rParticleSystem.Particle[] particles;\rParticleSystem mPrSystem;\rint mCurrCount = 0;\rstatic int MaxValueToHide = 10000;\rprivate int mVertexCount = 0;\rvoid Awake ()\r{\rmPrSystem = particleSystem;\rmPrSystem.Play();\r}\rvoid Start()\r{\r}\rvoid LateUpdate() {\rUpdateSegments();\r}\tpublic void UpdateSegments()\r{\rif(particles == null) {\rreturn;\r}\rmPrSystem.SetParticles(particles, mPrSystem.particleCount);\r}\rpublic bool IsReadyToUse()\r{\rreturn mPrSystem.particleCount \u0026gt; 0;\r}\rpublic void SetVertexCount(int aCount)\r{\tif(particles == null) {\rparticles = new ParticleSystem.Particle[mPrSystem.particleCount];\rmPrSystem.GetParticles(particles);\r}\rif(mCurrCount \u0026gt; aCount) {\rfor(int i = aCount; i \u0026lt; mPrSystem.particleCount; i++) {\rparticles[i].position = new Vector3(0, MaxValueToHide, 0);\r}\t}\rmCurrCount = aCount \u0026lt; mPrSystem.particleCount ? aCount : mPrSystem.particleCount;\tif(aCount \u0026gt; mPrSystem.particleCount) {\rDebug.LogError(\u0026quot;SetVertexCount(): vertex count \u0026gt; particles cache\u0026quot;);\r}\r}\rpublic void SetPosition(int aIndex, Vector3 aPosition)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].position = aPosition;\rif(aIndex \u0026gt; 0) {\rVector3 dir = (particles[aIndex].position - particles[aIndex-1].position);\rparticles[aIndex].rotation = AngleAroundAxis(segmentDir, dir) + StartAngle;\rif(aIndex == 1) {\rdir = -(particles[0].position - particles[1].position);\rparticles[0].rotation = AngleAroundAxis(segmentDir, dir) + StartAngle;\r} }\r}\rpublic void SetColor(int aIndex, Color aColor)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].color = aColor;\r}\rpublic void SetScale(int aIndex, float scale)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].size = scale;\r}\rstatic float AngleAroundAxis ( Vector3 dirA, Vector3 dirB ) {\rfloat res = Vector3.Angle(dirA, dirB);\rres *= Vector3.Dot(Vector3.up, Vector3.Cross(dirA, dirB)) \u0026lt; 0.0f ? -1.0f : 1.0f;\rreturn res;\r}\r} Скрипт для создания кривой из частиц с функцией синуса\r3D и 2D кривые\r// RopeTape script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine; using System.Collections;\n[RequireComponent(typeof(ParticlesController))] public class RopeTape : MonoBehaviour {\nParticlesController mParticlesController = null;\rfloat timer = 0;\rfloat mPhase = 0;\rpublic float Amplitude = 10.0f;\rpublic float AmplitudeZ = 5.0f;\rpublic float XIncrement = 1.0f;\rpublic float dx = 1.0f;\rpublic float PhaseIncrement = 0.1f;\rpublic float Width = 1.0f;\r// Use this for initialization\rvoid Start () {\rmParticlesController = GetComponent\u0026lt;ParticlesController\u0026gt;();\r}\r// Update is called once per frame\rvoid Update () {\rmPhase += PhaseIncrement*Time.deltaTime*Mathf.PI;\rif(mParticlesController.IsReadyToUse()) {\rtimer += Time.deltaTime;\rint particlesNum = mParticlesController.particleSystem.particleCount;\rmParticlesController.SetVertexCount(particlesNum);\rfloat t = 0;\rfloat fy = 0;\rfloat fz = 0;\rfloat dl = 0.01f;\rfor(int i = 0; i \u0026lt; particlesNum; i++) {\rfy = Amplitude * Mathf.Sin(t + mPhase);\rfz = AmplitudeZ * Mathf.Sin(t + mPhase);\rmParticlesController.SetPosition(i, transform.position + new Vector3(dx*i, fy, fz));\rt += XIncrement*0.001f*Mathf.PI;\rmParticlesController.SetScale(i, Width);\r}\r}\r}\r} Скрипт новогодней ёлки\rНовогодняя ёлка из частиц\rЭтот скрипт я использовал чтобы сделать новогоднюю елку в виде частиц.\n// ChristmasTree script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing System.Collections;\rpublic class ChristmasTree : MonoBehaviour {\rParticlesController mParticlesController = null;\rfloat mCurrPhaseOffset = 0.0f;\rpublic int MaxParticlesNum = 800;\rpublic bool showAllAprticles = false;\rpublic float Height = 0.1f;\rpublic float startRadius = 0.5f;\rpublic bool fixedLineStep = true;\rpublic float lineStep = 0.05f;\rpublic float angleStep = 0.5f;\rpublic float particleScaleMax = 4.0f;\rpublic float rotateSpeed = 1.0f;\rfloat timer = 0;\rfloat mOldCangeColorTime = -10.0f;\r// Use this for initialization\rvoid Start () {\rmParticlesController = GetComponent();\r//mParticlesController.SetVertexCount(50);\r}\r// Update is called once per frame\rvoid Update () {\rif(mParticlesController.IsReadyToUse()) {\rtimer += Time.deltaTime;\rint particlesNum = showAllAprticles ? MaxParticlesNum : (int)Mathf.Lerp(1, MaxParticlesNum, timer/8.0f);\rmParticlesController.SetVertexCount(particlesNum);\rmCurrPhaseOffset += rotateSpeed * Time.deltaTime;\rif(mCurrPhaseOffset \u003e= 360.0f) {\rmCurrPhaseOffset = 360 - mCurrPhaseOffset;\r}\rfloat dAlpha = 0;\rfloat dL = lineStep;\rfloat heightOffset = 0.01f;\rfloat offset = heightOffset;\rbool isChangeColor = ((int)timer - mOldCangeColorTime \u003e= 1.0f);\rif(isChangeColor)\r{\rmOldCangeColorTime = timer;\r}\rfor(int i = 0; i \u003c particlesNum; i++) {\rfloat R = offset * startRadius;\rfloat angle = dAlpha + mCurrPhaseOffset;\rif(angle \u003e= 360.0f) {\rangle = 360.0f - angle;\r}\rfloat x = R * Mathf.Cos(angle);\rfloat z = R * Mathf.Sin(angle);\rmParticlesController.SetPosition(i, new Vector3(x, Height*i, z) + transform.position );\rfloat coeff = (float)i/(float)particlesNum;\rif(isChangeColor) {\rVector3 color = new Vector3(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));\rcolor = color.normalized;\rmParticlesController.SetColor(i, new Color(color.x, color.y, color.z, 1.0f));\r}\rmParticlesController.SetScale(i, Mathf.Lerp(1.0f, particleScaleMax, coeff));\rif(fixedLineStep) {\rdAlpha += dL * 180.0f / (Mathf.PI * R);\r} else\r{\rdAlpha += angleStep;\r}\roffset += heightOffset;\r}\r}\r}\r}\rАвтор: Сергей Тарабан\nПочитать по теме\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Project Anarchy vs Unity 3D. Сравнение двух игровых движков\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/upravljaemye-sistemy-chastic-v-dvizhke-unity/","section":"staraban","tags":["tutorial @ru","unity @ru"],"title":"Управляемые системы частиц в движке Unity"},{"body":"This video tutorial about custom particle system feature in Unity Engine. This feature allows you to create and manage particles data of the shuriken particle system manualty in code. It is very useful feature if you need to manage many same objects in scene. It allows you to make very good performance optimization in some cases.\nAuthor: Sergey Taraban\n:ad:\rIn this video tutorial I make a dynamic rope curves and nice Christmas tree particle effects.\nAll related materials you can find in this pack file below.\nDownload package file: CustomParticleSystem.unitypackage\nParticle Controller script\rThis script allow you to manage custom particle system.\r// ParticlesController script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine; using System.Collections; using System.Collections.Generic; using System;\n[RequireComponent(typeof(ParticleSystem))] public class ParticlesController : MonoBehaviour { public Color color = Color.white; public Vector3 segmentDir = new Vector3(1.0f, 0, 0); public float StartAngle = 0.0f;\nprivate Mesh m_Mesh;\rprivate int[] m_Indices;\rprivate Vector2[] m_UVs;\rParticleSystem.Particle[] particles;\rParticleSystem mPrSystem;\rint mCurrCount = 0;\rstatic int MaxValueToHide = 10000;\rprivate int mVertexCount = 0;\rvoid Awake ()\r{\rmPrSystem = particleSystem;\rmPrSystem.Play();\r}\rvoid Start()\r{\r}\rvoid LateUpdate() {\rUpdateSegments();\r}\tpublic void UpdateSegments()\r{\rif(particles == null) {\rreturn;\r}\rmPrSystem.SetParticles(particles, mPrSystem.particleCount);\r}\rpublic bool IsReadyToUse()\r{\rreturn mPrSystem.particleCount \u0026gt; 0;\r}\rpublic void SetVertexCount(int aCount)\r{\tif(particles == null) {\rparticles = new ParticleSystem.Particle[mPrSystem.particleCount];\rmPrSystem.GetParticles(particles);\r}\rif(mCurrCount \u0026gt; aCount) {\rfor(int i = aCount; i \u0026lt; mPrSystem.particleCount; i++) {\rparticles[i].position = new Vector3(0, MaxValueToHide, 0);\r}\t}\rmCurrCount = aCount \u0026lt; mPrSystem.particleCount ? aCount : mPrSystem.particleCount;\tif(aCount \u0026gt; mPrSystem.particleCount) {\rDebug.LogError(\u0026quot;SetVertexCount(): vertex count \u0026gt; particles cache\u0026quot;);\r}\r}\rpublic void SetPosition(int aIndex, Vector3 aPosition)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].position = aPosition;\rif(aIndex \u0026gt; 0) {\rVector3 dir = (particles[aIndex].position - particles[aIndex-1].position);\rparticles[aIndex].rotation = AngleAroundAxis(segmentDir, dir) + StartAngle;\rif(aIndex == 1) {\rdir = -(particles[0].position - particles[1].position);\rparticles[0].rotation = AngleAroundAxis(segmentDir, dir) + StartAngle;\r} }\r}\rpublic void SetColor(int aIndex, Color aColor)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].color = aColor;\r}\rpublic void SetScale(int aIndex, float scale)\r{\rif(aIndex \u0026lt; 0 || aIndex \u0026gt;= mCurrCount) {\rreturn;\r}\tparticles[aIndex].size = scale;\r}\rstatic float AngleAroundAxis ( Vector3 dirA, Vector3 dirB ) {\rfloat res = Vector3.Angle(dirA, dirB);\rres *= Vector3.Dot(Vector3.up, Vector3.Cross(dirA, dirB)) \u0026lt; 0.0f ? -1.0f : 1.0f;\rreturn res;\r}\r} Sine curve script\r3D and 2D curves\r// RopeTape script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine; using System.Collections;\n[RequireComponent(typeof(ParticlesController))] public class RopeTape : MonoBehaviour {\nParticlesController mParticlesController = null;\rfloat timer = 0;\rfloat mPhase = 0;\rpublic float Amplitude = 10.0f;\rpublic float AmplitudeZ = 5.0f;\rpublic float XIncrement = 1.0f;\rpublic float dx = 1.0f;\rpublic float PhaseIncrement = 0.1f;\rpublic float Width = 1.0f;\r// Use this for initialization\rvoid Start () {\rmParticlesController = GetComponent\u0026lt;ParticlesController\u0026gt;();\r}\r// Update is called once per frame\rvoid Update () {\rmPhase += PhaseIncrement*Time.deltaTime*Mathf.PI;\rif(mParticlesController.IsReadyToUse()) {\rtimer += Time.deltaTime;\rint particlesNum = mParticlesController.particleSystem.particleCount;\rmParticlesController.SetVertexCount(particlesNum);\rfloat t = 0;\rfloat fy = 0;\rfloat fz = 0;\rfloat dl = 0.01f;\rfor(int i = 0; i \u0026lt; particlesNum; i++) {\rfy = Amplitude * Mathf.Sin(t + mPhase);\rfz = AmplitudeZ * Mathf.Sin(t + mPhase);\rmParticlesController.SetPosition(i, transform.position + new Vector3(dx*i, fy, fz));\rt += XIncrement*0.001f*Mathf.PI;\rmParticlesController.SetScale(i, Width);\r}\r}\r}\r} Christmas tree stript\rChristmas tree using custom particle system\rI use this script in my tutorial for making a Christmas tree in Unity.\n// ChristmasTree script\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing System.Collections;\rpublic class ChristmasTree : MonoBehaviour {\rParticlesController mParticlesController = null;\rfloat mCurrPhaseOffset = 0.0f;\rpublic int MaxParticlesNum = 800;\rpublic bool showAllAprticles = false;\rpublic float Height = 0.1f;\rpublic float startRadius = 0.5f;\rpublic bool fixedLineStep = true;\rpublic float lineStep = 0.05f;\rpublic float angleStep = 0.5f;\rpublic float particleScaleMax = 4.0f;\rpublic float rotateSpeed = 1.0f;\rfloat timer = 0;\rfloat mOldCangeColorTime = -10.0f;\r// Use this for initialization\rvoid Start () {\rmParticlesController = GetComponent();\r//mParticlesController.SetVertexCount(50);\r}\r// Update is called once per frame\rvoid Update () {\rif(mParticlesController.IsReadyToUse()) {\rtimer += Time.deltaTime;\rint particlesNum = showAllAprticles ? MaxParticlesNum : (int)Mathf.Lerp(1, MaxParticlesNum, timer/8.0f);\rmParticlesController.SetVertexCount(particlesNum);\rmCurrPhaseOffset += rotateSpeed * Time.deltaTime;\rif(mCurrPhaseOffset \u003e= 360.0f) {\rmCurrPhaseOffset = 360 - mCurrPhaseOffset;\r}\rfloat dAlpha = 0;\rfloat dL = lineStep;\rfloat heightOffset = 0.01f;\rfloat offset = heightOffset;\rbool isChangeColor = ((int)timer - mOldCangeColorTime \u003e= 1.0f);\rif(isChangeColor)\r{\rmOldCangeColorTime = timer;\r}\rfor(int i = 0; i \u003c particlesNum; i++) {\rfloat R = offset * startRadius;\rfloat angle = dAlpha + mCurrPhaseOffset;\rif(angle \u003e= 360.0f) {\rangle = 360.0f - angle;\r}\rfloat x = R * Mathf.Cos(angle);\rfloat z = R * Mathf.Sin(angle);\rmParticlesController.SetPosition(i, new Vector3(x, Height*i, z) + transform.position );\rfloat coeff = (float)i/(float)particlesNum;\rif(isChangeColor) {\rVector3 color = new Vector3(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f));\rcolor = color.normalized;\rmParticlesController.SetColor(i, new Color(color.x, color.y, color.z, 1.0f));\r}\rmParticlesController.SetScale(i, Mathf.Lerp(1.0f, particleScaleMax, coeff));\rif(fixedLineStep) {\rdAlpha += dL * 180.0f / (Mathf.PI * R);\r} else\r{\rdAlpha += angleStep;\r}\roffset += heightOffset;\r}\r}\r}\r}\rAuthor: Sergey Taraban\nRelated posts\rUnity DLC system implementation tutorial\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\r","link":"https://staraban.com/unity-custom-particle-system-tutorial/","section":"staraban","tags":["Unity","tutorial"],"title":"Unity custom particle system video tutorial. Making Christmas tree and curves"},{"body":"Недавно я прошел эту замечательную игру и хочу поделиться с вами советами по прохождению.\nКак получить много золота\rЗолота в игре на начальном этапе не хватает. Оно нужно для прокачки корабля и персонажа, а также для улучшения своего острова и дома. Вот самые эффективные методы получения золота в игре.\r:ad: Флот Кенуэя\rКарта торговых путей\rПрокачивайте свой флот в каюте капитана на корабле. Он обеспечит вам основной приток денег. Отправив хороший флот по заданиям через океан вы получите на следующий вечер порядка 50 000 монет. И это не предел. Рекомендую захватывать минимум бриги. Все что меньше - добавляйте во флот, а там меняйте на брильянты.\nВам в вашем флоте нужно будет минимум два Линейных корабля. Мой флот - 3 брига, 3 линейных, остальные корабли - фрегаты. Бриги нужно держать для битвы на легком и среднем уровне, т.к. они очень быстро перезаряжаются. Их лучше всего ставить в слот, который дает бонус к перезарядке.\nКрасивое море\nГрабить \"корованы\" и склады\rТут все просто. Ищите корабль с кучей рома и сахара, а потом нападаете на него. Рекомендую захватить сильную крепость (три точки). Вокруг нее плавает множество больших кораблей. Главное найти одинокий или недобитый корабль. А если случайно не справитесь с добычей, то можно сбежать к крепости. Также вы можете грабить курьерские корабли, но там обычно немного золота.\rМоре. Ночь. Луна\nУдобная стратегия - это найти место где плавают корабли Англии и Испании. Они воюют между собой, поэтому их корабли постоянно стреляют друг в друга. Нужно подождать когда останется один раненый победитель и добить его. Там вполне реально захватить да же Линейный корабль с почти не прокачанной \u0026ldquo;Галкой\u0026rdquo;.\nОбязательно берите на абордаж корабли с металлом. Это самый ценный ресурс, его часто будет не хватать.\nДеревня рыбаков\nЕще на высоких уровнях можете грабить \u0026ldquo;легендарные\u0026rdquo; корабли. Обычно это минимум два линейных корабля или целая флотилия поменьше. Чтобы их победить надоиметь полностью прокачанный корабль.\nТакже можете грабить склады на суше. Их грабить долго, но добычу можно получить хорошую. Склады можно фармить постоянно через некоторое время.\nОхота\nПоймали кита\nШкурки редких животных можно неплохо продать. Особенно всякой морской живности вроде китов и акул. Однако, мое мнение, охотой вы не заработаете столько же золота, сколько торговлей и пиратством. Охота нужна больше для крафта вещей и оружия.\nДля охоты на особо ценных китов нужно иметь прокачанную лодку и гарпуны.\nСокровища\rКарты сокровищ можно находить на локациях у мертвецов. Также спрашивайте барменов в тавернах и те вам расскажут за небольшую плату где искать карты сокровищ. В сокровищах обычно лежит порядка 4000 монет и иногда какое то визуальное улучшение для корабля.\rИскать обычные сундуки, обыскивать трупы или воровать у жителей смысла нет, денег вы получите очень мало.\nСокровища майя - где?\nПоиск клада майя\rОдно из моих самых больших разочарований в игре было сокровище майя. Я старательно собрал все календари чтобы открыть дверь Тулума. Это самое сокровище оказалась обычный костюм для персонажа. Больше ничего кроме этого костюма вы не получите. Честно я надеялся на какое нибудь уникальное оружие или что то в этом духе но увы.\rКстати, последний календарь для двери в сокровищницу находится на острове где стоит Обсерватория. Остров появится по сюжету.\nУлучшения корабля\rМорской бой\rВ качестве главных улучшений я рекомендую прокачивать корпус, мортиры, бочки, пушки и тяжелый ядра. Мортиры - самое мощное оружие в игре. Только с помощью них можно одолеть Линейные корабли. Тяжелые ядра хорошо для средних кораблей. Но помните - фрегаты могут стрелять два раза подряд, а линейные - три раза. Вы же только один раз. Поэтому от таких кораблей всегда лучше держаться на расстоянии.\nТаран хорошо справляется с маленькими кораблями, но их можно расстрелять и бортовыми пушками.\nХорошее повреждение также наносят бочки. Они также позволяют уйти от погони, т.к. преследующий корабль будет вынужден менять курс чтобы не налететь на них.\nКингстон\nКнители хороши для небольших и средних кораблей и удобны тем, что стреляют с носа корабля.\nБоевые улучшения кораблей можно найти только на затонувших кораблях под водой. Для этого вам нужен будет водолазный колокол, который вам дадут по сюжету. Чтобы получить чертеж нужно обыскать все сундуки на подводной локации.\nАвтор: Сергей Тарабан\nПочитать по теме\rWasteland 2. Обзор и прохождение\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\rX Rebirth. Первые впечатления об игре\r","link":"https://staraban.com/assassins-creed-4-sovety-po-igre-obzor/","section":"staraban","tags":["игры","обзор"],"title":"Assassin's Creed 4. Советы по игре"},{"body":"","link":"https://staraban.com/tags/assetbundle-@ru/","section":"tags","tags":null,"title":"AssetBundle @Ru"},{"body":"","link":"https://staraban.com/tags/dlc-system-@ru/","section":"tags","tags":null,"title":"DLC System @Ru"},{"body":"","link":"https://staraban.com/categories/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0/","section":"categories","tags":null,"title":"Разработка"},{"body":"Обновление от 6.11.2015: Это решение актуально для Unity4. В Unity 5 появилась новая более удобная система создания ассетов которая не требует этого скрипта. В новом юнити вы можете просто помечать нужные папки и ассетты именем (лейблом). Далее юнити сам сгрупирует все асеты в бандлы. Нужно только вызвать одну функция сборки ассет бандлов.\nCкрипт для создания AssetBundle в Unity. Этот скрипт используется в моей DLC системе, которую я создавал для одной из игр.\nАвтор: Сергей Тарабан\n:ad:\rПодробнее смотрите мою статью по DLC системе в Unity на хабре.\nВозможности\rВ текущей версии 1.0 есть такие возможности:\rдобавление контента методом drag and drop\rсохранение и загрузка списка контента\rавтоматическое деление AssetBundle по максимальному размеру\rвыбор платформы для создания AssetBundle\rдобавление папок с контентом\rсоздание дамп файла контента добавленного в AssetBundle\rверификация AssetBundle (только для несжатых AssetBundle)\rСкрипт\rСкрипт должен быть добавлен в папку Assets/Scripts/Editor т.к. это Editor скрипт. Скрипт распространяется по лицензии MIT.\rЯ планирую добавить какие-нибудь новые фичи как появится свободное время. Не стесняйтесь писать насчет багов или если вам нужно будет что то еще в скрипте. Буду рад ответить на ваши вопросы.\nСкачать скрипт: AssetBundleExporter.cs\n// AssetBundle Exporter v.1.0\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing UnityEditor;\rusing System.Collections;\rusing System.Collections.Generic;\rusing System.IO;\rusing System.IO.Compression;\rpublic class AssetBundleExporter : EditorWindow {\rstatic int FileVersion = 1;\rstatic string[] ForbidenExtensions = {\".meta\"};\rbool mMakeCompressedAsset = false;\rbool mSplitPacksGroup = true;\rbool mDumpExportedFilesInFile = true;\rbool mVerifyAssetBundleAfterBuild = true;\rfloat mSplitPacksSize = 2.0f; //2 mb\renum ETARGET_PLATFORM { Current = 0, iOS = BuildTarget.iPhone, Android = BuildTarget.Android,\rWindowsPhone = BuildTarget.WP8Player,\rWebPlayer = BuildTarget.WebPlayer,\rMacOS = BuildTarget.StandaloneOSXUniversal,\rWindows = BuildTarget.StandaloneWindows,\rLinux = BuildTarget.StandaloneLinuxUniversal\r}\rETARGET_PLATFORM mTargetPlatform;\rstring splitPacksSizeStr = \"2.0\";\rstatic AssetBundleExporter window = null;\rVector2 scrollPosition = Vector2.zero;\rstring mStatusText = \"\";\rList mObjectsPathList = new List();\rstatic List mExcludeFileExt = new List();\r// Add menu named \"My Window\" to the Window menu\r[MenuItem (\"Window/AssetBundle Exporter\")]\rstatic void Init () {\rmExcludeFileExt.AddRange(ForbidenExtensions);\r// Get existing open window or if none, make a new one:\rwindow = (AssetBundleExporter)EditorWindow.GetWindow (typeof (AssetBundleExporter));\r}\rvoid OnGUI () {\rProcessDragAndDrop();\r//options area\rmMakeCompressedAsset = EditorGUILayout.Toggle(\"Make compressed asset\", mMakeCompressedAsset);\rmDumpExportedFilesInFile = EditorGUILayout.Toggle(\"Dump file names in file\", mDumpExportedFilesInFile);\rmVerifyAssetBundleAfterBuild = EditorGUILayout.Toggle(\"Verify asset bundles\", mVerifyAssetBundleAfterBuild);\rmTargetPlatform = (ETARGET_PLATFORM)EditorGUILayout.EnumPopup(\"Target Platform\", mTargetPlatform);\rmSplitPacksGroup = EditorGUILayout.BeginToggleGroup (\"Split Packs size(.mb)\", mSplitPacksGroup);\rsplitPacksSizeStr = EditorGUILayout.TextArea(splitPacksSizeStr);\rmSplitPacksSize = float.Parse(splitPacksSizeStr);\rmSplitPacksSize *= 1000000.0f;\rEditorGUILayout.EndToggleGroup ();\r//file path list area\rGUILayout.BeginHorizontal();\rscrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width( window.position.width ), GUILayout.Height( window.position.height-150 ));\rstring objPathList = \"\";\rforeach(var obj in mObjectsPathList) {\robjPathList += obj + \"\\n\";\r}\rGUILayout.Label(objPathList);\rGUILayout.EndScrollView();\rGUILayout.EndVertical();\r//button area\rGUILayout.BeginHorizontal();\rif(GUILayout.Button(\"Save\")) {\rstring fileListPath = EditorUtility.SaveFilePanel (\"Save file list\", \"\", \"dlc_file_list\", \"txt\");\rusing(StreamWriter writer = new StreamWriter(fileListPath, false))\r{\rwriter.WriteLine(FileVersion.ToString());\rforeach(var objPath in mObjectsPathList)\r{\rwriter.WriteLine(objPath);\r}\r}\r}\rif(GUILayout.Button(\"Load\")) {\rmObjectsPathList.Clear();\rstring fileListPath = EditorUtility.OpenFilePanel (\"Load file list\", \"\", \"txt\");\rusing(StreamReader reader = new StreamReader(fileListPath, false))\r{\rstring fileVersion = reader.ReadLine();\rif(fileVersion != FileVersion.ToString()) {\rLogToWindow(\"File has unknown format. Loading failed\");\rreturn;\r}\rwhile(!reader.EndOfStream)\r{\rmObjectsPathList.Add(reader.ReadLine());\r}\r}\r}\rif(GUILayout.Button(\"Clear\")) {\rmObjectsPathList.Clear();\r}\rif(GUILayout.Button(\"Generate\")) {\rstring assetBundleFileName = EditorUtility.SaveFilePanel (\"Save AssetBundle\", \"\", \"AssetBundle\", \"unity3d\");\rif(mSplitPacksGroup) {\rGenerateAssetBundles(assetBundleFileName);\r}\relse\r{\rBuildAssetBundle(assetBundleFileName, mObjectsPathList);\r}\r}\rGUILayout.EndHorizontal();\r}\rvoid LogToWindow(string text) {\rmStatusText = text;\rDebug.Log(text);\r}\r//Generate a lot of asset bundles using mObjectsList and mSplitPacksSize\rvoid GenerateAssetBundles(string assetFileName) {\rfloat sizeCounter = 0;\rint bundleCounter = 0;\rint counter = 0;\rList filesForBundle = new List();\rforeach (var filepath in mObjectsPathList) {\rcounter++;\rstring fullFilePath = GetFullPath(filepath);\rFileInfo finfo = new FileInfo(fullFilePath);\rsizeCounter += finfo.Length;\rfilesForBundle.Add(filepath);\rbool isLastAsset = counter == mObjectsPathList.Count;\rif(sizeCounter \u003e= mSplitPacksSize || isLastAsset)\r{\rstring assetBundleFileName = Path.Combine(Path.GetDirectoryName(assetFileName), Path.GetFileNameWithoutExtension(assetFileName));\rassetBundleFileName = assetBundleFileName + \"_\" + bundleCounter.ToString() + Path.GetExtension(assetFileName);\rRemoveOldAssetBundle(assetBundleFileName);\rBuildAssetBundle(assetBundleFileName, filesForBundle);\rfilesForBundle.Clear();\rbundleCounter++;\rsizeCounter = 0;\r}\r}\r}\r//\rvoid BuildAssetBundle(string assetFilePath, List filesForAsset)\r{\rif(filesForAsset.Count == 0) {\rLogToWindow(\"Asset Bundle create failed. No files to include\");\rreturn;\r}\r//generate objects list\rList objList = new List();\rforeach (var filepath in filesForAsset) {\rObject obj = AssetDatabase.LoadMainAssetAtPath(filepath);\rif(obj != null)\r{\robjList.Add(obj);\r}\r}\r//build AssetBundle\rtry {\rBuildAssetBundleOptions options = BuildAssetBundleOptions.CompleteAssets;\roptions |= BuildAssetBundleOptions.CollectDependencies;\rif(!mMakeCompressedAsset) {\roptions |= BuildAssetBundleOptions.UncompressedAssetBundle;\r}\rif(mTargetPlatform != ETARGET_PLATFORM.Current) {\rBuildPipeline.BuildAssetBundle(objList[0], objList.ToArray(), assetFilePath, options, (BuildTarget)mTargetPlatform);\r}\relse\r{\rBuildPipeline.BuildAssetBundle(objList[0], objList.ToArray(), assetFilePath, options);\r}\r}\rcatch (System.Exception ex) {\rLogToWindow(\"Failed to create Asset Bundle woth error: \" + ex.Message);\rreturn;\r}\r//dump in file\rif(mDumpExportedFilesInFile) {\rusing(StreamWriter writer = new StreamWriter(assetFilePath + \".txt\", false))\r{\rforeach(var obj in objList)\r{\rstring path = AssetDatabase.GetAssetPath(obj);\rstring nameWithExt = Path.GetFileName(path);\rwriter.WriteLine(nameWithExt);\r}\r}\r}\r//verify asset bundle\rif(mVerifyAssetBundleAfterBuild \u0026\u0026 !mMakeCompressedAsset) {\rbool res = TestAssetBundle(assetFilePath, objList.ToArray());\rif(res) {\r//LogToWindow(\"Asset Bundle passes tests\");\r}\relse {\rLogToWindow(\"Asset Bundle test filed. Asset Bundle may be invalid\");\r}\r}\rLogToWindow(\"Asset Bundle was created\");\r}\r//\rvoid RemoveOldAssetBundle(string assetFilePath)\r{\rFile.Delete(assetFilePath);\r}\r//\rvoid ProcessDragAndDrop() {\rEvent evt = Event.current;\rswitch (evt.type) {\rcase EventType.DragUpdated:\rcase EventType.DragPerform:\rDragAndDrop.visualMode = DragAndDropVisualMode.Copy;\rif (evt.type == EventType.DragPerform) {\rDragAndDrop.AcceptDrag ();\r//unpack directories\rforeach(var path in DragAndDrop.paths) {\r// Construct the system path of the asset folder\rstring dataPath = Application.dataPath; string fullPath = GetFullPath(path);\rif(mObjectsPathList.Contains(path)) {\rcontinue;\r}\rif(!IsDirectory(fullPath)) {\rmObjectsPathList.Add(path);\rcontinue;\r}\r// get the system file paths of all the files in the asset folder\rstring[] filePaths = Directory.GetFiles(fullPath);\r// enumerate through the list of files loading the assets they represent and getting their type\rforeach (string filepath in filePaths) {\rif(IsForbidenExtension(filepath)) {\rcontinue;\r}\rif(mObjectsPathList.Contains(filepath)) {\rcontinue;\r}\rstring relPath = filepath.Substring(dataPath.Length-6);\rmObjectsPathList.Add(relPath);\r}\r}\r}\rbreak;\r}\r}\rbool TestAssetBundle(string assetPath, Object[] objList){\r// Wait for the Caching system to be ready\rAssetBundle bundle = AssetBundle.CreateFromFile(assetPath);\rif(bundle == null) {\rDebug.Log(\"Failed to load Asset Bundle for test.\");\rreturn false;\r}\rint errorObjects = 0;\rforeach(var obj in objList)\r{\rstring path = AssetDatabase.GetAssetPath(obj);\rstring nameWithoutExt = Path.GetFileNameWithoutExtension(path);\rObject testobj = bundle.Load(nameWithoutExt);\rif(testobj == null) {\rerrorObjects++;\r}\r}\rif(errorObjects \u003e 0) {\rDebug.Log(\"Asset bundle has invalid objects: \" + errorObjects.ToString() );\rreturn false;\r}\rreturn true;\r}\rbool IsForbidenExtension(string path) {\rstring fileExt = Path.GetExtension(path);\rreturn mExcludeFileExt.Contains(fileExt);\r}\rbool IsDirectory(string path)\r{\rSystem.IO.FileAttributes fa = System.IO.File.GetAttributes(path);\rbool isDirectory = false;\rif ((fa \u0026 FileAttributes.Directory) != 0)\r{\risDirectory = true;\r}\rreturn isDirectory;\r}\rstring GetFullPath(string relPath)\r{\rstring dataPath = Application.dataPath; string fullPath = Path.Combine(dataPath.Substring(0, dataPath.Length - 6), relPath);\rreturn fullPath;\r}\r}\rКак пользоваться\rПеретащите папку с файлами или выбранные файлы из окна каталога проекта в окно скрипта\rНажмите кнопку Generate чтобы создать Asset Bundle\rЗадайте путь и имя файла, затем нажмите кнопку Сохранить. Будет создан Asset Bundle.\rНажмите кнопку Save чтобы сохранить текущий список контента. Нажмите кнопку Load чтобы загрузить список контента. Вы также можете вручную редактировать файлы списков контента.\rПочитать по теме\rUnity DLC system implementation tutorial\rТуману войны в Unity. Часть 1 (видео урок) Project Anarchy vs Unity 3D. Сравнение двух игровых движков\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/skript-dlja-sozdanija-assetbundle-v-unity/","section":"staraban","tags":["AssetBundle @ru","DLC system @ru","unity @ru"],"title":"Скрипт для создания AssetBundle в Unity"},{"body":"Update from 6.11.2015\nThis script is actual for Unity 4. Unity 5 has new match better sultion for asset bundles creation.\nI\u0026rsquo;ve wrote a simple editor script for easy AssetBundle creation.\nAuthor: Sergey Taraban\n:ad:\rThis editor script I used as part of my game DLC system.\nFeatures\rCurrent version is 1.0. It has:\rdrag and drop contend adding\rcontent list saving and loading\rautomatic AssetBundle splitting using maximum size\rtarget platform selection\rcontent folder adding\rAssetBundle content dump file creation\rAssetBundle verification (only for uncompressed asset bundles)\rScript\rThis script is Editor script so it should be in Assets/Scripts/Editor folder. Script is distributes under the MIT license, so you are free to do whatever you want except of changing my copyright. I am going to add some additional feature in it in near future if I have free time. Do not hesitate to write me about bugs you find or about features you want.\rDownload script: AssetBundleExporter.cs\n// AssetBundle Exporter v.1.0\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rusing UnityEngine;\rusing UnityEditor;\rusing System.Collections;\rusing System.Collections.Generic;\rusing System.IO;\rusing System.IO.Compression;\rpublic class AssetBundleExporter : EditorWindow {\rstatic int FileVersion = 1;\rstatic string[] ForbidenExtensions = {\".meta\"};\rbool mMakeCompressedAsset = false;\rbool mSplitPacksGroup = true;\rbool mDumpExportedFilesInFile = true;\rbool mVerifyAssetBundleAfterBuild = true;\rfloat mSplitPacksSize = 2.0f; //2 mb\renum ETARGET_PLATFORM { Current = 0, iOS = BuildTarget.iPhone, Android = BuildTarget.Android,\rWindowsPhone = BuildTarget.WP8Player,\rWebPlayer = BuildTarget.WebPlayer,\rMacOS = BuildTarget.StandaloneOSXUniversal,\rWindows = BuildTarget.StandaloneWindows,\rLinux = BuildTarget.StandaloneLinuxUniversal\r}\rETARGET_PLATFORM mTargetPlatform;\rstring splitPacksSizeStr = \"2.0\";\rstatic AssetBundleExporter window = null;\rVector2 scrollPosition = Vector2.zero;\rstring mStatusText = \"\";\rList mObjectsPathList = new List();\rstatic List mExcludeFileExt = new List();\r// Add menu named \"My Window\" to the Window menu\r[MenuItem (\"Window/AssetBundle Exporter\")]\rstatic void Init () {\rmExcludeFileExt.AddRange(ForbidenExtensions);\r// Get existing open window or if none, make a new one:\rwindow = (AssetBundleExporter)EditorWindow.GetWindow (typeof (AssetBundleExporter));\r}\rvoid OnGUI () {\rProcessDragAndDrop();\r//options area\rmMakeCompressedAsset = EditorGUILayout.Toggle(\"Make compressed asset\", mMakeCompressedAsset);\rmDumpExportedFilesInFile = EditorGUILayout.Toggle(\"Dump file names in file\", mDumpExportedFilesInFile);\rmVerifyAssetBundleAfterBuild = EditorGUILayout.Toggle(\"Verify asset bundles\", mVerifyAssetBundleAfterBuild);\rmTargetPlatform = (ETARGET_PLATFORM)EditorGUILayout.EnumPopup(\"Target Platform\", mTargetPlatform);\rmSplitPacksGroup = EditorGUILayout.BeginToggleGroup (\"Split Packs size(.mb)\", mSplitPacksGroup);\rsplitPacksSizeStr = EditorGUILayout.TextArea(splitPacksSizeStr);\rmSplitPacksSize = float.Parse(splitPacksSizeStr);\rmSplitPacksSize *= 1000000.0f;\rEditorGUILayout.EndToggleGroup ();\r//file path list area\rGUILayout.BeginHorizontal();\rscrollPosition = GUILayout.BeginScrollView(scrollPosition, GUILayout.Width( window.position.width ), GUILayout.Height( window.position.height-150 ));\rstring objPathList = \"\";\rforeach(var obj in mObjectsPathList) {\robjPathList += obj + \"\\n\";\r}\rGUILayout.Label(objPathList);\rGUILayout.EndScrollView();\rGUILayout.EndVertical();\r//button area\rGUILayout.BeginHorizontal();\rif(GUILayout.Button(\"Save\")) {\rstring fileListPath = EditorUtility.SaveFilePanel (\"Save file list\", \"\", \"dlc_file_list\", \"txt\");\rusing(StreamWriter writer = new StreamWriter(fileListPath, false))\r{\rwriter.WriteLine(FileVersion.ToString());\rforeach(var objPath in mObjectsPathList)\r{\rwriter.WriteLine(objPath);\r}\r}\r}\rif(GUILayout.Button(\"Load\")) {\rmObjectsPathList.Clear();\rstring fileListPath = EditorUtility.OpenFilePanel (\"Load file list\", \"\", \"txt\");\rusing(StreamReader reader = new StreamReader(fileListPath, false))\r{\rstring fileVersion = reader.ReadLine();\rif(fileVersion != FileVersion.ToString()) {\rLogToWindow(\"File has unknown format. Loading failed\");\rreturn;\r}\rwhile(!reader.EndOfStream)\r{\rmObjectsPathList.Add(reader.ReadLine());\r}\r}\r}\rif(GUILayout.Button(\"Clear\")) {\rmObjectsPathList.Clear();\r}\rif(GUILayout.Button(\"Generate\")) {\rstring assetBundleFileName = EditorUtility.SaveFilePanel (\"Save AssetBundle\", \"\", \"AssetBundle\", \"unity3d\");\rif(mSplitPacksGroup) {\rGenerateAssetBundles(assetBundleFileName);\r}\relse\r{\rBuildAssetBundle(assetBundleFileName, mObjectsPathList);\r}\r}\rGUILayout.EndHorizontal();\r}\rvoid LogToWindow(string text) {\rmStatusText = text;\rDebug.Log(text);\r}\r//Generate a lot of asset bundles using mObjectsList and mSplitPacksSize\rvoid GenerateAssetBundles(string assetFileName) {\rfloat sizeCounter = 0;\rint bundleCounter = 0;\rint counter = 0;\rList filesForBundle = new List();\rforeach (var filepath in mObjectsPathList) {\rcounter++;\rstring fullFilePath = GetFullPath(filepath);\rFileInfo finfo = new FileInfo(fullFilePath);\rsizeCounter += finfo.Length;\rfilesForBundle.Add(filepath);\rbool isLastAsset = counter == mObjectsPathList.Count;\rif(sizeCounter \u003e= mSplitPacksSize || isLastAsset)\r{\rstring assetBundleFileName = Path.Combine(Path.GetDirectoryName(assetFileName), Path.GetFileNameWithoutExtension(assetFileName));\rassetBundleFileName = assetBundleFileName + \"_\" + bundleCounter.ToString() + Path.GetExtension(assetFileName);\rRemoveOldAssetBundle(assetBundleFileName);\rBuildAssetBundle(assetBundleFileName, filesForBundle);\rfilesForBundle.Clear();\rbundleCounter++;\rsizeCounter = 0;\r}\r}\r}\r//\rvoid BuildAssetBundle(string assetFilePath, List filesForAsset)\r{\rif(filesForAsset.Count == 0) {\rLogToWindow(\"Asset Bundle create failed. No files to include\");\rreturn;\r}\r//generate objects list\rList objList = new List();\rforeach (var filepath in filesForAsset) {\rObject obj = AssetDatabase.LoadMainAssetAtPath(filepath);\rif(obj != null)\r{\robjList.Add(obj);\r}\r}\r//build AssetBundle\rtry {\rBuildAssetBundleOptions options = BuildAssetBundleOptions.CompleteAssets;\roptions |= BuildAssetBundleOptions.CollectDependencies;\rif(!mMakeCompressedAsset) {\roptions |= BuildAssetBundleOptions.UncompressedAssetBundle;\r}\rif(mTargetPlatform != ETARGET_PLATFORM.Current) {\rBuildPipeline.BuildAssetBundle(objList[0], objList.ToArray(), assetFilePath, options, (BuildTarget)mTargetPlatform);\r}\relse\r{\rBuildPipeline.BuildAssetBundle(objList[0], objList.ToArray(), assetFilePath, options);\r}\r}\rcatch (System.Exception ex) {\rLogToWindow(\"Failed to create Asset Bundle woth error: \" + ex.Message);\rreturn;\r}\r//dump in file\rif(mDumpExportedFilesInFile) {\rusing(StreamWriter writer = new StreamWriter(assetFilePath + \".txt\", false))\r{\rforeach(var obj in objList)\r{\rstring path = AssetDatabase.GetAssetPath(obj);\rstring nameWithExt = Path.GetFileName(path);\rwriter.WriteLine(nameWithExt);\r}\r}\r}\r//verify asset bundle\rif(mVerifyAssetBundleAfterBuild \u0026\u0026 !mMakeCompressedAsset) {\rbool res = TestAssetBundle(assetFilePath, objList.ToArray());\rif(res) {\r//LogToWindow(\"Asset Bundle passes tests\");\r}\relse {\rLogToWindow(\"Asset Bundle test filed. Asset Bundle may be invalid\");\r}\r}\rLogToWindow(\"Asset Bundle was created\");\r}\r//\rvoid RemoveOldAssetBundle(string assetFilePath)\r{\rFile.Delete(assetFilePath);\r}\r//\rvoid ProcessDragAndDrop() {\rEvent evt = Event.current;\rswitch (evt.type) {\rcase EventType.DragUpdated:\rcase EventType.DragPerform:\rDragAndDrop.visualMode = DragAndDropVisualMode.Copy;\rif (evt.type == EventType.DragPerform) {\rDragAndDrop.AcceptDrag ();\r//unpack directories\rforeach(var path in DragAndDrop.paths) {\r// Construct the system path of the asset folder\rstring dataPath = Application.dataPath; string fullPath = GetFullPath(path);\rif(mObjectsPathList.Contains(path)) {\rcontinue;\r}\rif(!IsDirectory(fullPath)) {\rmObjectsPathList.Add(path);\rcontinue;\r}\r// get the system file paths of all the files in the asset folder\rstring[] filePaths = Directory.GetFiles(fullPath);\r// enumerate through the list of files loading the assets they represent and getting their type\rforeach (string filepath in filePaths) {\rif(IsForbidenExtension(filepath)) {\rcontinue;\r}\rif(mObjectsPathList.Contains(filepath)) {\rcontinue;\r}\rstring relPath = filepath.Substring(dataPath.Length-6);\rmObjectsPathList.Add(relPath);\r}\r}\r}\rbreak;\r}\r}\rbool TestAssetBundle(string assetPath, Object[] objList){\r// Wait for the Caching system to be ready\rAssetBundle bundle = AssetBundle.CreateFromFile(assetPath);\rif(bundle == null) {\rDebug.Log(\"Failed to load Asset Bundle for test.\");\rreturn false;\r}\rint errorObjects = 0;\rforeach(var obj in objList)\r{\rstring path = AssetDatabase.GetAssetPath(obj);\rstring nameWithoutExt = Path.GetFileNameWithoutExtension(path);\rObject testobj = bundle.Load(nameWithoutExt);\rif(testobj == null) {\rerrorObjects++;\r}\r}\rif(errorObjects \u003e 0) {\rDebug.Log(\"Asset bundle has invalid objects: \" + errorObjects.ToString() );\rreturn false;\r}\rreturn true;\r}\rbool IsForbidenExtension(string path) {\rstring fileExt = Path.GetExtension(path);\rreturn mExcludeFileExt.Contains(fileExt);\r}\rbool IsDirectory(string path)\r{\rSystem.IO.FileAttributes fa = System.IO.File.GetAttributes(path);\rbool isDirectory = false;\rif ((fa \u0026 FileAttributes.Directory) != 0)\r{\risDirectory = true;\r}\rreturn isDirectory;\r}\rstring GetFullPath(string relPath)\r{\rstring dataPath = Application.dataPath; string fullPath = Path.Combine(dataPath.Substring(0, dataPath.Length - 6), relPath);\rreturn fullPath;\r}\r}\rHow to use\rDrag and drop folder or multiselected files from project window to script editor window\rPress Generate button for create Asset Bundle\rSelect AssetBundle location and name then press Save\rPress Save button to save file list to text file.\rPress Load button to load another file list from text file.\rYou also may change text file manually.\rRelated posts\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity fog of war video tutorial with webplayer demo.\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\r","link":"https://staraban.com/asset-bundle-export-script-for-simple-dlc-generation/","section":"staraban","tags":["AssetBundle","DLC system","Unity"],"title":"Asset Bundle export script for simple DLC creation"},{"body":"","link":"https://staraban.com/tags/assetbundle/","section":"tags","tags":null,"title":"AssetBundle"},{"body":"","link":"https://staraban.com/categories/developing/","section":"categories","tags":null,"title":"Developing"},{"body":"","link":"https://staraban.com/tags/dlc-system/","section":"tags","tags":null,"title":"DLC System"},{"body":"A couple of days ago X Rebirth from Egosoft was released.\nAuthor: Sergey Taraban\n:ad:\rX Rebirth - continuation of a series of games about X universe. The game is a \u0026ldquo;sandbox\u0026rdquo; where player can realize himself as captain of a huge fleet, merchant, adventurer, warrior, architect of space stations, or all together. The game also has an interesting storyline.\nGameplay\rGameplay since the X3 series has been redesigned. The game got rid of a large number of sophisticated menus and an overloaded interface. Now, all the control was transferred to the quick menu by pressing Enter button. From this, the game has really become easier.\nDocking\nShip control was not changed so match, but the automatic docking via computer was gone. Now you need to search for docking station and dock to it through a quick menu docking.\nFor dock to the station you need to get close to the desired module and double-click the icon of this module. Fast menu will appear as shown in screen shot.\nAll stations are now modular and can have a many extra docks outside, which can offer a variety of services.\nAfter landing at the stations you can hire staff and communicate with NPC. Staff available for hire :\nengineers - repairing the ship if it is damaged\rcaptains\rpilots - need for fighters\rmarines - for boarding an enemy ship\rarchitects - for the stations building\rmanagers\rsecurity managers, etc.\rNPC talking minigame\rAfter hiring, you can take a person to the right ship or station.\nTalk to the NPC allows you to get bonuses and discounts at the stations. They can also give you something or give a side job. Some NPC drones or sell a variety of goods. With NPC can talk about different topics, to make compliments, persuade or threaten.\nAlso, in the stations you can steal withdraw items from the boxes for personal use.\nSector map\nNavigating in the universe has changed dramatically. The universe is now seamless . You travel using special hyperspace tunnels . There are two types of tunnels - internal ( green ) and interstellar (blue) . Each tunnel only works in one direction and has 6 highways. Interstellar tunnel has 25 highway. When you are flying through highway occupied by another ship you will move much faster than in the empty way . You can enter or exit tunnel at any places. This mechanic is very similar to tunnels in the Freelancer game, but match better.\nFrom the menu was disappeared time accelerator . Since now the ships are moving much faster and the stations are closer so you don\u0026rsquo;t need it anymore.\nShips AI better. Instead of extension modules from X3, all work perform hired personal and drones.\nTrade module\nThe player can not sit in the cockpit of the other ship and change their basic ship. It can directly control only his ship, which is given at the beginning of the game.You can only give orders to your ships. The developers did it to simplify the mechanics of the game. In the original X3 ships were all equal, and player could be in andockyardy vehicle he want.\nStation modules\rClub\rStations consist of a large number of different modules. These modules are marked with different icons. If the icon is not painted over - it means the module has not been explored. To explore the module you should fly up close to it as the icon was at the center of the white circle on the screen. Be sure to explore the modules marked with \u0026lsquo;i\u0026rsquo; later. This will allow you to open a remote operation with adjacent modules. And you no longer have to approach close to the module as before.\nType of modules:\nspace dock - looks like as corresponding group of goods: food, minerals, energy, weapon etc. For example, if the space station produces batteries one can be purchased through the following modules at this station.\rdockyard - here you can buy a ship\rclub (\"tavern\") - entertainment senter. Here you can find a staff of all kinds, traders, etc.\rmarket (trade module) - module with a bunch of blue graphs. There are very many different traders.\rjail - icon in the form of an elongated capsule. There are many staff on the military theme - marines, captains, pilots etc. Don't forget to visit the hall in a room with prison wards.\rrepair dock - module marked with a wrench. It full of engineers who can repair your ship.\rInformation about modules are also shown as a banner above the hyperspace tunnel.\rHow to earn money\rAir shaft\rAt the first stage of the game there are not very match ways to earn money.\nLooking for goods in boxes\rThere are many boxes with goods in the station. Goods can be sold to traders. Also you should look for hidden boxes in ventilation systems. There are illegal cargo like chips or space flies. Such products can be sold to traders named speculators. They often live in the taverns.\rPerform tasks\rTasks are marked with a skull. For them, good pay and you get a reputation. Keep in mind that the job support are very time consuming. It is better to take a job to protect station from assault, for example, to \"protect the station from pirates attack.\"\rTrading\rTrading of large goods using cargo ship\rThere are two types of goods in the game. The first group - a small-sized goods that are placed in the usual holds . The second group - are goods for large cargo ships.\nThe first group of goods are purchased from vendors at the stations . Every trader specializing in certain product groups - the farmer, the speculator, junk dealer, equipment dealer, arms dealer, etc. These products you can find in the boxes at stations or select from the destroyed ships.\nThe second group of products can be bought in special docks station. These are special compartments , which can fit large cargo ships. In order to buy this product in your group of ships must be cargo ship . You can buy a product using dock or via the Trade menu. To buy a product select it, then click the button in the lower right corner. In the new window that appears, you must choose the amount of goods you want to purchased .\nStory\rPeople of the station\rThe game story starts in about 40 years after the events of the last X3. We play in the X universe sector called the Albion, isolated from the rest of the X world. This happened after the event known as the \u0026ldquo;Great shutdown\u0026rdquo; when all the gates of Albion were off. This was committed by mining corporation, which decided to become independence from Argon.\nThe game begins with tutorial, which is very tightly woven into the story line. Our first task is staffed trade ship. It should be noted that the tutorial done match better than in previous games. But sometimes you have situation when it is not clear what to do.\nPros\rNew incredibly detailed world. In dozens of times more objects, ships and stations\rModular structure of stations and ships. There you can walk around, explore and interact with the residents\rRecruitment and staff management\rSeamless universe\rA simpler, less \"hardcore\" control\rBeautiful detailed worlds. Great modern graphics\rCons\rNo auto-save, and no save in stations (don't forget to press F5 during the game)\rLighting sometimes is too contrasting\rFonts in the quick menu small and blurry\rGame sometimes looks unfinished\rHight system requirements\rConclusions\rGame is not finished. It has a lot of unrealized or unfinished ideas. It should be with Early Access, because for now it has not release quality.\rGame is interesting and fun. It has various gameplay, good storyline, nice graphic and unique ambience, but not finished. It is the one of the best space simulator now with huge number of things player can do. This game is completely different than X3, so if you a fan of previous X games X Rebirth may disappoint you. You should play a lot of time to understand this game.\nGame rate: 6/10\n","link":"https://staraban.com/x-rebirth-overview-first-look/","section":"staraban","tags":["games @en","overview"],"title":"X Rebirth. First look overview"},{"body":"Сегодня состоялся релиз долгожданной игры X Rebirth от студии Egosoft по вселенной Х.\nАвтор: Сергей Тарабан\n:ad:\rX Rebirth - продолжение серии игр по вселенной X. Игра является \u0026ldquo;песочницей\u0026rdquo;, в которой игрок может реализовать себя как угодно, став капитаном огромного флота, торговцем, искателем приключений, архитектором космических станций или всем вместе взятым. Игра также имеет интересную сюжетную кампанию.\nИгровая механика\rИгровая механика со времен серии X3 была кардинально переделана. Игра избавилась от большого числа замысловатых меню и перегруженного интерфейса. Теперь весь контроль был перенесен в меню быстрого доступа по клавише Enter. От этого игра действительно стала проще.\nСтыковка\nУправление кораблем осталось почти тем же, а вот стыковка через автоматический компьютер исчезла. Теперь нужно самостоятельно искать док станции и стыковаться к нему через быстрое меню стыковки.\nЧтобы пристыковаться к станции нужно подойти вплотную к нужному модулю и дважды кликнуть на иконку этого модуля. Рядом появится меню как на рисунке.\nВсе станции теперь модульные и могут иметь несколько дополнительных доков помимо основного, которые могу предлагать различные услуги.\nПосле приземления на станциях можно нанимать персонал и общаться с NPC. Для найма доступны:\nинженеры - ремонтируют корабль если он поврежден\rкапитаны\rпилоты - нужны для истребителей\rдесантники - для абордажа вражеского корабля\rархитекторы - для постройки станций\rменеджеры\rруководители охраны и т.д.\rРазговор с NPC. Мини-игра на убеждение.\nПосле найма вы можете отвезти человека на нужный корабль или станцию, которой хотите чтобы он управлял, и назначить его туда через игровое меню.\rРазговоры с NPC позволяют вам получить бонусы и скидки на станциях. Также они могут подсказать вам что то или дать побочное задание. Некоторые NPC продают дронов или различные товары. С NPC можно говорить на разные темы, делать комплименты, убеждать или угрожать.\nТакже на станциях можно воровать изымать предметы из ящиков для личных нужд.\nКарта сектора\nПеремещение по вселенной изменилось кардинально. Вселенная теперь бесшовная. По ней можно перемещаться через специальные гиперпространственные тоннели. Их два вида - внутрисекторные (зеленые) и межсекторные (синие). Каждый туннель работает только в одну сторону и имеет по 6 полос движения. Межсекторый тоннель имеет 25 полос движения. Когда вы летите в тонели ищите полосу занятую другим кораблем. Так вы будете двигаться значительно быстрее чем в пустой полосе. В тоннель можно войти и выйти в любом месте. Эта механика очень похожа на тонели в игре Freelancer, только лучше.\nИз меню пропал сингулярный ускоритель (уплотнитель) времени. Т.к. теперь корабли двигаются значительно быстрее, а станции находятся ближе, необходимость в нем отпала.\nAI кораблей стало лучше. Вместо модулей расширений всю работу выполняет нанятый капитан или другой персонал.Количество команд уменьшено.\nТорговая станция\nИгрок не может садиться в кабину другого корабля и менять свой основной корабль. Управлять напрямую он может только своим кораблем, который дается в начале игры. Остальным кораблям можно только отдавать приказы. Разработчики пошли на это для упрощения игровой механики. В оригинальном X3 все корабли были равноправны, и сесть на место капитана можно было в любом корабле.\nМодули станций\rБар\rСтанции состоят из большого числа различных модулей. Эти модули помечаются разными иконками. Если иконка не закрашена - значит модуль не исследован. Чтобы исследовать модуль надо подлететь к нему близко так чтобы иконка была в центре белого круга на экране. Обязательно исследуйте модули со значком i. Это позволит вам открыть удаленную операцию с расположенными рядом модулями. И вам больше не придется приближаться к модулю вплотную как раньше.\nМодули бывают такого типа:\nдоки - помечаются значком соответствующей группы товаров: продукты, минералы и т.д. Например, если станция производит батареи то их можно купить через такие модули на этой станции.\rверфь - тут можно купить корабли\rбар (\"таверна\") - развлекательные заведения. В них можно найти персонал самого разного рода, торговцев и т.д.\rбиржа - модуль с кучей синих графиков. Тут очень много торговцев разным товаром.\rтюрьма - значок в виде вытянутой капсулы. Тут больше персонала на военную тему - десантники, капитаны, но и торговцы встречаются. Обязательно пускайтесь в холл в комнате с камерами. Там людей больше всего.\rремонтная мастерская - модуль со значком гаечного ключа. Тут полно инженеров, которые могут отремонтировать ваш корабль.\rКакие модули есть на той или иной станции также показано в виде баннеров над гиперпространственном тоннеле.\rКак заработать деньги\rВентиляционная шахта\rНа начальном этапе игры способов не очень много.\nОбыскивайте ящики на станциях и продавайте содержимое\rЯщиков будет много, но оно того стоит. Товары можно будет продавать первым попавшимся торговцам. Также ищите спрятанные ящики в вентиляционных системах. Там обычно находятся нелегальные вроде хакерских чипов или космических мух. Такие товары можно продать торговцу - спекулянту. Обитают они часто в барах.\rВыполняйте задания\rЗадания помечены значком черепа. За них неплохо платят и вы получаете репутацию. Имейте в виду, что задания на сопровождение занимают очень много времени. Лучше берите задания на защиту чего-то от нападения, которое произойдет сейчас, например, \"защитить станцию от атаки корсаров\".\rТорговля\rТорговля крупными товарами\rВ игре есть две группы товаров. Первая группа - это малогабаритные товары, которые помещаются в обычные трюмы. Вторая группы - это товары для больших грузовых кораблей.\nТовары первой группы покупаются у торговцев на станциях. Каждый торговец специализируется на определенных группах товаров - фермер, спекулянт, старьевщик, продавец оборудования, продавец оружия и т.д. Эти же товары вы можете находить в ящиках на станциях или подбирать из разбитых кораблей.\nТовары второй группы можно купить в специальных доках станции. Это специальные отсеки, к которым могут подходить большие грузовые корабли. Для того чтобы купить такой товар в вашей группе кораблей должен быть грузовой корабль. Купить товар можно или через док или через меню Торговля. Чтобы купить товар нужно его выбрать, а затем нажать кнопку в правом нижнем углу. В открывшемся новом окне надо выбрать количество товара которое надо купить.\nСюжет\rЖители стации\rСобытия игры начинается примерно через 40 лет после событий первых частей. Мы играем в области вселенной Х, называемой Альбион, изолированной от остальной части мира Х. Это произошло после события, известного как \u0026ldquo;Большое отключение\u0026rdquo;, когда все врата из Альбиона были выключены. Это было сделано по решению горнодобывающей корпорации, которая объявила независимость от Аргона. Т.к. в секторе флот Аргона был отрезан от метрополии, его легко победили.\nИгра начинается с обучения, которое очень плотно вплетено в сюжет. Наша задача укомплектовать торговый корабль персоналом. Стоит заметить, что обучение сделано на порядок лучше, чем в предыдущих играх серии. Редко встречаются моменты когда непонятно что делать.\nПоложительные моменты\rНовый невероятно детализированный мир. В десятки раз больше объектов, кораблей и станций\rСтанции и корабли модульные. По ним можно ходить и исследовать, общаться с обитателями\rНаем и управление персоналом\rБесшовная вселенная\rБолее простое, менее \"хардкорное\", управление. Более низкий уровень вхождения в игру чем в предыдущих частях\rКрасивые детально проработанные миры. Отличная современная графика\rОтрицательные моменты\rОтсутствуют автосохранения и сохранения на станциях ( не забывайте нажимать F5 во время игры )\rОсвещение очень контрастное\rИгра практически не локализирована на русский язык. Переведено только меню и название вещей. Нормальную локализацию обещают выпустить к концу декабря\rШрифты в быстром меню мелкие и смазанные\rИгра местами выглядит сырой\rВысокие системные требования.\rВыводы\rИгру с самого начала подвело то, что её не сделали С Ранним Доступом. Потенциала в ней море, но он не реализован. Игра сырая и недоделанная.\rИгра получилась интересной, красивой, с разнообразным геймплеем и неповторимой атмосферой, но сырой. На мой взгляд это один из лучших космических симуляторов на данный момент. Игра не похожа на X3, поэтому если вы фанат предыдущих игр серии Х, X Rebirth может разочаровать вас. Нужно потратить много времени чтобы понять эту игру.\nОценка игры: 6/10\nПочитать по теме\rAssassin’s Creed 4. Советы по игре\rIttle Dew. Веселое приключение с пазлами и монстрами\rDishonored. Обзор и прохождение первых квестов\r","link":"https://staraban.com/x-rebirth-pervoe-vpechatlenie-obzor/","section":"staraban","tags":["игры","обзор"],"title":"X Rebirth. Первые впечатления об игре"},{"body":"Tutorial part 1 Tutorial part 2 :ad2: [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_vertex_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-mobile-version-part-2-web-player-demo/","section":"staraban","tags":[],"title":"Unity fog of war. Part 2. Mobile version. Web player demo"},{"body":"This article is extension of my previous tutorial about fog of war implementation in Unity. My previous technique is good for mobile device, but it still too heavy for it. That\u0026rsquo;s why I\u0026rsquo;ll write a mobile version of fog of war for Unity in this little tutorial. It will looks different bug will work faster.\nAuthor: Sergey Taraban\nPart 1\rWeb player demo\rUse WASD buttons to control player movement.\nDownload pack file: fog_of_war_tutorial.unitypackage\nFor Unity 5 add \u0026ldquo;alpha:blend\u0026rdquo; to line #pragma surface surf Lambert vertex:vert\nNew aperture shader\rFor increasing fps I move aperture computation algorithm from fragment to vertex shader. This will make my shader more lightweight. After this shader pass number will depend on vertex number in 3D model and not from fragments number on screen. 3D model in out case is fog of war plane.\rYou need to create new shader and copy the code below to it. Then attach shader to fog of war material.\n// FogOfWarVertex shader\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \"Custom/FogOfWarGeom\" {\rProperties {\r_Color (\"Main Color\", Color) = (1,1,1,1)\r_MainTex (\"Color (RGB) Alpha (A)\", 2D) = \"white\"\r_FogRadius (\"FogRadius\", Float) = 1.0\r_FogMaxRadius (\"FogMaxRadius\", Float) = 0.5\r_Player1_Pos (\"UnitPos1\", Vector) = (0,0,0,1)\r_Player2_Pos (\"UnitPos2\", Vector) = (0,0,0,1)\r_Player3_Pos (\"UnitPos3\", Vector) = (0,0,0,1)\r}\rSubShader {\rTags { \"Queue\"=\"Transparent\" \"RenderType\"=\"Transparent\" }\rBlend SrcAlpha OneMinusSrcAlpha\rZWrite On\rCull Off CGPROGRAM\r#pragma target 3.0\r#pragma surface surf Lambert vertex:vert alpha:blend\rsampler2D _MainTex;\rfixed4 _Color;\rfloat4 _Player1_Pos;\rfloat4 _Player2_Pos;\rfloat4 _Player3_Pos;\rfloat _FogRadius;\rfloat _FogMaxRadius;\rstruct Input {\rfloat4 pos;\rfloat alpha;\rfloat2 location;\r};\rfloat powerForPos(float4 pos, float2 nearVertex);\rvoid vert (inout appdata_full vertexData, out Input outData)\r{\rfloat2 posVertex = mul (_Object2World, vertexData.vertex).xz;\routData.alpha = (1.0 - clamp(_Color.a + ( powerForPos(_Player1_Pos, posVertex) + powerForPos(_Player2_Pos, posVertex)\r+ powerForPos(_Player3_Pos, posVertex) ), 0, 1.0));\r}\rvoid surf (Input IN, inout SurfaceOutput o) {\ro.Albedo = _Color.rgb;\ro.Alpha = IN.alpha;\r}\rfloat powerForPos(float4 pos, float2 nearVertex) {\rfloat attenumat = clamp(_FogRadius - abs(length(pos.xz - nearVertex.xy)), 0.0, _FogRadius);\rif(attenumat \u003e _FogRadius*_FogMaxRadius) {\rattenumat = _FogRadius*_FogMaxRadius; }\rreturn (1.0/_FogMaxRadius)*(attenumat/_FogRadius);\r}\rENDCG\r}\rFallback \"Transparent/VertexLit\"\r}\rScript for plane generation\rNow we need to write a script for plane generation with various vertex count. For basis I used CreatePlane editor script from Unity wikipedia. I changed it to MonoBehaviour script.\rCopy code below to new script and attach them to for of war plane object. If you have Mesh Collider on it change it to Box Collider with size (1, 0.01, 1). Then set up object scale you needed.\nusing UnityEngine;\rusing System.Collections;\rpublic class CreatePlaneScript : MonoBehaviour\r{\rpublic enum Orientation\r{\rHorizontal,\rVertical\r}\rpublic enum AnchorPoint\r{\rTopLeft,\rTopHalf,\rTopRight,\rRightHalf,\rBottomRight,\rBottomHalf,\rBottomLeft,\rLeftHalf,\rCenter\r}\rpublic int widthSegments = 1;\rpublic int lengthSegments = 1;\rpublic float width = 1.0f;\rpublic float length = 1.0f;\rpublic Orientation orientation = Orientation.Horizontal;\rpublic AnchorPoint anchor = AnchorPoint.Center;\rpublic bool addCollider = false;\rpublic bool createAtOrigin = true;\rpublic string optionalName;\rvoid Start()\r{\rBuildPlane();\r}\rvoid Update()\r{\rwidthSegments = Mathf.Clamp(widthSegments, 1, 254);\rlengthSegments = Mathf.Clamp(lengthSegments, 1, 254);\r}\rpublic void BuildPlane()\r{\rVector2 anchorOffset;\rstring anchorId;\rswitch (anchor)\r{\rcase AnchorPoint.TopLeft:\ranchorOffset = new Vector2(-width/2.0f,length/2.0f);\ranchorId = \"TL\";\rbreak;\rcase AnchorPoint.TopHalf:\ranchorOffset = new Vector2(0.0f,length/2.0f);\ranchorId = \"TH\";\rbreak;\rcase AnchorPoint.TopRight:\ranchorOffset = new Vector2(width/2.0f,length/2.0f);\ranchorId = \"TR\";\rbreak;\rcase AnchorPoint.RightHalf:\ranchorOffset = new Vector2(width/2.0f,0.0f);\ranchorId = \"RH\";\rbreak;\rcase AnchorPoint.BottomRight:\ranchorOffset = new Vector2(width/2.0f,-length/2.0f);\ranchorId = \"BR\";\rbreak;\rcase AnchorPoint.BottomHalf:\ranchorOffset = new Vector2(0.0f,-length/2.0f);\ranchorId = \"BH\";\rbreak;\rcase AnchorPoint.BottomLeft:\ranchorOffset = new Vector2(-width/2.0f,-length/2.0f);\ranchorId = \"BL\";\rbreak; case AnchorPoint.LeftHalf:\ranchorOffset = new Vector2(-width/2.0f,0.0f);\ranchorId = \"LH\";\rbreak; case AnchorPoint.Center:\rdefault:\ranchorOffset = Vector2.zero;\ranchorId = \"C\";\rbreak;\r}\rMeshFilter meshFilter = this.GetComponent();\rMesh m = new Mesh();\rm.name = this.name;\rint hCount2 = widthSegments+1;\rint vCount2 = lengthSegments+1;\rint numTriangles = widthSegments * lengthSegments * 6;\rint numVertices = hCount2 * vCount2;\rVector3[] vertices = new Vector3[numVertices];\rVector2[] uvs = new Vector2[numVertices];\rint[] triangles = new int[numTriangles];\rint index = 0;\rfloat uvFactorX = 1.0f/widthSegments;\rfloat uvFactorY = 1.0f/lengthSegments;\rfloat scaleX = width/widthSegments;\rfloat scaleY = length/lengthSegments;\rfor (float y = 0.0f; y \u003c vCount2; y++)\r{\rfor (float x = 0.0f; x \u003c hCount2; x++)\r{\rif (orientation == Orientation.Horizontal)\r{\rvertices[index] = new Vector3(x*scaleX - width/2f - anchorOffset.x, 0.0f, y*scaleY - length/2f - anchorOffset.y);\r}\relse\r{\rvertices[index] = new Vector3(x*scaleX - width/2f - anchorOffset.x, y*scaleY - length/2f - anchorOffset.y, 0.0f);\r}\ruvs[index++] = new Vector2(x*uvFactorX, y*uvFactorY);\r}\r}\rindex = 0;\rfor (int y = 0; y \u003c lengthSegments; y++)\r{\rfor (int x = 0; x \u003c widthSegments; x++)\r{\rtriangles[index] = (y * hCount2) + x;\rtriangles[index+1] = ((y+1) * hCount2) + x;\rtriangles[index+2] = (y * hCount2) + x + 1;\rtriangles[index+3] = ((y+1) * hCount2) + x;\rtriangles[index+4] = ((y+1) * hCount2) + x + 1;\rtriangles[index+5] = (y * hCount2) + x + 1;\rindex += 6;\r}\r}\rm.vertices = vertices;\rm.uv = uvs;\rm.triangles = triangles;\rm.RecalculateNormals();\rmeshFilter.mesh = m;\rm.RecalculateBounds();\rif (addCollider) {\rthis.gameObject.AddComponent(typeof(BoxCollider));\r}\r//Selection.activeObject = plane;\r}\r}\rRelated links\rUnity fog of war tutorial. Part 1 (video tutorial)\rUnity custom particle system video tutorial. Making Christmas tree and curves\rUnity DLC system implementation tutorial\rQuaternions support in irrlicht engine\rBitbucket. Issue tracking system\r","link":"https://staraban.com/unity-fog-of-war-tutorial-vertex-shader/","section":"staraban","tags":["Unity","fog of war @en","shader @en","tutorial"],"title":"Unity fog of war tutorial. Part 2. Mobile version (web demo)"},{"body":"Эта статья - продолжение предыдущего урока по динамическому туману войны в Unity. Ранее предложенная мной техника тумана войны неплохо работает на мобильных устройствах, однако она довольно тяжела для них. Поэтому в этом небольшой уроке я напишу мобильный вариант тумана войны. Он будет выглядеть немного иначе, но работать будет быстрее.\nАвтор: Сергей Тарабан\nЧасть 1Часть 3\rДемо в веб плеере\rИспользуйте клавиши WASD или стрелки для движения игрока\nСкачать pack файл: fog_of_war_tutorial.unitypackage\nДля работы в Unity 5 нужно во всех шейдерах добавить alpha:blend к строке #pragma surface surf Lambert vertex:vert\nИзмененный шейдер апертуры\rДля ускорения работы я перенесу алгоритм расчета апертуры из фрагментного шейдера в вершинный. Это сделает шейдер менее тяжелым, т.к. теперь количество проходов шейдера будет зависеть от числа вершин в модели, а не от числа фрагментов. Модель в нашем случае - это плоскость тумана войны.\rСоздайте новый шейдер и скопируйте в него код ниже. Затем повесьте его на материал для плоскости тумана войны.\n// FogOfWarVertex shader\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \"Custom/FogOfWarGeom\" {\rProperties {\r_Color (\"Main Color\", Color) = (1,1,1,1)\r_MainTex (\"Color (RGB) Alpha (A)\", 2D) = \"white\"\r_FogRadius (\"FogRadius\", Float) = 1.0\r_FogMaxRadius (\"FogMaxRadius\", Float) = 0.5\r_Player1_Pos (\"UnitPos1\", Vector) = (0,0,0,1)\r_Player2_Pos (\"UnitPos2\", Vector) = (0,0,0,1)\r_Player3_Pos (\"UnitPos3\", Vector) = (0,0,0,1)\r}\rSubShader {\rTags { \"Queue\"=\"Transparent\" \"RenderType\"=\"Transparent\" }\rBlend SrcAlpha OneMinusSrcAlpha\rZWrite On\rCull Off CGPROGRAM\r#pragma target 3.0\r#pragma surface surf Lambert vertex:vert alpha:blend\rsampler2D _MainTex;\rfixed4 _Color;\rfloat4 _Player1_Pos;\rfloat4 _Player2_Pos;\rfloat4 _Player3_Pos;\rfloat _FogRadius;\rfloat _FogMaxRadius;\rstruct Input {\rfloat4 pos;\rfloat alpha;\rfloat2 location;\r};\rfloat powerForPos(float4 pos, float2 nearVertex);\rvoid vert (inout appdata_full vertexData, out Input outData)\r{\rfloat2 posVertex = mul (_Object2World, vertexData.vertex).xz;\routData.alpha = (1.0 - clamp(_Color.a + ( powerForPos(_Player1_Pos, posVertex) + powerForPos(_Player2_Pos, posVertex)\r+ powerForPos(_Player3_Pos, posVertex) ), 0, 1.0));\r}\rvoid surf (Input IN, inout SurfaceOutput o) {\ro.Albedo = _Color.rgb;\ro.Alpha = IN.alpha;\r}\rfloat powerForPos(float4 pos, float2 nearVertex) {\rfloat attenumat = clamp(_FogRadius - abs(length(pos.xz - nearVertex.xy)), 0.0, _FogRadius);\rif(attenumat \u003e _FogRadius*_FogMaxRadius) {\rattenumat = _FogRadius*_FogMaxRadius; }\rreturn (1.0/_FogMaxRadius)*(attenumat/_FogRadius);\r}\rENDCG\r}\rFallback \"Transparent/VertexLit\"\r}\rСкрипт генерации плоскости с переменным числом вершин\rТеперь нам нужно написать скрипт, который будет создавать плоскость с заданным числом вершин. За основу я взял пример из википедии, который создает плоскость с заданным числом вершин. Вы можете не переделывать этот скрипт, создать им плоскость и перейти дальше. Если вам нужно более гибкое решение то лучше переделать этот скрипт в MonoBehaviour и поместить его на плоскость.\rСкопируйте скрипт ниже и добавьте его к плоскости тумана войны. При старте приложения скрипт сгенерирует плоскость. Если на плоскости у вас стоял Mesh Collider, замените его на Box Collider с размером (1, 0.01, 1). Затем задайте нужный скейл объекту. Благодаря этому при создании плоскости она будет точно соответствовать размеру колайдера.\nusing UnityEngine;\rusing System.Collections;\rpublic class CreatePlaneScript : MonoBehaviour\r{\rpublic enum Orientation\r{\rHorizontal,\rVertical\r}\rpublic enum AnchorPoint\r{\rTopLeft,\rTopHalf,\rTopRight,\rRightHalf,\rBottomRight,\rBottomHalf,\rBottomLeft,\rLeftHalf,\rCenter\r}\rpublic int widthSegments = 1;\rpublic int lengthSegments = 1;\rpublic float width = 1.0f;\rpublic float length = 1.0f;\rpublic Orientation orientation = Orientation.Horizontal;\rpublic AnchorPoint anchor = AnchorPoint.Center;\rpublic bool addCollider = false;\rpublic bool createAtOrigin = true;\rpublic string optionalName;\rvoid Start()\r{\rBuildPlane();\r}\rvoid Update()\r{\rwidthSegments = Mathf.Clamp(widthSegments, 1, 254);\rlengthSegments = Mathf.Clamp(lengthSegments, 1, 254);\r}\rpublic void BuildPlane()\r{\rVector2 anchorOffset;\rstring anchorId;\rswitch (anchor)\r{\rcase AnchorPoint.TopLeft:\ranchorOffset = new Vector2(-width/2.0f,length/2.0f);\ranchorId = \"TL\";\rbreak;\rcase AnchorPoint.TopHalf:\ranchorOffset = new Vector2(0.0f,length/2.0f);\ranchorId = \"TH\";\rbreak;\rcase AnchorPoint.TopRight:\ranchorOffset = new Vector2(width/2.0f,length/2.0f);\ranchorId = \"TR\";\rbreak;\rcase AnchorPoint.RightHalf:\ranchorOffset = new Vector2(width/2.0f,0.0f);\ranchorId = \"RH\";\rbreak;\rcase AnchorPoint.BottomRight:\ranchorOffset = new Vector2(width/2.0f,-length/2.0f);\ranchorId = \"BR\";\rbreak;\rcase AnchorPoint.BottomHalf:\ranchorOffset = new Vector2(0.0f,-length/2.0f);\ranchorId = \"BH\";\rbreak;\rcase AnchorPoint.BottomLeft:\ranchorOffset = new Vector2(-width/2.0f,-length/2.0f);\ranchorId = \"BL\";\rbreak; case AnchorPoint.LeftHalf:\ranchorOffset = new Vector2(-width/2.0f,0.0f);\ranchorId = \"LH\";\rbreak; case AnchorPoint.Center:\rdefault:\ranchorOffset = Vector2.zero;\ranchorId = \"C\";\rbreak;\r}\rMeshFilter meshFilter = this.GetComponent();\rMesh m = new Mesh();\rm.name = this.name;\rint hCount2 = widthSegments+1;\rint vCount2 = lengthSegments+1;\rint numTriangles = widthSegments * lengthSegments * 6;\rint numVertices = hCount2 * vCount2;\rVector3[] vertices = new Vector3[numVertices];\rVector2[] uvs = new Vector2[numVertices];\rint[] triangles = new int[numTriangles];\rint index = 0;\rfloat uvFactorX = 1.0f/widthSegments;\rfloat uvFactorY = 1.0f/lengthSegments;\rfloat scaleX = width/widthSegments;\rfloat scaleY = length/lengthSegments;\rfor (float y = 0.0f; y \u003c vCount2; y++)\r{\rfor (float x = 0.0f; x \u003c hCount2; x++)\r{\rif (orientation == Orientation.Horizontal)\r{\rvertices[index] = new Vector3(x*scaleX - width/2f - anchorOffset.x, 0.0f, y*scaleY - length/2f - anchorOffset.y);\r}\relse\r{\rvertices[index] = new Vector3(x*scaleX - width/2f - anchorOffset.x, y*scaleY - length/2f - anchorOffset.y, 0.0f);\r}\ruvs[index++] = new Vector2(x*uvFactorX, y*uvFactorY);\r}\r}\rindex = 0;\rfor (int y = 0; y \u003c lengthSegments; y++)\r{\rfor (int x = 0; x \u003c widthSegments; x++)\r{\rtriangles[index] = (y * hCount2) + x;\rtriangles[index+1] = ((y+1) * hCount2) + x;\rtriangles[index+2] = (y * hCount2) + x + 1;\rtriangles[index+3] = ((y+1) * hCount2) + x;\rtriangles[index+4] = ((y+1) * hCount2) + x + 1;\rtriangles[index+5] = (y * hCount2) + x + 1;\rindex += 6;\r}\r}\rm.vertices = vertices;\rm.uv = uvs;\rm.triangles = triangles;\rm.RecalculateNormals();\rmeshFilter.mesh = m;\rm.RecalculateBounds();\rif (addCollider) {\rthis.gameObject.AddComponent(typeof(BoxCollider));\r}\r//Selection.activeObject = plane;\r}\r}\rПочитать по теме\rТуману войны в Unity. Часть 1 (видео урок) Unity DLC system implementation tutorial\rУправляемые системы частиц в движке Unity\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков.\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\r","link":"https://staraban.com/tuman-vojny-v-unity-chast-2-mobilnaja-versia/","section":"staraban","tags":["fog of war","tutorial @ru","unity @ru","шейдер"],"title":"Туман войны в Unity. Часть 2. Мобильная версия (демо)"},{"body":"Вернуться к статье (Урок часть 2)\nУрок часть 1 Урок часть 3\n:ad2: [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_vertex_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-vertex-web-player-demo/","section":"staraban","tags":[],"title":"Туман войны в Unity. Часть 2. Мобильная версия. Демо."},{"body":"","link":"https://staraban.com/categories/hardware/","section":"categories","tags":null,"title":"Hardware"},{"body":"","link":"https://staraban.com/tags/linux-@en/","section":"tags","tags":null,"title":"Linux @En"},{"body":"MSI NVidia GeForce 760 Twin Frozr Gaming is one of the best game video system. It\u0026rsquo;s advantages is noiseless cool system and hight performance. In this overview I\u0026rsquo;ll test it in Windows and Ubuntu Linux 12.04.\nAuthor: Sergey Taraban\n:ad:\rOptions.\rOptions are standard: cd dick, instruction, VGA adapter, power adapter.\rOptions\nVideo card has two 139 мм fan with dynamic speed regulation and maximum rotation rate 1500 rpm. Also it has msi designed aluminium radiator with five thermal tubes for best cooling. Card has two DVI and two HDMI outputs.\nVideo card MSI NVidia 760 Twin Frozr\nTesting system.\rProcessor: Intell Core i7-3770K 3.50 GHz (Ivy Bridge, D2, L3 8 Мбайт)\rCooling: CoolMaster V8\rMotherboard: Intel P8Z77-M PRO\rRAM: 2 x 4096 Mb DDR3 Corsair (800 МГц / 9-9-9-24-2t / 1.65V ))\rPower: 800W Aerocool STRIKE-X 800\rMonitor: DELL LCD 24'' U2412M Black (resolution 1920х1200)\rHDDs: SSD Kingston 120Gb HyperX, HDD Samsung 753LJ, HDD Samsung 321LJ, HDD Seagate Baracuda 3Tb (ST3000DM001-1CH166)\rTesting system\rWindows testing.\rSoftware:\rSystem: Windows 7 x64 SP1\rDriver: NVIDIA GeForce 331.65\rPrograms and testing conditions.\rTesting was performed at 1920x1200 resolution at maximum graphic level in:\rBattlefield 4 single\rBattlefield 4 multiplayer 32x32\rCompany of Heroes 2 (benchmark).\rMetro 2033 Last Light\rBattlefield 4\rTesting was performed at Ultra graphic level.\rGame is going smoothly. In single minimum fps 32, average 36. In multilayer the result is better - minimum fps 50, average 52 - 55.\nCompany of Heroes 2\rTesting was performed at maximum Very Hight graphic level by internal benchmark. Minimum fps 19, average 21.\rMetro 2033 Last Light.\rTesting was performed at maximum Very Hight graphic level with SSAA 4x and maximum tessellation on resolution 1920х1200. Minimum fps 15, average 17. After disabling SSAA fps grows to 48-52.\rSummary.\rSoftware\rmin fps\raverage fps\rBattlefield 4 single\r32 fps\r36 fps\rBattlefield 4 multiplayer\r50 fps\r53 fps\rCompany of Heroes 2 (benchmark)\r19 fps\r21 fps\rMetro 2033 Last Light\r15 fps\r17 fps\rUbuntu Linux testing.\rВ связи с набирающей популярность ОС Linux как игровой платформы, я протестирую её графические возможности на современных играх.\rDue to the increasingly popular of Linux operating system as a gaming platform, I will test MSI NVidia GeForce 760 on the modern games in Ubuntu.\nSoftware:\rSystem: Ubuntu 12.04 LTE 64 bit\rDriver: NVIDIA GeForce 319 (драйвер поставился при установке и не менялся)\rPrograms and testing conditions.\rTesting was performed at 1920x1200 resolution at maximum graphic level in:\rPhoronix Test Suite: unigine-heaven benchmark\rMetro 2033 Last Light\rPhoronix Test Suite: unigine-heaven\rGeForce 760 was good in this test. Minimum fps was 28.\rMetro 2033 Last Light.\rToday Metro 2033 game was released on Ubuntu Linux platform. On the present day it is the most heavy game for this platform.\rTesting was performed at maximum Very Hight graphic level. Minimum fps 30, average 45.\rVideo settings screen in Linux version has only scroll so you didn\u0026rsquo;t know what video feature game has. According to fps in Linux and Windows I think Linux version of Metro 2033 has not some graphic features which exist in windows version.\nGame is stable. I noticed a bug with screen shot capturing. Game is crashed by pressing f12 button. Looks like it is a Steam bug or game bug.\nSummary.\rSoftware\rmin fps\raverage fps\rPhoronix Test Suite: unigine-heaven\r28 fps\r32 fps\rMetro 2033 Last Light\r30 fps\r45 fps\rConclusions.\rVideo card works very well on both platforms in today's games. Game worked steadily, without glitches and crashes. However, maximum anti-aliasing and tessellation are too heavy settings for this graphics card.\rAs for the noise this MSI NVidia GeForce 760 Twin Frozr is almost noiseless. Under load it is a bit noisy, but in headphones it\u0026rsquo;s almost unheard of.\n","link":"https://staraban.com/testing-msi-nvidia-geforce-760-in-ubuntu-linux-and-windows/","section":"staraban","tags":["Linux @en","games @en"],"title":"Testing MSI NVidia GeForce 760 in Ubuntu Linux and Windows"},{"body":"","link":"https://staraban.com/tags/games/","section":"tags","tags":null,"title":"Games"},{"body":"","link":"https://staraban.com/tags/linux/","section":"tags","tags":null,"title":"Linux"},{"body":"","link":"https://staraban.com/categories/%D0%B6%D0%B5%D0%BB%D0%B5%D0%B7%D0%BE/","section":"categories","tags":null,"title":"Железо"},{"body":"MSI NVidia GeForce 760 Twin Frozr Gaming является одной из лучших игровых видеокарт по соотношению цена/качество на данный момент. Основным её достоинством считается очень тихая система охаждения и высокая производильность. В статье я проестирую её в Windows и Ubuntu Linux 12.04.\nАвтор: Сергей Тарабан\n:ad:\rКомплектация\rКомплектация стандартная: диск, инструкция, VGA переходник, переходники питания.\rКомплектация\nВидеокарта имеет два 139 мм вентиляторов с динамическим изменением скорости работы и максимальной частотой вращения до 1500 об/мин. Также у нее есть фирменный алюминиевый радиатор с пятью тепловыми трубками, обеспечивающих хорошее охлаждение. У видеокарты есть два DVI и два HDMI выхода.\nВидеокарта MSI NVidia 760 Twin Frozr\nТестовая система\rПроцессор: Intell Core i7-3770K 3.50 GHz (Ivy Bridge, D2, L3 8 Мбайт)\rОхлаждение: CoolMaster V8\rМатеринская плата: Intel P8Z77-M PRO\rОперативная память: 2 x 4096 Мбайт DDR3 Corsair (800 МГц / 9-9-9-24-2t / 1.65V ))\rБлок питания: 800W Aerocool STRIKE-X 800\rМонитор: DELL LCD 24'' U2412M Black (разрешение 1920х1200)\rДисковая подсистема: SSD Kingston 120Gb HyperX, HDD Samsung 753LJ, HDD Samsung 321LJ, HDD Seagate Baracuda 3Tb (ST3000DM001-1CH166)\rТестовая система\rТестирование в Windows\rПрограммное обеспечение:\rСистема: Windows 7 x64 SP1\rДрайверы видеокарты: NVIDIA GeForce 331.65\rИнструментарий и методика тестирования\rТестирование проводилось в разрешении 1920х1200 на максимальном уровне графики в:\rBattlefield 4 сингл плеер\rBattlefield 4 мультиплеер 32x32\rCompany of Heroes 2 (Бенчмарк).\rMetro 2033 Last Light\rBattlefield 4\rТест проводился на уровне графики Ультра.\rИгра идет плавно. В сингл плеере минимальная просадка фпс 32. Средний фпс 36. В мультиплеере результат выше - минимальный fps 50 и средний 52 - 55. Игра идет стабильно.\rCompany of Heroes 2\rТест проводился на максимальном уровне графики стандартным бенчмарком. Средний фпс 21. Увы игра пока еще слишком тяжелая для современного железа.\rMetro 2033 Last Light\rТест проводился на максимальном уровне графики Очень высокий с максимальной тесселяцией + SSAA 4x на разрешении 1920х1200. При отключении SSAA фпс поднимается до 48-52.\rСводка\rПриложение\rМинимальный fps\rСредний fps\rBattlefield 4 сингл плеер\r32 fps\r36 fps\rBattlefield 4 мультиплеер\r50 fps\r53 fps\rCompany of Heroes 2 (Бенчмарк)\r19 fps\r21 fps\rMetro 2033 Last Light\r15 fps\r17 fps\rТестирование в Ubuntu Linux\rВ связи с набирающей популярность ОС Linux как игровой платформы, я протестирую её графические возможности на современных играх.\rПрограммное обеспечение:\rСистема: Ubuntu 12.04 LTE 64 bit\rДрайверы видеокарты: NVIDIA GeForce 319 (драйвер поставился при установке и не менялся)\rИнструментарий и методика тестирования\rТестирование проводилось в разрешении 1920х1200 в:\rPhoronix Test Suite: unigine-heaven benchmark\rMetro 2033 Last Light\rPhoronix Test Suite: unigine-heaven\rGeForce 760 неплохо показала себя в этом тесте. Фпс не опускался ниже 28.\rMetro 2033 Last Light\rИгра Metro 2033 сегодня вышла на платформу Ubuntu Linux. На сегодняшний день она является самым тяжелой по графике игрой для этой платформы.\rТест проводился на максимальном уровне графики. Стоит заметить что в настройках графики есть только ползунок и нельзя точно сказать что и как выставлено в игре. Поэтмоу, исходя из уровня fps, можно предположить что в Linux версии не реализованы некоторые графические фичи, которые есть в Windows.\rИгра идет стабильно без глюков. Был замечен небольшой баг со снятием скриншотов. По кнопке f12 игра вылетала. Вероятно это баг Steam клиента или игры.\nСводка.\rПриложение\rМинимальный fps\rСредний fps\rPhoronix Test Suite: unigine-heaven\r28 fps\r32 fps\rMetro 2033 Last Light\r30 fps\r45 fps\rВыводы\rВидеокарта прекрасно показала себя на обоих платформах в современных играх. Игры работали стабильно, без глюков и вылетов. Однако на некоторых Windows играх при включении максимального сглаживания и тесселяции мощности видеокарты не хватает.\rЧто касается шума то в простое видеокарта практически безшумна. В нагрузке они немного шумит, но в найшниках её почти не слышно.\nПочитать по теме\rX Rebirth. Первые впечатления об игре.\rDishonored. Обзор и прохождение первых квестов.\rIttle Dew. Веселое приключение с пазлами и монстрами.\r","link":"https://staraban.com/testirovanie-msi-nvidia-geforce-760-na-sovremennyh-igrah/","section":"staraban","tags":["Linux","games"],"title":"Тестирование MSI NVidia GeForce 760 на современных играх в Ubuntu Linux и Windows"},{"body":"","link":"https://staraban.com/tags/project-anarchy-@ru/","section":"tags","tags":null,"title":"Project Anarchy @Ru"},{"body":"Project Anarchy - новый бесплатный игровой движок от Havok, который вполне может конкурировать с юнити. В этой статье я попробую сравнить эти два движка между собой и кратко рассмотрю достоинства и недостатки этих двух движков.\nАвтор: Сергей Тарабан\n:ad:\rЛицензия\rProject Anarchy, так же как и Unity, включает два типа лицензии: Free и Pro. На данный момент Project Anarchy не публикует цены на про версию. Еще мало информации по этой теме. Вам нужно отправлять письмо в техподдержку для выяснения деталей по Pro версии.\rUnity3D\rProject Anarchy\rUnity (цена: free)Для дистрибьюции на десктоп, мобильные устройства и веб\rProject Anarchy (цена: free)Только для дистрибьюции на мобильный устройства.\rProject Anarchy PC Exporter (цена: 499$)Расширение free весии для дистрибьюции на PC\rUnity Pro (цена: 1500$ или подписка 75$/мес) + дополнительные платные аддоныДля дистрибьюции на десктоп, мобильные устройства, консоли и веб\rProject Anarchy Pro (цена: неизвестна)Для дистрибьюции на десктоп, мобильные устройства и консоли\rПоддерживаемые платформы\rПлатформа\rUnity 3D\r(v. 4.2)\rProject Anarchy\r(v2013.2)\rWidows Desktop\rда\rда (pro)\rMac OS\rда\rда (pro)\rLinux (Ubuntu)\rда\rнет\rWeb\rда\rнет\riOS\rда\rда\rAndroid ARM7\rда\rда\rAndroid x86\rнет (анонсировано)\rда\rTizen\rнет (анонсировано)\rда\rWindows Phone 8\rда\rда (pro)\rBlackberry\rда\rнет (анонсировано)\rКонсоли (ps3/xbox/wii/psvita)\rда (pro)\rда (pro)\r(pro) - только в Pro версии\rЯзыки программирования\rProject Anarchy использует C++ для native разработки и Lua для скриптования в редакторе.\rUnity использует Mono и поддерживает только managed разработку на C#, JavaScript# and Boo.\rДля обоих движков можно писать плагины на native коде.\rПлатформы для разработки.\rПлатформы на которых работают инструменты разработчика.\rПлатформа\rUnity3D\r(v. 4.2)\rProject Anarchy\r(v2013.2)\rWidows Desktop\rда\rда\rMac OS\rда\rда*\rLinux (Ubuntu)\rда (через wine)**\rнет\r* - только билд. Инструменты разработки (vForge editor, exporter plugins, model viewer) не доступны.\r** - есть баги и часть функционала не работает\nСравнение версий по возможностям\rСравнение по версиям. Project Anarchy имеет много фич которых нет в Unity. Здесь представлены не все фичи, а только самые основные.\rFeature\rUnity3D Free\r(v. 4.2)\rProject Anarchy Free\r(v2013.2)\rUnity3D Pro\r(v. 4.2)\rProject Anarchy Pro\r(v2013.2)\rCustom Splash Screen\rнет\rнет\rда\rда\rModern GUI system\rнет (анонсировано)\rда ( Scaleform )\rнет (анонсировано)\rда ( Scaleform )\rLOD support\rнет\rда\rда\rда\rRender pipeline low-level access\rнет\rда\rда\rда\rGPU Skinning\rнет\rнет\rда\rнет\rRender-to-Texture Effects\rнет\rда\rда\rда\rReal-time shadows\rнет\rда\rда\rда\rAI System\rнет\rда\rнет\rда\rDestruction System\rнет\rнет\rнет\rда\rCloth Physic\rда\rнет\rда\rда\rNative Code Plugins Support\rда**\rда\rда\rда\rProfiler and GPU profiling\rнет\rда\rда\rда\rFBX importer\rда\rда*\rда\rда*\r* - не полностью поддерживается.\r** - только для мобильной разработки\rЗаключение\rProject Anarchy пока увы не может быть конкурентом Unity для разработки игр. В некоторых случаях он может быть лучшим решением чем Unity в контексте мобильной разработки, но не для веба и десктопа.\rДостоинством Project Anarchy является Scaleform GUI System, большее разнообразие играфических фич в бесплатной версии и чуть более продвинутая, чем PhysX, физика.\rВ остальном Project Anarchy более сложный, не такой гибкий и простой в освоении как Unity. В нем нет подобия Unit Store с кучей плагинов и различных пакетов. Также недостатком Project Anarchy является большая зависимость от платформы Windows. Все её средства разработки завязаны на Windows. Юнити имеет более кроссплатформенную архитектуру. Также пока неизвестна цена за Pro версию Project Anarchy.\nСсылки\rUnity сравнение лицензий.\rProject Anarchy features и сравнение лицензий.\rОбсуждение Project Anarchy для Linux.\rОбсуждение по Project Anarchy Pro версии.\rПочитать по теме\rИмплементация DLC системы в Unity.\rДелаем туман войны в Unity. Видеоурок.\r","link":"https://staraban.com/project-anarchy-vs-unity-sravnenie/","section":"staraban","tags":["Project Anarchy @ru","unity @ru"],"title":"Project Anarchy vs Unity 3D. Сравнение двух игровых движков."},{"body":"","link":"https://staraban.com/tags/project-anarchy/","section":"tags","tags":null,"title":"Project Anarchy"},{"body":"Project Anarchy (PA) - new free desktop and mobile game engine from Havok. In this article I\u0026rsquo;ll try to compare Project Anarchy and Unity 3D Engine and find out main advantages and disadvantages of these two engines.\nAuthor: Sergey Taraban\n:ad:\rLicensing\rProject Anarchy includes two standard licence versions: Project Anarchy Free and Project Anarchy Pro. Up to this moment Project Anarchy have not clear pricing information about Project Anarchy Pro. You need to write email to support for detailed information.\rUnity3D\rProject Anarchy\rUnity (price: free)\rFor desktop, web and mobile distribution\nProject Anarchy (price: free)\rFor mobile distribution only.\nProject Anarchy PC Exporter (price: 499$)\rPC distribution extension of Project Anarchy free version.\nUnity Pro (price: 1500$ or subscription $75/month) + additional per-platform packs (price: 1500$ or subscription $75/month and Windows Mobile free)\rFor desktop, web, mobile and console distribution\nProject Anarchy Pro (price: unknown)\rFor mobile, desktop and console distribution.\nDistribution platforms\rPlatform\rUnity 3D\r(v. 4.2)\rProject Anarchy\r(v2013.2)\rWidows Desktop\ryes\ryes (pro)\rMac OS\ryes\ryes (pro)\rLinux (Ubuntu)\ryes\rno\rWeb\ryes\rno\riOS\ryes\ryes\rAndroid ARM7\ryes\ryes\rAndroid x86\rno (announced)\ryes\rTizen\rno (announced)\ryes\rWindows Phone 8\ryes\ryes (pro)\rBlackberry\ryes\rno (announced)\rConsoles (ps3/xbox/wii/psvita)\ryes (pro)\ryes (pro)\r(pro) - only in Pro version\rProgramming languages\rProject Anarchy uses C++ for native developing and Lua for scripting in editor.\rUnity uses Mono platform and supported C#, JavaScript# and Boo.\rYou can right native code plugins for both of them.\rDevelopment platforms\rPlatform where engine development tools works.\rPlatform\rUnity3D\r(v. 4.2)\rProject Anarchy\r(v2013.2)\rWidows Desktop\ryes\ryes\rMac OS\ryes\ryes*\rLinux (Ubuntu)\ryes (using wine)**\rno\r* - limited edition. build only. Development tools (vForge editor, exporter plugins, model viewer) not supported.\r** - has some bugs and limitation\nVersion features comparison\rComparison between version of this engines. Project Anarchy has a lot of features disabled or missing in Unity.\rFeature\rUnity3D Free\r(v. 4.2)\rProject Anarchy Free\r(v2013.2)\rUnity3D Pro\r(v. 4.2)\rProject Anarchy Pro\r(v2013.2)\rCustom Splash Screen\rno\rno\ryes\ryes\rModern UI system\rno (announced)\ryes (Scaleform)\rno (announced)\ryes (Scaleform)\rLOD support\rno\ryes\ryes\ryes\rRender pipeline low-level access\ryes\ryes\ryes\ryes\rGPU Skinning\rno\rno\ryes\rno\rRender-to-Texture Effects\rno\ryes\ryes\ryes\rReal-time shadows\rno\ryes\ryes\ryes\rAI System\rno\ryes\rno\ryes\rDestruction System\rno\rno\rno\ryes\rCloth Physic\ryes\rno\ryes\ryes\rNative Code Plugins Support\ryes**\ryes\ryes\ryes\rProfiler and GPU profiling\rno\ryes\ryes\ryes\rFBX importer\ryes\ryes*\ryes\ryes*\r* - not fully supported\r** - only for mobile\rConclusions\rFor now Project Anarchy is not a competitor for Unity engine for game development. In some cases it may be a better solution then Unity in mobile development. But for web and desktop development Unity is better solution now. Advantage of Project Anarchy is Scaleform GUI System, additional graphic features and a bit more powerful physic system.\rProject Anarchy is more complicated, not so flexible and not so easy to use like Unity. It has not Unit Store like service with a lot of extensions and assets. Also Project Anarchy is huge dependence from a Windows platform. All its development tools use Windows technologies. Unity has more cross platform architecture. Price for Project Anarchy Pro version is unknown now.\nLinks\rUnity license comparison.\rProject Anarchy features and license comparison.\rDiscussion Project Anarchy for Linux.\rDiscussion about Project Anarchy Pro version.\rOther interesting articles\rDLC system inplementation in Unity.\rFog of war in Unity. Video tutorial.\rAuthor: Sergey Taraban\n","link":"https://staraban.com/project-anarchy-vs-unity-comparison/","section":"staraban","tags":["Project Anarchy","Unity"],"title":"Project Anarchy vs Unity 3D. A comparison of two modern game engines."},{"body":"Tutorial part 1 Tutorial part 2 :ad2: [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-webplayer-demo/","section":"staraban","tags":[],"title":"Unity fog of war webplayer demo"},{"body":":ad2: Видео урок [WP_UnityObject src=\u0026quot;/resources/fog-of-war-unity-demo/fog_of_war_demo.unity3d\u0026quot; width=\u0026ldquo;940\u0026rdquo; height=\u0026ldquo;600\u0026rdquo;/]\n","link":"https://staraban.com/unity-fog-of-war-web-player-demo/","section":"staraban","tags":[],"title":"Туман войны в Unity. Демо."},{"body":"Подробный обзор и прохождение забавной инди игры Ittle Dew.\nАвтор: Сергей Тарабан\n:ad:\rНеизвестный остров\nIttle Dew - двухмерная инди игра от студии Ludosity. Наша задача ходить по острову и разгадывать пазлы, открывать новые локации и сражаться с разнообразными монстрами. Игра по стилю похожа на игру Zelda Wind Waker.\nГлавный герой - смелая маленькая девочка по имени Ittle Dew. У нее есть верный друг - летающая лиса, которая любит прикладываться к зелью восстановления здоровья. Начинается игра с того, что они плывут на плоту и их выбрасывает на неизвестный остров.\nУправление\rУправление и игре Ittle Dew реализовано только клавиатурой.\rстрелки - перемещение\rM - карта локации ( мира )\rНа пути в замок T - подсказка от летающей лисы Esc - главное меню Z - использовать предмет 1, кнопка пропуска A - использовать предмет 2 S - использовать предмет 3\nТут 1 -й предмет в слоте - самый нижний, а все остальные идут по часовой стрелке\rГеймплей\rСразу же после высадки у нас нет другого пути как пойти в пещеру - черный проем в стене. Сразу же мы получаем наше первое оружие - палку в первом слоте. Палкой мы можем бить мобов.\rС мобов после смерти ничего кроме пополнения жизни не выпадает.\rВ каждой комнате читаем доски. Там много полезной информации.\nМиникарта\nОсновная механика игры - это комнаты с дверями, которые нужно открывать. Решая головоломки можно открыть какие то из дверей или все двери в комнате. Если вы выйдете из комнаты до того как пройдете головоломку в ней - комната сбросится в начальное состояние. Вы также можете её сбросить через главное меню. Чтобы пройти комнату нужно выполнить ряд условий. Чтобы понять какие условия нужно выполнить просто подойдите к препятствию и ударьте по нему палкой или любым оружием. Игра сразу же покажет вам что надо сделать.\nВ игре есть множество разных объектов, с которыми можно взаимодействовать: разные блоки, огненные ямы, бомбы, кристаллы и многое другое. Например, каменный блок можно двигать на одну клетку, а ледяные - нет. Кроме того есть разные типы земли, по которой могут двигаться далеко не все блоки. Например блоки нельзя двигать по песку, хотя игрок может по нему ходить, например песок. С другой стороны есть поверхность, по которой могут ездить блоки но не может ходить игрок. Оружие у вас в руках можно поджигать от ближайшего источника огня и зажигать ею бомбы или костры.\nПрохождение\rМагазин старого пирата\rЛавка пирата\rПройдя обучение мы попадаем на главную дорогу. Читаем указатели и идем к замку - все время вверх. На одной из локаций вам попадется пиратский магазин. Старый пират предлагает нам на продажу разные предметы, но денег у нас нет потому идем дальше в замок.\nПервая наша цель - это купить Огненный клинок за 100 монет. Он лучше наносит повреждения + выполняет функцию горящей палки.\nЗамок\rВ замке находим единственную доступную дверь в тронном зале. Дальше начинаются комнаты с блоками. Двигаем их, где нужно поджигаем ямы с ветками. В конце нас ждет битва с несложным боссом - кактусом. Пройдя дальше находим сундук и получаем наши первые 100 золотых.\rСундук с монетами\nПосле прохождения этой локации открывает портал на задний двор пиратского магазина. Там мы покупаем огненный меч. На самом деле пират не продает сам меч, он как бы говорит нам где его найти. Поэтому далее нас перекидывает в жерло вулкана.\nВулкан\rТут мы встречаем странного мудрого дедушку, который вводит нас в курс дела как пользоваться огненным мечем. Его можно взять в соседней комнате. Далее мы ходим внутри вулкана и решает головоломки. Например в одной из них надо убить всех мобов чтобы дверь открылась. Самый опасный противник - это живые лавовые камни, которые ездят по рельсам и стреляют в нас бомбами. Убить их можно только поставив блок на рельсы.\rВнутри вулкана\nВ конце нас ждет первый босс - конус в маске со шпагой, который вызывает нас на бой. Главное не становиться с ним в одну линию. Переходим от костра к костру и поджигаем их все, с неба падает бомба которую надо взорвать, когда враг будет рядом. После пары взрывов он умрет и мы получим прибавку к жизни.\nЗорро\nДальше проходим насколько пещер внутри вулкана и выходим на поверхность. Некоторые пещеры проходить не обязательно или невозможно. Например, есть пещера где стоят четыре ледяных блока, а слева сундук. Нужно потушитьогонь чтобы до него добраться. Уровень никак не пройти тремя глыбами, а четвертую глыбу вам нужно разбить чтобы двигать остальные. Если вы спросите совета у летающей лисы, она скажет, что уровень проходится только огненным мечем, т.е. его реально пройти. Это пример того что не стоит ей верить все время.\nИдем влево пока не выйдем на главную дорогу к замку.\nЗамок. Уровень 1\rИдем снова в замок. Т.к. теперь у нас есть огненный меч, мы можем пройти комнату слева от прохода, где лежат три бомбы и попасть в подземелье замка. Дальше наша задача собрать 200 монет на магический посох. Нам будет встречаться много сундуков в которых будут карточки или увеличение жизни вместо золота. Самым опасным противником здесь будут лисицы с метательными топорами. Убить их трудно, поэтому проще обходить их. В конце нашего путешествия мы встретим второго боса - кактуса. Убить его не составит особого труда.\rНепроходимый уровень\nПомните, что на уровне необязательно можно открыть все двери. Например если вы видите места с зеркалами - это уровень для волшебного жезла которого у вас пока нет. Также обращайте внимания на кристаллы. У каждого кристалла разное время активности, поэтому нужно подбирать разную последовательность ударов по ним.\nТут мы так же имеем шанс встретить танцующую редьку - монстра. Это полезный моб который поможет решить некоторые головоломки. Он может активировать кристаллы и двигать блоки.\nЕще тут же вы встретите летающие головы, которые боятся высоты :) Их вы не можете пока убить. Но некоторые двери требуют чтобы вы из победили.\nПосле того как вы найдете два сундука и соответственно откроете два портала вы получите 200 золота. Можно идти покупать зеленую волшебную палочку, он же посох телепортации.\nВолшебный лес\rПосле того как мы купим волшебный посох мы окажемся в лесу. Там мудрый старец расскажет нам как пользоваться этим волшебным жезлом.\rУ посоха есть два заклинания. Первый создает блок аналогичный по свойствам каменному. Второй стреляет магическим шаром - все существа или предметы которых он коснется будут телепортированы в меcто, где стоит зеленый блок. Телепортировать нельзя другие блоки. Таже можно убить противника, телепортировав его на землю с кольями.\nШаман\nИдем дальше и выходим в сад. Там, решая головоломки, встречаем следующего боcса - шамана. Шаман говорит, что она великий маг и предлагает потягаться с ней в магии. Стратегия тут простая. Шаман атакует шаром, лучем света и магической турелью. Просто ставите зеленый блок на краю карты на уровне шамана. Когда шаман атакует турелью и лазером - прячетесь за блок. После атаки лазером забегаете с противоположной стороны и как только она атакует шаром, смотрите куда он летит. Если он летит к вам, стреляете в него из жезла. Он телепортируется на месте блока и летит в шамана. Так нужно cделать 3 раза и шаман будет побежден. Так мы победили шамана и получили его сундук где получили прибавку к жизни.\nИдем вниз потом влево через большое поле с кактусами. Тут можно заглянуть в пещеры и получить прибавку к жизни или карточки.\nВозвращаемся к пирату. У входа обнаруживаем наш огненный меч в мусорке, берем его себе обратно. Теперь нам нужно собирать золото на ледяной жезл. И попутно найти артефакт, за который пират обещал отдать плот. Артефакт должен быть где то на уровне 2 в замке.\nПазл проходится жезлом телепортации\nМожете пройтись по старым локациям и пооткрывать сундуки, но там вы не найдете ничего кроме карточек с описанием флоры и фауны острова.\nНам нужно в замок на уровень 2. Для этого найдите крайнюю лестницу в замке. Можете не проходить комнаты снова, воспользуйтесь порталами на заднем дворе магазина. Я выбрал второй снизу справа, но можно пройти и через первый снизу справа. Все равно вы попадете в ту же комнату с летающими головами.\nЗамок. Уровень 2\rПоднявшись на уровень 2 нам нужно открыть дверь вверху. Чтобы её открыть нужно убить летающих голов. Мечем убить их нельзя поэтому, а все блоки с шипами нам пришлось заблокировать. Убить их у меня получилось так. Становитесь на их пути. Как только они начинают переходить на вашу клетку, ставите на нее зеленый блок телепортации и отходите на другую клетку. Это их убьет.\rТак мы открыли дверь в следующую комнату.\nПазл с зеркалами\nТам находится пазл выше с зеркалами, который решается так. Нужно поставить зеленый блок сверху от первого кристалла как на рисунке. Затем спуститесь вниз и выстрелите вверх в зеркало. Дальше идите по диагонали ко второму кристаллу. Идея в том, что нужно успеть ударить по второму кристаллу до того как вас телепортирует к первому. Как только вас телепортировало к первому кристаллу бьете по нему и открывается дверь к третьей платформе внизу. На нее надо поставить ледяной блок.\nПродолжение следует\u0026hellip;\nАвтор: Сергей Тарабан\nПочитать по теме\rAssassin’s Creed 4. Советы по игре\rX Rebirth. Первые впечатления об игре\rDishonored. Обзор и прохождение первых квестов\r","link":"https://staraban.com/ittle-dew-obzor-i-prohozhdenie/","section":"staraban","tags":["игры","прохождение"],"title":"Ittle Dew. Веселое приключение с пазлами и монстрами"},{"body":"В этом видео уроке я расскажу о том как сделать туман войны в юнити. Для моего варианта тумана войны не нужен рендеринг в текстуру поэтому он может быть использован в бесплатной версии Unity. Также он неплохо работает на мобильных устройствах. Во второй части урока я расскажу как оптимизировать его для мобильных устройств.\nАвтор: Сергей Тарабан\n:ad:\rДемо в веб плеере.\rИспользуйте клавиши WASD или стрелки для движения игрока\nСкачать pack файл: fog_of_war_tutorial.unitypackage\nДля работы в Unity 5 нужно во всех шейдерах добавить alpha:blend к строке #pragma surface surf Lambert vertex:vert\nВидеоурок по туману войны.\rШейдер апертуры для тумана войны.\rТут я написал шейдер который я использовал в видеоуроке.\r// FogOfWar shader\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \u0026ldquo;Custom/FogOfWar\u0026rdquo; { Properties { _Color (\u0026ldquo;Main Color\u0026rdquo;, Color) = (1,1,1,1) _MainTex (\u0026ldquo;Base (RGB) Trans (A)\u0026rdquo;, 2D) = \u0026ldquo;white\u0026rdquo; {} _FogRadius (\u0026ldquo;FogRadius\u0026rdquo;, Float) = 1.0 _FogMaxRadius(\u0026ldquo;FogMaxRadius\u0026rdquo;, Float) = 0.5 _Player1_Pos (\u0026quot;_Player1_Pos\u0026quot;, Vector) = (0,0,0,1) _Player2_Pos (\u0026quot;_Player2_Pos\u0026quot;, Vector) = (0,0,0,1) _Player3_Pos (\u0026quot;_Player3_Pos\u0026quot;, Vector) = (0,0,0,1) }\nSubShader { Tags {\u0026ldquo;Queue\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; \u0026ldquo;IgnoreProjector\u0026rdquo;=\u0026ldquo;True\u0026rdquo; \u0026ldquo;RenderType\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo;} LOD 200 Blend SrcAlpha OneMinusSrcAlpha Cull Off\nCGPROGRAM #pragma surface surf Lambert vertex:vert alpha:blend\nsampler2D _MainTex; fixed4 _Color; float _FogRadius; float _FogMaxRadius; float4 _Player1_Pos; float4 _Player2_Pos; float4 _Player3_Pos;\nstruct Input { float2 uv_MainTex; float2 location; };\nfloat powerForPos(float4 pos, float2 nearVertex);\nvoid vert(inout appdata_full vertexData, out Input outData) { float4 pos = mul(UNITY_MATRIX_MVP, vertexData.vertex); float4 posWorld = mul(_Object2World, vertexData.vertex); outData.uv_MainTex = vertexData.texcoord; outData.location = posWorld.xz; }\nvoid surf (Input IN, inout SurfaceOutput o) { fixed4 baseColor = tex2D(_MainTex, IN.uv_MainTex) * _Color;\nfloat alpha = (1.0 - (baseColor.a + powerForPos(_Player1_Pos, IN.location) + powerForPos(_Player2_Pos, IN.location) + powerForPos(_Player3_Pos, IN.location)));\no.Albedo = baseColor.rgb; o.Alpha = alpha; }\n//return 0 if (pos - nearVertex) \u0026gt; _FogRadius float powerForPos(float4 pos, float2 nearVertex) { float atten = clamp(_FogRadius - length(pos.xz - nearVertex.xy), 0.0, _FogRadius);\nreturn (1.0/_FogMaxRadius)*atten/_FogRadius; }\nENDCG }\nFallback \u0026ldquo;Transparent/VertexLit\u0026rdquo; }\nСкрипт тумана войны для игроков в сцене.\rusing UnityEngine;\rusing System.Collections;\rpublic class FogOfWarPlayer : MonoBehaviour {\npublic Transform FogOfWarPlane;\rpublic int Number = 1;\r// Use this for initialization\rvoid Start () {\r}\r// Update is called once per frame\rvoid Update () {\rVector3 screenPos = Camera.mainCamera.WorldToScreenPoint(transform.position);\rRay rayToPlayerPos = Camera.mainCamera.ScreenPointToRay(screenPos);\rint layermask = (int)(1\u0026lt;\u0026lt;8);\rRaycastHit hit;\rif(Physics.Raycast(rayToPlayerPos, out hit, 1000, layermask)) {\rFogOfWarPlane.GetComponent\u0026lt;Renderer\u0026gt;().material.SetVector(\u0026quot;_Player\u0026quot; + Number.ToString() +\u0026quot;_Pos\u0026quot;, hit.point);\r}\r}\r}\nПочитать по теме\rТуман войны в Unity. Часть 2. Мобильная версия.\rUnity DLC system implementation tutorial\rУправляемые системы частиц в движке Unity\rКватернионы - для чего нужны и как их добавить в движок Irrlicht\rСсылки\rАрхив стандартных шейдеров для Unity\rКоммерческий вариант тумана войны.\rЕще один урок по туману войны\r","link":"https://staraban.com/tuman-vojny-v-unity/","section":"staraban","tags":["fog of war","tutorial @ru","unity @ru","шейдер"],"title":"Туман войны в Unity. Часть 1 (видеоурок)"},{"body":"In this video tutorial I want to tell you about fog of war implementation in Unity engine. This technique does not require rendering to texture so it can be used in Unity free version. It also works well in mobile devices.\nAuthor: Sergey Taraban\n:ad:\rPart 2. Mobile version Part 3. Static and dynamic fog of war using render to texture\rUnity web player demo.\rUse WASD or Arrow buttons for moving\nDownload pack file: fog_of_war_tutorial.unitypackage\nFog of war tutorial.\rFog of war aperture shader.\rHere is the shader I used in this tutorial for creating aperture on the fog of war plane.\r// FogOfWar shader\r// Copyright (C) 2013 Sergey Taraban //\r// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r//\rShader \u0026ldquo;Custom/FogOfWar\u0026rdquo; { Properties { _Color (\u0026ldquo;Main Color\u0026rdquo;, Color) = (1,1,1,1) _MainTex (\u0026ldquo;Base (RGB) Trans (A)\u0026rdquo;, 2D) = \u0026ldquo;white\u0026rdquo; {} _FogRadius (\u0026ldquo;FogRadius\u0026rdquo;, Float) = 1.0 _FogMaxRadius(\u0026ldquo;FogMaxRadius\u0026rdquo;, Float) = 0.5 _Player1_Pos (\u0026quot;_Player1_Pos\u0026quot;, Vector) = (0,0,0,1) _Player2_Pos (\u0026quot;_Player2_Pos\u0026quot;, Vector) = (0,0,0,1) _Player3_Pos (\u0026quot;_Player3_Pos\u0026quot;, Vector) = (0,0,0,1) }\nSubShader { Tags {\u0026ldquo;Queue\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo; \u0026ldquo;IgnoreProjector\u0026rdquo;=\u0026ldquo;True\u0026rdquo; \u0026ldquo;RenderType\u0026rdquo;=\u0026ldquo;Transparent\u0026rdquo;} LOD 200 Blend SrcAlpha OneMinusSrcAlpha Cull Off\nCGPROGRAM #pragma surface surf Lambert vertex:vert\nsampler2D _MainTex; fixed4 _Color; float _FogRadius; float _FogMaxRadius; float4 _Player1_Pos; float4 _Player2_Pos; float4 _Player3_Pos;\nstruct Input { float2 uv_MainTex; float2 location; };\nfloat powerForPos(float4 pos, float2 nearVertex);\nvoid vert(inout appdata_full vertexData, out Input outData) { float4 pos = mul(UNITY_MATRIX_MVP, vertexData.vertex); float4 posWorld = mul(_Object2World, vertexData.vertex); outData.uv_MainTex = vertexData.texcoord; outData.location = posWorld.xz; }\nvoid surf (Input IN, inout SurfaceOutput o) { fixed4 baseColor = tex2D(_MainTex, IN.uv_MainTex) * _Color;\nfloat alpha = (1.0 - (baseColor.a + powerForPos(_Player1_Pos, IN.location) + powerForPos(_Player2_Pos, IN.location) + powerForPos(_Player3_Pos, IN.location)));\no.Albedo = baseColor.rgb; o.Alpha = alpha; }\n//return 0 if (pos - nearVertex) \u0026gt; _FogRadius float powerForPos(float4 pos, float2 nearVertex) { float atten = clamp(_FogRadius - length(pos.xz - nearVertex.xy), 0.0, _FogRadius);\nreturn (1.0/_FogMaxRadius)*atten/_FogRadius; }\nENDCG }\nFallback \u0026ldquo;Transparent/VertexLit\u0026rdquo; }\nFog of war script for players.\rusing UnityEngine;\rusing System.Collections;\rpublic class FogOfWarPlayer : MonoBehaviour {\npublic Transform FogOfWarPlane;\rpublic int Number = 1;\r// Use this for initialization\rvoid Start () {\r}\r// Update is called once per frame\rvoid Update () {\rVector3 screenPos = Camera.mainCamera.WorldToScreenPoint(transform.position);\rRay rayToPlayerPos = Camera.mainCamera.ScreenPointToRay(screenPos);\rint layermask = (int)(1\u0026lt;\u0026lt;8);\rRaycastHit hit;\rif(Physics.Raycast(rayToPlayerPos, out hit, 1000, layermask)) {\rFogOfWarPlane.GetComponent\u0026lt;Renderer\u0026gt;().material.SetVector(\u0026quot;_Player\u0026quot; + Number.ToString() +\u0026quot;_Pos\u0026quot;, hit.point);\r}\r}\r}\nAuthor: Sergey Taraban\nRelated links\rUnity fog of war tutorial. Part 2. Mobile version 2D Game Tutorial. Part 1. Character creating and tinting\rUnity DLC system implementation tutorial\rUnity custom particle system video tutorial. Making Christmas tree and curves\rQuaternions support in irrlicht engine\rBitbucket. Issue tracking system\r","link":"https://staraban.com/unity-fog-of-war-video-tutorial/","section":"staraban","tags":["Unity","fog of war @en","shader @en","tutorial"],"title":"Unity fog of war video tutorial with webplayer demo"},{"body":"In this article I\u0026rsquo;ll tell you how I implemented Downloadable content system (DLC system) in Unity for one of my game and overview some problems and features.\nAuthor: Sergey Taraban\n(Russian version of this article)\rStatement of the problem\rThere is a shop in game. Player buy items there using in-game or real currency. Shop has about 200 items. When player enters game the first time it has only 20 items. If network connection available game downloads DLC in the background. Also, we have a level data in our DLC. Every game level have textures and .asset files. New location also should be added via DLC.\rResource loading from DLC bundle should be synchronous.\rPlatform: iOS (iPhone 3GS and hight) and Android (Samsung Galaxy S and hight).\rWhat content DLC should contain and how to manage it.\rThe game items are completely determined in the file itemdata.txt, which contains information about things and their textures. So, in each DLC bundle should be itemdata.txt file with a set of those things that are in the DLC + texture units for these things. And, when the store will ask the database things Merge all text files with all the DLC and give him the file.\rSimilarly, the locations locationdata.txt file contain list of characteristics and locations + textures and asset files for them.\nThe corresponding C # code for loading resources in the game logic:\npublic String GetItemDataBase() {\rif(DLCManager.isDLCLoaded() == true) {\r//stick all the files in all downloaded DLC and return as a string\rString itemListStr = DLCManager.GetTextFileFromAllDLCs(“itemdata”);\rreturn itemListStr;\r}\relse {\r//load file by default\rTextAsset itemTextFile = Resources.Load(“itemdata”) as TextAsset;\rreturn itemTextFile.text;\r}\rreturn String.Empty;\r}\rSimilarly for texture loading request we check his availability in DLC bundle. If it there we load it and if not load it from local game resources or some default texture in worse case.\npublic Texture GetTexture(string txname) {\rTexture tx = null;\rif(DLCManager.isDLCLoaded() == true) {\rtx = DLCManager.GetTextureFromDLC(txname);\r}\rif(tx == null) {\rtx = Resources.Load(txname) as Texture;\r}\rif(tx == null) {\rAssert(tx, “Texture not find: ” + txname);\rtx = Resources.Load(kDefaultItemTexturePath) as Texture;\r}\rreturn tx;\r}\rSimilarly for .asset files we have GetAsset(string assetName) function. It has the same implementation so we skip it.\nDLC bundle file.\rWe have knew now about content of our DLC bundle. It remains to define the form of content storing for DLC bundle.\rFirst variant – store DLC as zip archive. In every archive – text file + N textures. Textures should be in PVRTC format for saving video memory (VRAM). Here we got out first problem – Unity supports textures loading from the file system only in PNG or JPG format [link]. Then you may write pixel data to PVRTC texture [link]. This is slow process because you need encode pixel data to PVR format in real-time. Inside DLC we are planning to store .asset files, and may be scene files (.scene) in the future. So this method not for us.\nSecond variant – using AssetBundle feature. According to documentation AssetBundle have a lot of useful features:\nMay contain any Unity data including PVRTC compressed texture (right up our street).\rArchive with good compression\rSimple and easy to use\rSupport version control and hash sum (when loaded by LoadFromCacheOrDownload)\rThe one minus is AssetBundle required Unity Pro version and did not support encryption. We decided to choose this solution because it obviously more attractive and let us solve our issues.\rImplementation.\rFor a start I create basic working version of DLC system. All 200 item\u0026rsquo;s textures and level files was packed into one AssetBundle and transferred to remote server. File have 200 mb size. I packed AssetBundle by my Unity Editor script for asset bundle generation.\nAfter start application we made this steps:\nFirst we need to download DLC from remote server. According to Unity manual write downloaded files into file on disk for future usage:\r// Start a download of the given URL using assetBundle version and CRC-32 Checksum\rWWW www = WWW.LoadFromCacheOrDownload (urlToAssetBundle, version, crc32Checksum); // Wait for download to complete yield return www;\n// Get the byte data byte[] byteData = www.bytes;\n// Here you may add your custom description method byteData = MyDescriptionMethod(byteData);\n//save byteData in file with .unity3d extension \u0026hellip;\n// Frees the memory from the web stream www.Dispose();\n//DLC have been loaded successfully and now we can use it in game DLCManager.SetDLCLoaded(true); In this code we are likely to get a c low memory crash in iPhone 3GS, because class WWW not support buffered downloading and stores all loaded information in memory. We\u0026rsquo;ll talk about this issue a little later. While remember this moment and move on. Loading DLC data. Now we need to inplement GetTextureFromDLC(), GetAssetFromDLC() и GetTextFileFromAllDLCs(). Definition of last ones I ommit because of it has no different from the first function except of resource it working with. Main function of GetTextureFromDLC is synchronous loading texture by name from DLC. I defined it here:\npublic Texture GetTextureFromDLC(String textureName) {\r//load DLC file from file system. We can use only synchronous method\rAssetBundle asset = AssetBundle.CreateFromFile(pathToAssetBundle);\r//synchronous texture loading from DLC bundle\rTexture texture = asset.Load(textureName) as Texture;\r//unloading DLC bundle from memory without deleting texture object\rasset.Unload(false);\rreturn texture;\r}\rThe code above is the only one possible way to load a resource synchronously from AssetBundle. And there is lots of nuances. Let me overview them in order.\rAssetBundle.CreateFromFile function according to documentation loads asset from file system synchronously. But \u0026ldquo;Only uncompressed asset bundles are supported by this function\u0026rdquo;. Thus, it is only possible to load uncompressed AssetBundle synchronously. This will significantly increase traffic and loading time of DLC from the server. In addition, Unity does not support conversion of AssetBundle compressed to uncompressed, so it is impossible get to download a compressed bundle, and then decompress it on the client side.\nThe reader may wonder , why not download AssetBundle asynchronously , for example, by function LoadFromCacheOrDownload, and then just take required resources simultaneously from it. After all, it is logical that AssetBundle, loaded from the file system, only loads the file header, and therefore should not takes a lot of memory.\nHowever, this was not the case. Loaded AssetBundle stored in memory with all content in uncompressed form. Thus, to load a one texture from 200, Unity loads all textures into memory, give you one and then release the memory for other 199 textures. We found this out experimentally by measurements of the memory on the devices. It is unacceptable for mobile devices.\nSummary\rImplementation below is the only one way we found to implement a synchronous download DLC and resources from it.\rIt requires uncompressed AsssetBundle and, as a result, large losses of time and bandwidth when downloading DLC.\rOption is suitable for relatively small AssetBundle-s, as consumes a lot of memory.\rWork on the mistakes.\rLet's try to take into account all the previous problems and find solutions for them.\rWe may solve problem with loading of huge AssetBundles by two ways: Проблема с загрузкой больших assetBundle-ов можно решить двумя способами. First way – by using WebClient class. But I have a problem with it in iOS. WebClient not able to download anything in iOS, but on desktop it work properly. Second way – use native iOS function. For example, NSURLConnection for iOS or URLConnection for Android, which support buffered downloading to file on disk.\nBut it is not big problem because we need to decrease loading time.\nMore serious problem is synchronous AssetBundle download. Is hould be uncompressed and take little place in memory. So we need to divide our huge asset bundle to many separate parts. However, if we divide by too small files, there will be many ones, and it would greatly increase the load time. So we still have to keep them compressed for a better time-saving and traffic consumption.\nTo solve this problem it was decided to use external compressed library. Was chosen an open library compressor 7zip for C#.\nThe next our steps:\nCreate AssetBundle with option BuildOptions.UncompressedAssetBundle.\rThen bundle was encripted end compressed by activator and was uploaded to the remote server.\rDuring game working I created separate game thread in background. It download DLC bundles from server, uncompress them and same in folders in file system.\rHere we got one more problem. Because we use compressed AssetBundle we cannot use LoadFromCacheOrDownload function. So, now we have to define our own version control system for DLC.\rOn server in folder with DLC we made file named dlcversion. It contains all DLC files names in this folder and md5 hash of them. We compute this hash when upload file on server. On client side we have the same file and on start client compare this file with file on server. If some node in client dlcversion was different from server, then we upload new DLC from server.\nOnce the new DLC file was downloaded and unzipped his hash once again checked with the server hash, and only after that we rewrite client DLC file by new downloaded DLC from server.\nThis system has been successfully implement and it works well. The only negative we had is a small drawdown of fps (lags) when downloading and unpacking DLC in the backgrounds. And also slightly increased peak memory consumption of the application.\nThanks for reading. I will be glad to answer your questions.\nAuthor: Sergii Taraban\nOther interesting articles\rAsset Bundle export script for simple DLC generation\rUnity fog of war video tutorial with webplayer demo\rUnity custom particle system video tutorial. Making Christmas tree and curves\rQuaternions support in irrlicht engine\rBitbucket. Issue tracking system.\r","link":"https://staraban.com/unity-dlc-system-implementation-problems-and-features-tutorial/","section":"staraban","tags":["AssetBundle","DLC system","Unity","tutorial"],"title":"Unity DLC system implementation tutorial. Problems and features overview."},{"body":"","link":"https://staraban.com/tags/dishonored/","section":"tags","tags":null,"title":"Dishonored"},{"body":"Игра Dishonored напоминает Англию начала 20-го века смешанная со стим панком и магией. Мы играем за Корво Аттано, лорд-протектора, правую рука императрицы, которая отправила нас в дальние странствия по королевству и за его пределы в поисках лекарства от крысиной чумы, охватившую столицу.\nАвтор: Сергей Тарабан\n:ad:\nНачало\rDishonored. Main city.\rИгра начинается с момента нашего возвращения в город. Сам город и река очень красивые и величественные, повсюду видны следы индустриализации. Декорации чем то напоминают вселенную Bioshock Infinity.\nЭмили\nНа берегу нас встречает дочь императрицы - Эмили. Она предложит поиграть в прятки. Это обучение по стелсу.\nЧтобы она не нашла вас надо спрятаться в ближайшее к выходу укрытие.\nВерховный смотритель Кемпбел\nИдя на прием к императрице мы встречаем верховного смотрителя Кемпбелла.\nИмператрица и её дочь Эмили\nНа приеме у императрицы мы отдаем ей письмо. Вести неутешительны, никто не знает как справиться с чумой.\nВ этот момент на нас нападают асасины, убивают императрицу и забирают девочку. На нас же сваливают всю вину и готовят к казни. Дальше мы понимаем, что за всем стоят епископ и верховный советник, которые решили узурпировать власть. Нас бросают в тюрьму и собираются казнить.\nПобег из тюрьмы\rЛодочник\rВ тюрьме неизвестные «друзья» передают нам ключ от камеры. Дальше начинается побег.\nНам дают пистолет в левую руку и саблю в правую. Прохождение тут линейное. Можно пройти как стелсом, там и убивая всех подряд. Местами встречаются несложные головоломки, например как загадка с сейфом, где код нужно искать за пустыми бутылками на полке рядом. Также опасайтесь ловушек в виде растяжек.\nПосле успешного побега нас встречает лодочник, который отвозит нас в лагерь лоялистов – оппозиционной парии, борющейся с властью узурпаторов, убивших нашу любимую императрицу. На этом вступление заканчивается.\nЛагерь лоялистов\rЛагерь лоялистов\nВид на реку\nАристократ и военный - ядро нашей партии.\nМастерская\nЛагерь очень живописный. Здесь есть мастерская, где мы можем улучшать и покупать снаряжение. В центре находится таверна, где мы планируем планы по свержению тирании. На верхнем этаже находится наша кнопната где нам предлагают выспаться перед походом.\rСон\rКогда мы заснули мы оказались во сне. В мире иллюзии. Нас туда перенесло существо, которого зовут Чужой.\rЧужой\nМир Чужого\nВсе тут иллюзии вне времени\nЗастывшие выстрелы\nОн наделяет нас магическим даром и обучает им пользоваться. Первое умение которое мы получаем - телепортация на короткие дистанции. Незаменимая вещь для стелса или побега.\rТакже он дает нам важное устройство - магическое Сердце. Взяв его в руки можно услышать и увидеть положение магических рун и амулетов на карте. Амулеты можно цеплять на себя, а руны использовать для изучения новых умений или для улучшения существующих.\nПо карте также разбросаны храмы Чужого - запрещенные официальной религией королевства.\nПосле мы просыпаемся у себя в комнате с татуировкой на левой руке - знака Чужого. Сразу рекомендую пройтись по карте и найти руну в локации Лагерь Лоялистов.\nДалее спускаемся вниз чтобы получить нашу первую настоящую миссию.\nПеред тем как я расскажу как её проходить я хочу описать подробнее боевую систему, особенности и тонкости прохождения квестов в игре Dishonored.\nБоевая система\rБоевая система довольно оригинальна. В одной руке - оружие дальнего боя или магия, в другой - оружие ближнего боя. Оружие в левой руке мы можем менять. Оружие в правой – обычно сабля или короткий меч. Оно меняется только по ходу сюжета. Оба оружия можно использовать для скрытного убийства кроме пистолета.\rВ левой руке может быть:\nПистолет – очень громкое и убойное оружие, не подходит для стелса. Можно заряжать разрывными патронами.\rАрбалет – отличное оружие в стелсе. Поддерживает сменные стрелы – обычные и со снотворным.\rГраната – обычная граната с таймером. Есть её модификация – липкая граната.\rСердце – артефакт для поиска амулетов и рун.\rМагия - разные магические умения. О них расскажу ниже.\rКроме этого всего мы можем использовать разные устройства и гаджеты:\rМины-ловушки – очень удобные для страховки от часовых. Их зоны обхода меняются динамический и нет никакой гарантии, что в зачищенной вами зоне здания вдруг не появится часовой из другой части здания.\rИнструмент для взлома – перенастраивает электрические схемы, отключает сигнализацию и т.д. Можно использовать один раз.\rСтелс система.\rСкрытное прохождение сделано очень хорошо. Сама игра делает упор именно на скрытном прохождении - вы можете обходить ваших врагов по карнизам и крышам здания, по подземным тоннелям или крысиным норам, если вы владеете способностью вселяться в крыс. Специальные способности позволят трупам исчезать без необходимости переносить их.\rОружие издает звуки, которые могут привлечь охрану. Поэтому стрелять или бить бесшумно вы можете только в мягкие объекты - людей и животных.\nМагия\rМножество умений, которые вы открываете за руны. Руны можно находить на уровне с помощью сердца, которое вам дал Чужой.\rТелепортация - перемещает нас на короткое расстояние.\rНочное виденье - видим врагов за стенами и их зоны обзора.\rВселение - перенести свое тело в тело другого существа на время. Например в крысу, собаку или человека.\rЯрость - накапливаем очки ярости и устраиваем армагедон\rКрысиная стая - напускает стаю крыс которые пожирают людей живьем.\rТелекинез - разбрасывает противников в стороны.\rЗамедление времени\rПрохождение квестов. Уровень хаоса\rКаждый квест имеет несколько способов прохождения. Обычно вам дается выбор - пройти квест с убийством или без него. Причем квест без убийства обычно проходить сложнее и дольше. Плюс вы также можете выполнять дополнительные задания которые вы получаете от NPC. Все эти действия, а также стиль вашего прохождения, влияют в целом на всю игру и мир вокруг нас. Это влияние в игре называется \"Уровнем хаоса в мире\". По итогам миссии вы уведите этот показатель в брифинге.\rДля получения низкого уровня хаоса нужно: совершать мало убийств, оглушать жертв или юзать усыпляющие дротики, проходить миссии без убийства и не совершать действий, которые будут помогать миру скатываться в хаос.\nДля высокого - соответственно больше убийств и хаоса.\nЧем больше хаоса в мире, тем больше будет плодиться чумных крыс и монстров в мире. И концовка будет более мрачной.\nМиссия 1. Убить верховного смотрителя Кембела\rВ этом задании надо пробраться в особняк смотрителя и убить его. Убить его можно разными способами - подложить мину или поменять местами отравленные бокалы в его кабинете. Но самый правильный на мой взгляд - это не убивать его вообще :) Зачем убивать, если мы можем его заклеймить.\rДополнительное задание - заклеймить смотрителя Кембела\rДополнительное задание - спасти капитана стражи\rВыливаем бокалы с вином в его кабинете. Ждем пока он спуститься с капитаном стражи в свою тайную комнату. Там в момент тогда он достанет оружие чтобы убить капитана - душим его или усыпляем дротиком. Дальше обязательно стразу стреляйте дротиком в капитана стражи. Не слушайте что он вам будет говорить про то что он прорвется сам. Его убьют и задание будет провалено. Получаем два тела.\rСначала берем тело капитана и тащим его в безопасное место. Рекомендую залезть на второй этаж здания на карниз со стороны площади. С карниза можно легко обойти всю карту и закинуть тело в мусорный бак. Только тогда задание засчитают выполненным. Еще будьте внимательны неся тело. Не кидайте его. Во время кидания тела оно получает повреждение и кинув тело с большой высоты вы убьете человека.\nДалее идем обратно и несем смотрителя Кембела в допросную комнату, где и совершаем акт клеймления.\nДополнительное задание - помочь Старой Ветоши\rМожно получить его если идти вправо в дому, окруженному бандитами. Пожем старой свизнувшейся женшине отбиться от бандитов и получим руну.\rСвятилище чужого с руной\nПотом она предложит задание на отравление эликсира месной банды. Это большой задание, с которым надо в начале пойти в дом доктора и взять оттуда органы чумной крыса. Затем пробраться на Винокурню бандитов и подложить внутренности в перегонный аппарат.\nНа самом то деле их поддерльный эликсир - это разбавленный обычный эликсир. И если вы его испротите, то все кто будут покупать этот эликсир заразятся чумой. И хаоса в мире будет больше. В общем вам решать. За это задание вы получите еще одну руну.\nИ не забудьте спуститься в подвал её дома. Там вы найдете святилище Чужого и еще одну руну.\nПочитать по теме\rIttle Dew. Веселое приключение с пазлами и монстрами\r","link":"https://staraban.com/dishonored-obzor-i-prohozhdenie/","section":"staraban","tags":["Dishonored","games","игры","прохождение"],"title":"Dishonored. Обзор и прохождение первых квестов."},{"body":"[nggallery id=1] [nggallery id=4]\n","link":"https://staraban.com/staraban/games-562/","section":"staraban","tags":[],"title":"Games"},{"body":"[nggallery id=2]\n","link":"https://staraban.com/trevel-1/","section":"staraban","tags":[],"title":"Trevel"},{"body":"My faworite sites. censor.net.ua - best Ukraine news site gamedev.net - game developer portal Игромания - game news Хабрахабр - best IT comunity Lingualeo - englist learning SFW - Kharkiv fun portal\n","link":"https://staraban.com/staraban/links-531/","section":"staraban","tags":[],"title":"Links"},{"body":"","link":"https://staraban.com/tags/gta-5-@en/","section":"tags","tags":null,"title":"GTA 5 @En"},{"body":"","link":"https://staraban.com/tags/gta-v-@en/","section":"tags","tags":null,"title":"GTA v @En"},{"body":"Petition about release GTA 5 on PC got absolute record by number of signatories. Now it is signed by 620,000 people.\rIt is one of the biggest petitions on any issue ever on their platform. In plan to reach the mark of 1 million subscribers. I personally have no doubt that GTA 5 will be on PC but I think the idea of ​​the petition I good. There will be an extra incentive for Rockstar.\nRockstar: Release GTA V on PC.\nUpdate: According to latest rumous news from Amazon store GTA 5 should be on PC in 12 of March 2014.\n","link":"https://staraban.com/petition-about-release-gta-v-on-pc-broke-all-records-on-change-ru-site/","section":"staraban","tags":["GTA 5 @en","GTA V @en","games @en","petitions"],"title":"Petition about release GTA V on PC broke all records on Change.ru"},{"body":"","link":"https://staraban.com/tags/petitions/","section":"tags","tags":null,"title":"Petitions"},{"body":"","link":"https://staraban.com/tags/gta-5/","section":"tags","tags":null,"title":"GTA 5"},{"body":"","link":"https://staraban.com/tags/gta-5-pc/","section":"tags","tags":null,"title":"GTA 5 PC"},{"body":"","link":"https://staraban.com/tags/gta-v/","section":"tags","tags":null,"title":"GTA V"},{"body":"","link":"https://staraban.com/tags/%D0%BF%D0%B5%D1%82%D0%B8%D1%86%D0%B8%D0%B8/","section":"tags","tags":null,"title":"Петиции"},{"body":"Как сообщает сайт, это самое большое число голосов собранных на одну петицию. Число подписавшихся\nуже достигло 620 тысяч человек. Каждую секунду петицию подписывает 3 человека. В планах достичь отметки в 1 миллион подписчиков. У меня лично нет никаких сомнений в том, что GTA 5 выйдет на PC но идею создать петицию я одобряю. Будет дополнительный стимул для Rockstar.\nПетиция с требованием выпустить GTA 5 на PC.\nUpdate: В соотвествии с последними слухам новостям GTA 5 должна выйти на PC 12 Марта 2014 года.\n","link":"https://staraban.com/peticija-s-trebovaniem-vypustit-gta-5-na-pc/","section":"staraban","tags":["GTA 5","GTA 5 PC","GTA V","games","игры","петиции"],"title":"Петиция с требованием выпустить GTA 5 на PC набрала абсолютный рекорд на сайте Change.ru"},{"body":"In this article I will talk about adding support of quaternion transformation in Irrlicht graphic engine. This example could be useful for any other open source game engines. More about quaternion’s Author: Sergey Taraban\n:ad:\rWhy we need quaternion based transformation in Irrlicht.\rIrrlicht – simple and very useful game engine. But he still have lack of support of quaternion rotation transformation for game objects in scene. You can set scene node transform only by Euler angles. This leads to such problems as:\rGimbal lock.\rImproper transformation after Importing scene objects from graphic software like 3ds max, Maya, Blender etc. li\u003e\r”Ready to use” code implementation from other engines or samples from internet.\rApplying to computer graphic Gimbal lock means that rotation matrix are not independent, so you can’t use them for setting an independent rotation transformation sequence. This means, for example, if you rotate some object around X, Y and Z axis successively you got some another transform then you expect. This situation is called «Loss of a degree of freedom with Euler angles».\rAs a result you got rotation around x axis only by angle equal to sum of X and Z rotation angle.\rYou can see it in this formulas:\rAfter computation we got this matrix:\rAnother unpleasant surprise awaits you if you import the scene from 3D graphic editor, for example Autodesk 3ds Max. It stores transformation in quaternions and in Irrlicht you need to convert them to the Euler angles. As a result, some of the objects in scene will be rotated very oddly or even wrong because of Gimbal lock, or because the conversion algorithm to the Euler angles because it can produce different Euler angles for the same quaternion.\nIn order to solve these problems we need to use quaternions for vertex position transformation. In this case, vertex position multiplies with quaternion, not matrix. Quaternions also can be multiplied by each other as well as the matrix. In this case, the resulting quaternion will save the entire sequence of rotation transformations and will guarantee their independence. Here, I should mention an important point. Quaternion can be converted into a rotation matrix, but this matrix will not have quaternion\u0026rsquo;s features. This rotation matrix is obtained from the Euler angles and will lead to Gimbal lock. So don\u0026rsquo;t use it instead of quaternion.\nGimbal lock live sample.\rConsider the test scene in 3ds max. Each branch of this fake tree - the same cone, which has a different transformation of the rotation, scale and position. Let's try to load this scene in Irrlicht. For max exporting I use my own script written on MAXScript. And, in order to load into my engine I just parse scene file, which contains transformation for each scene object.\rOn the screenshot below: The standard 3ds max scene: and here below is how this will be in Irrlicht without quaternion transformation support: Here is the scene in Irrlicht with quaternion transformation support:\nAs you see now the scene in Irrlicht is displayed correctly.\nImplementing.\rThere is a good quaternion class in Irrlicht library irr::core::Quaternion, which supports all necessary operations with quaternions. So we only need to add new methods to the interface ISceneNode and add implementations for each of the graphic drivers.\rIn this article I'll show how to add support for quaternions for OGLESDriver (OpenGL ES 1.0) and OGLES20Driver (OpenGL ES 2.0). For other drivers there are all the same. The main depending is how you have implemented the vertex transformation - by fixed pipeline or in the shader. I will describe those two variants in example of these two drivers.\rThe first that we do is adding private field Quaternion RelativeRotationQ, methods setRotationQ() and getRotationQ() in class ISceneNode. It is needed for objects can be transformed using a quaternion.\ncore::quaternion RelativeRotationQ;\rvirtual void setRotationQ(const core::quaternion\u0026 rotation)\r{\rRelativeRotationQ = rotation;\r}\rvirtual const core::quaternion\u0026 getRotationQ() const\r{\rreturn RelativeRotationQ;\r}\rAdd setTransformQ method for IVideoDriver interface virtual void const setTransformQ( core::quaternion q ) = 0; And its realization in default driver CNullDriver\nconst void CNullDriver::setTransformQ( core::quaternion q )\r{\rRotationTransformQuat = rot;\r}\rAnd don’t forget to add field core::quaternion RotationTransformQuat;\nNext add code below in all realization of ISceneNode interface in function render() before setTransform calling.\ndriver-\u003esetTransformQ(RelativeRotationQ);\rFor example like in function CMeshSceneNode::render() … driver-\u003esetTransformQ(RelativeRotationQ); //here is our code\rdriver-\u003esetTransform(video::ETS_WORLD, AbsoluteTransformation);\rNow lets move to driver realization code.\nFor OpenGL ES 1.0 and OpenGL FFP (fixed pipeline) simply add code below into setTransform function:\ncase ETS_WORLD:\r{\rglMatrixMode(GL_MODELVIEW);\rglLoadMatrixf(Matrices[ETS_VIEW].pointer());\rglMultMatrixf(Matrices[ETS_WORLD].pointer());\r//quaternion rotation support code\rfloat angle = 0.0f;\rcore::vector3f axis;\rRelativeRotationQ.toAngleAxis(angle, axis);\rglRotatef(angle*core::RADTODEG, axis.X, axis.Y, axis.Z);\r}\rFor the performance reason I recommend you to think about moving quaternion conversion come in some other place. Adding quaternion transformation for OpenGL ES 2.0 will be somewhat more complicated. First, we need to modify the glsl vertex shader COGLES2FixedPipeline.vsh for support quaternion multiplication. Add a new uniform fvQuatRotation. We will use this variable for pass a quaternion into shader. uniform vec4 fvQuatRotation;\nNow let’s add the function of the quaternion multiplication with vector:\nI will write two versions of quaternion multiplication algorithm for GLSL shader - one without optimization, and the second - with optimization. Unoptimized variant:\nvec4 quatMultyQV( vec4 q, vec4 v )\r{\rreturn vec4(quatMultyQQ(q, quatMultyQQ(vec4(v.xyz, 0.), getConjugate(q))).xyz, v.w);\r}\rvec4 quatMultyQQ( vec4 q, vec4 rq )\r{\rreturn vec4( cross(q.xyz, rq.xyz) + q.w*rq.xyz + rq.w*q.xyz, q.w*rq.w - dot(q.xyz, rq.xyz) );\r}\rvec4 getConjugate( vec4 q )\r{\rreturn vec4(-q.x, -q.y, -q.z, q.w );\r}\rOptimized variant: vec4 quatMultyQV( vec4 q, vec4 v ) //q- quaternion, v – vector for transform action\r{\rvec3 x = q.xyz;\rfloat w = q.w;\rvec3 a = cross(x,v.xyz) + w*v.xyz;\rreturn vec4((cross(a,-x) + dot(x,v.xyz)*x + w*a), v.w);\r}\rThen write the code of vertex transformation:\n// inVertexPosition - attribute vec4\rvec4 inRotVertexPosition = quatMultyQV( fvQuatRotation, inVertexPosition);\rvec4 fvObjectPosition = matWorld * inRotVertexPosition;\rgl_Position = matViewProjection * fvObjectPosition;\rNow return to Irrlicht engine code. Writ code for quaternion shader value connection with glsl shader in function COGLES2FixedPipelineShader::OnRender()\ns32 unifQuatRotationLocation = this-\u003egetUniformLocation(\"fvQuatRotation\");\rcore::quaternion quat = Driver-\u003egetTransformQuat();\rfloat vec[4] = {quat.X, quat.Y, quat.Z, quat.W};\rglUniform4fv(unifQuatRotationLocation, 1, reinterpret_cast(\u0026(vec)));\rSo that is finish. We have successfully implemented GLSL quaternion rotation shader. And now both of our Irrlicht drivers support quaternion rotation. Now we can use the new method setRotationQ() to set the rotation transformation of objects purely using quaternions.\nAnd the last. Keep in mind that different graphic editors can use a different coordinate system: right-handed, left-handed etc. I provide you a useful code for conversion of quaternion from left-handed XYZ to right-handed basis XZY. I use this function to convert a quaternion from 3ds max. As you can see quaternions conversion is very easy, you just need to invert or replace the desired axis.\nquaternion convertFromXYZToLeftHandedXZY( quaternion qsrc )\r{\rquaternion q;\rfloat angle = 0;\rcore::vector3df axis;\rqsrc-\u003etoAngleAxis(angle, axis);\rcore::swap(axis.Z, axis.Y);\raxis.Z = -axis.Z;\raxis.X = -axis.X;\raxis.Y = -axis.Y;\rq.makeIdentity();\rq.fromAngleAxis(angle, axis);\rreturn q;\r}\rAuthor: Sergey Taraban\n","link":"https://staraban.com/adding-quaternion-scene-node-transformation-support-in-irrlicht-engine/","section":"staraban","tags":["irrlicht @en","quaternion @en","shader @en","tutorial"],"title":"Adding quaternion scene node transformation support into Irrlicht engine."},{"body":"","link":"https://staraban.com/tags/irrlicht-@en/","section":"tags","tags":null,"title":"Irrlicht @En"},{"body":"","link":"https://staraban.com/tags/quaternion-@en/","section":"tags","tags":null,"title":"Quaternion @En"},{"body":"","link":"https://staraban.com/tags/irrlicht/","section":"tags","tags":null,"title":"Irrlicht"},{"body":"","link":"https://staraban.com/tags/quaternion/","section":"tags","tags":null,"title":"Quaternion"},{"body":"В этой статье я расскажу как добавить поддержку кватернионов в графический движок на примере движка Irrlicht. Код можно легко перенести в любой другой движок с открытым кодом. Подробнее узнать о кватернионах\nможно Кватернионы в википедии и Статья о кватернионах Gamedev.ru.\nАвтор: Сергей Тарабан\n:ad:\rЗачем нужны вращения на кватернионах в Irrlicht.\rIrrlicht – простой и удобный открытый игровой графический движок. Однако он до сих пор не имеет поддержки трансформаций вращения на кватернионах. Трансформацию для node сцены можно задать только в углах Эйлера. Это приводит к таким известным проблемам как:\rGimbal lock или Складыванию рамок.\rОшибкам трансформаций вращения при импорте моделей и сцены из графических 3D редакторов.\rИмплементации готового кода на кватернионах из других движков.\rПро Gimbal lock сказано очень много. Применительно к компьютерной графике это явления означает то, что матрицы вращения не являются полностью независимыми и вы не можете использовать их при задании последовательности независимых вращений. Это значит, например, что если вы повернете объект последовательно вокруг оси X, оси Y и, затем, оси Z, вы получите совсем не ту трансформацию, которую ожидали. Это явление также называют «Потерей степени свободы при использовании углов Эйлера».\rВ результате вы получите поворот вокруг оси Х на угол равный сумме углов поворота вокруг оси X и оси Z.\rВ частности это хорошо показано этими выражением: Еще один неприятный сюрприз ожидает вас, если вы решили импортировать сцену из графического редактора, например, Autodesk 3ds Max. Max хранит трансформации в кватернионах и при загрузки в Irrlicht вам надо преобразовывать их в углы Эйлера. В результате некоторые объекты на карте будут повернуты очень «странно» или вообще неверно или из-за уже упомянутого Gimbal lock, или из-за алгоритма функции преобразования кватернионов в углы Эйлера, ведь может получить разные варианты и порядок поворота для одного и того же кватерниона.\nДля того чтобы решить все эти проблемы используется трансформация вершин на кватернионах. В этом случае вектор позиции умножается не на матрицу поворота, а на кватернион. Кватернионы можно перемножать так же, как и матрицы. При этом полученный кватернион будет сохранять всю последовательность трансформаций вращения и будет гарантировать их независимость. Тут следует упомянуть важный момент. Кватернион можно преобразовать в матрицу вращения, но эта матрица уже не будет иметь свойств кватерниона. Это будет обычная матрица вращения, полученная из углов Эйлера и она будет приводить к Gimbal lock.\nПрактически все хорошие 3D редакторы и движки хранят трансформации вращения всех своих объектов в виде кватернионов. Я надеялся, что поддержку кватернионов введут в релизе Irrlicht 1.8, но увы все осталось как есть. В своем движке на основе Irrlicht я уже давно сделал эту имплементацию.\nПримеры Gimbal lock \"из жизни\".\rРассмотрим тестовую сцену в 3ds max в виде такого вот дерева. Каждая ветка дерева - это один и тот же конус, который имеет разную трансформацию вращения, масштаба и позиции. Попробуем загрузить эту сцену в Irrlicht. Для экспорта из max я использую свой скрипт. А для загрузки в своем движке просто парсю файл сцены, где указаны трансформации для каждого из объектов.\rНа рисунке ниже скрин из 3ds max - это как должно быть. ну а теперь как это загрузится в Irrlicht без поддержки кватернионов\nА вот пример сцены когда трансформации задаются кватернионами:\nКак видите в таком случае cцена отображается так же как и в 3ds max.\nПриступаем к реализации.\rВ библиотеке движка есть неплохой класс irr::core::Quaternion, который поддерживает все необходимые операция с кватернионами. Нам нужно только добавить новые методы для интерфейса ISceneNode и для каждой из имплементаций графического драйвера.\rВ этой статье я покажу как добавить поддержку кватернионов для OGLESDriver (OpenGL ES 1.0) и OGLES20Driver (OpenGL ES 2.0). Для остальных драйверов будет практически копипаст, зависит от того, как у вас реализована трансформация вершин – через фиксированный конвейер или в шейдере. Обе этой реализации я опишу на примере эти двух драйверов.\nПревое что мы делаем, это добавляем приватное поле Quaternion RelativeRotationQ и методы setRotationQ() и getRotationQ() в класс ISceneNode для того, чтобы объекты сцены могли трансформироваться использую кватернион. core::quaternion RelativeRotationQ;\nvirtual void setRotationQ(const core::quaternion\u0026amp; rotation) { RelativeRotationQ = rotation; }\nvirtual const core::quaternion\u0026amp; getRotationQ() const { return RelativeRotationQ; } В интерфейс IVideoDriver добавлем новый метод setTransformQ virtual void const setTransformQ( core::quaternion q ) = 0;\nИ его реализацию в класс базового драйвера CNullDriver const void CNullDriver::setTransformQ( core::quaternion q ) { RotationTransformQuat = rot; }\nА также новое поле core::quaternion RotationTransformQuat;\nДалее во всех реализациях интерфейса ISceneNode в функцию render() перед вызовом функции setTransfor добавляем код: driver-\u0026gt;setTransformQ(RelativeRotationQ);\nнапример как в функции CMeshSceneNode::render() … driver-\u0026gt;setTransformQ(RelativeRotationQ); driver-\u0026gt;setTransform(video::ETS_WORLD, AbsoluteTransformation); …\nТеперь переходим к реализации драйвера. Для OpenGL ES 1.0 и аналогично в OpenGL для FFP (фиксированный конвейер) просто добавляем код в функцию setTransform\ncase ETS_WORLD: { glMatrixMode(GL_MODELVIEW); glLoadMatrixf(Matrices[ETS_VIEW].pointer()); glMultMatrixf(Matrices[ETS_WORLD].pointer());\n//quaternion rotation support float angle = 0.0f; core::vector3f axis; RelativeRotationQ.toAngleAxis(angle, axis); glRotatef(angle*core::RADTODEG, axis.X, axis.Y, axis.Z); } Для увеличения производительности можно вынести преобразование кватерниона в другое место. Этот код приведен для наглядности.\nДля OpenGL ES 2.0 добавить поддержку будет несколько сложнее. Для начала нам надо модифицировать вершинный GLSL шейдер COGLES2FixedPipeline.vsh чтобы он поддерживал поворот вершин кватернионом. Добавим туда новый юниформ fvQuatRotation. Через него мы будем передавать кватернион в шейдер.\nuniform vec4 fvQuatRotation;\nТеперь добавим функции перемножения кватерниона с вектором:\nЯ привожу два варианта алгоритма quaternion multiplication для GLSL шейдеров – один без оптимизации, второй – с оптимизацией. Неоптимизированный алгоритма «в лоб по формуле»: vec4 quatMultyQV( vec4 q, vec4 v ) { return vec4(quatMultyQQ(q, quatMultyQQ(vec4(v.xyz, 0.), getConjugate(q))).xyz, v.w); }\nvec4 quatMultyQQ( vec4 q, vec4 rq ) { return vec4( cross(q.xyz, rq.xyz) + q.wrq.xyz + rq.wq.xyz, q.w*rq.w - dot(q.xyz, rq.xyz) ); }\nvec4 getConjugate( vec4 q ) { return vec4(-q.x, -q.y, -q.z, q.w ); }\nОптимизированный в-нт: vec4 quatMultyQV( vec4 q, vec4 v ) //q- кватернион, v – вектор на который умножаем { vec3 x = q.xyz; float w = q.w; vec3 a = cross(x,v.xyz) + w*v.xyz; return vec4((cross(a,-x) + dot(x,v.xyz)x + wa), v.w); }\nОба варианта рабочие.\nДалее напишем код трансформации вершин: // inVertexPosition - attribute vec4 vec4 inRotVertexPosition = quatMultyQV( fvQuatRotation, inVertexPosition); vec4 fvObjectPosition = matWorld * inRotVertexPosition; gl_Position = matViewProjection * fvObjectPosition;\nТеперь вернемся к коду движка. Добавляем передачу значения трансформации в функции COGLES2FixedPipelineShader::OnRender()\ns32 unifQuatRotationLocation = this-\u0026gt;getUniformLocation(\u0026ldquo;fvQuatRotation\u0026rdquo;); core::quaternion quat = Driver-\u0026gt;getTransformQuat(); float vec[4] = {quat.X, quat.Y, quat.Z, quat.W}; glUniform4fv(unifQuatRotationLocation, 1, reinterpret_cast\u0026lt;glfloat*\u0026gt;(\u0026amp;(vec)));\nНу вот и все. Теперь у нас есть шейдер поддерживающий вращение вершин кватерионом. Теперь мы можем пользоваться новым методом setRotationQ() для установки трансформация вращения объектов чисто на кватернионах.\nИ последнее. Имейте в виду, что в разных графических редакторах может использоваться разная система координат. Обычно или правосторонняя, или левосторонняя. Этот код позволит преобразовать кватернион из правостороннего XYZ базиса в левосторонний XZY. Я использую эту функцию для конвертации кватернионов из 3ds max. Как видите кватернионы преобразуются довольнго просто, вам надо просто инвертировать нужные оси.\nquaternion convertFromXYZToLeftHandedXZY( quaternion qsrc ) { quaternion q; float angle = 0; core::vector3df axis; qsrc-\u0026gt;toAngleAxis(angle, axis); core::swap(axis.Z, axis.Y); axis.Z = -axis.Z; axis.X = -axis.X; axis.Y = -axis.Y; q.makeIdentity(); q.fromAngleAxis(angle, axis); return q; }\nАвтор: Сергей Тарабан\n","link":"https://staraban.com/dobavljaem-podderzhku-vrashhenija-kvaterinonov-v-irrlicht/","section":"staraban","tags":["Irrlicht","quaternion","tutorial @ru","шейдер"],"title":"Добавляем поддержку вращения объектов сцены с помощью кватернионов в Irrlicht engine."},{"body":"","link":"https://staraban.com/tags/credits-@en/","section":"tags","tags":null,"title":"Credits @En"},{"body":"","link":"https://staraban.com/tags/ending-@en/","section":"tags","tags":null,"title":"Ending @En"},{"body":"","link":"https://staraban.com/tags/saints-row-4-@en/","section":"tags","tags":null,"title":"Saints Row 4 @En"},{"body":"I like this game for fun parodies about Mass Effect, Prototype, GTA etc. Fun ending screen shots and game credits also here.\nEnding screenshots Saints Row 4 with dancing. Fun game credits.\r","link":"https://staraban.com/saints-row-iv-fun-ending-with-dancing/","section":"staraban","tags":["credits @en","ending @en","games @en","saints row 4 @en"],"title":"Saints Row IV. Ending with dancing."},{"body":"","link":"https://staraban.com/tags/saints-row-4/","section":"tags","tags":null,"title":"Saints Row 4"},{"body":"Люблю эту игру за интересный сюжет, геймплей и пародии на Mass Effect, Prototype, GTA и т.д. Тут также скриншоты концовки и титров. Под катом вы найдете скриншоты самой правильной концовки с танцами, которую вы получите после прохождения всех побочных миссий. Еще также сриншоты прикльных титров с артом (fun credits). Осторожно спойлеры! :)\nКонцовка скриншоты.\r","link":"https://staraban.com/saints-row-iv-koncovka-s-tancami/","section":"staraban","tags":["Saints Row 4","games","игры","титры"],"title":"Saints Row IV. Концовка с танцами."},{"body":"","link":"https://staraban.com/tags/%D1%82%D0%B8%D1%82%D1%80%D1%8B/","section":"tags","tags":null,"title":"Титры"},{"body":"","link":"https://staraban.com/tags/firefox-@en/","section":"tags","tags":null,"title":"Firefox @En"},{"body":"","link":"https://staraban.com/categories/internet/","section":"categories","tags":null,"title":"Internet"},{"body":"","link":"https://staraban.com/tags/plugins/","section":"tags","tags":null,"title":"Plugins"},{"body":"This is my top useful and popular plugins for Firefox browser, which I use. This good plugins don\u0026rsquo;t slow down the browser and ease of use.\nSpeed Dial I prefer it instead of the bookmark manager. Support groups, automatic updates. So many useful settings.\nYoutube High Definition All youtube videos is always opened in HD. Very convenient.\nAll-in-One Sidebar Adds a sidebar on the left like in Opera. It could be quickly shown or hidden. There you can find downloads, plug-in and settings manager, history and bookmarks, information on the page, etc. Simply irreplaceable thing.\nTodoist: To-Do list and Task Manager Very useful todo list with synchronization and scheduling.\nAdBlock Block all the advertising in web pages.\n","link":"https://staraban.com/popular-firefox-plugins/","section":"staraban","tags":["firefox @en","plugins"],"title":"Popular Firefox plugins."},{"body":"","link":"https://staraban.com/tags/firefox/","section":"tags","tags":null,"title":"Firefox"},{"body":"","link":"https://staraban.com/categories/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82/","section":"categories","tags":null,"title":"Интернет"},{"body":"","link":"https://staraban.com/tags/%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B/","section":"tags","tags":null,"title":"Плагины"},{"body":"Мой топ хороших, полезных, удобных и популярных плагинов для Firefox веб браузера, которыми я пользуюсь. Они не тормозят работу браузера как некоторые и значительно упрощают работу.\nSpeed Dial Предпочитаю его вместо менеджера закладок. Поддерживает группы, автоматическое обновление. Очень много гибких настроек.\nYoutube High Definition Все видео с youtube открывается в HD. Очень удобно.\nAll-in-One Sidebar Добавляет боковую панель как в Опере слева. Её можно быстро показать/скрыть. В ней можно смотреть загрузки, управлять плагинами, смотреть историю и закладки, информацию по странице и т.д. Просто незаменимая вещь.\nTodoist: To-Do list and Task Manager Очень функциональный To Do лист.\nAdBlock Блокирует всю рекламу на странице.\nLingualeoPlugin Дважды кликаете на английское слово - появляется окно с переводом и от туда сразу можно добавить его в словарь.\n","link":"https://staraban.com/populjarnye-plaginy-dlja-firefox-kotorymi-ja-polzujus/","section":"staraban","tags":["firefox","плагины"],"title":"Популярные плагины для Firefox которыми я пользуюсь."},{"body":"","link":"https://staraban.com/tags/bitbucket/","section":"tags","tags":null,"title":"Bitbucket"},{"body":"Недавно для своего текущего проекта на Bitbacket решил подключить issue tracking систему наподобие жиры или ютрека.\nBitbacket - это бесплатный сервис контроля версий, который поддерживает Git и Mercurial.\nУ него оказалась очень удобный и простой баг трекер. Кроме этого вы при желании можете подключить движок википедии. Система имеет гибкий поиск и фильтры. Из минусов - не нашел где можно создать свои фильтры, но встроенных вполне достаточно для работы.\nДля каждого таска можно задать такие настройки задачи:\nAssignee - на кого заасайнен\rType - баг, таск, предложение или усовершенствование\rPriority - приоритет таска\rStatus - статус issue\rComponent - Список задается в настройках, например: UI, Design, Gameplay, Network etc.\rMilestone - Список задается в настройках, например: FPP, FPP with network, Pre Aplha, Alpha, Beta etc.\rVersion - любое число версий можно создать в настройках\rVotes - Голоса за таск от участников команды\rВот как выглядит система на примере одного из моих проектов.\rКроме того вы можете скачать удобный клиент Source Tree для работы с git и синхронизировать его с Bitbacket. После этого в issue будут отображаться связанные с ним комиты.\n","link":"https://staraban.com/bitbucket-issue-tracking-sistema/","section":"staraban","tags":["Issue tracking system","bitbucket","task management"],"title":"Bitbucket. Issue tracking система."},{"body":"","link":"https://staraban.com/tags/issue-tracking-system/","section":"tags","tags":null,"title":"Issue Tracking System"},{"body":"","link":"https://staraban.com/tags/task-management/","section":"tags","tags":null,"title":"Task Management"},{"body":"","link":"https://staraban.com/tags/bitbucket-@en/","section":"tags","tags":null,"title":"Bitbucket @En"},{"body":"Recently, for my current project on Bitbacket I decided to connect the issue tracking system like Youtrack or Jira.\nBitbacket is a free service of version control that supports Git and Mercurial. It is very friendly and easy to use bug tracker. In addition, if you desire, you may connect additional free Wikipedia engine. The system has a flexible search and filters. Of the minuses - I did not find where you can create your own filters, but built in is well enough for work.\nIssue settings.\rFor each task you can set options:\rAssignee - who is working on this task\rType - bag, task, proposal or improvement\rPriority - task priority\rStatus - issue status: done, in progress, on hold, open\rComponent - List specified in the settings, for example: UI, Design, Gameplay, Network etc.\rMilestone - List specified in the settings, for example: FPP, FPP with network, Pre Aplha, Alpha, Beta etc.\rVersion - any numbers of version specified in the settings\rVotes - Task votes from all guys in your team\rHere's how the system looks like at the example of one of my current project.\rIn addition, you may download the client Source Tree convenient to work with git and synchronize it with Bitbacket. After this action issues would be connected to related git commit.\n","link":"https://staraban.com/english-bitbucket-issue-tracking-system/","section":"staraban","tags":["Issue tracking system @en","bitbucket @en","task management @en"],"title":"Bitbucket. Issue tracking system."},{"body":"","link":"https://staraban.com/tags/issue-tracking-system-@en/","section":"tags","tags":null,"title":"Issue Tracking System @En"},{"body":"","link":"https://staraban.com/tags/task-management-@en/","section":"tags","tags":null,"title":"Task Management @En"},{"body":"","link":"https://staraban.com/tags/git/","section":"tags","tags":null,"title":"Git"},{"body":"В статье я опишу основные подходы при работе с гитом и основные команды git в сравнении с командами svn.\nАвтор: Сергей Тарабан\n:ad:\rСравнение команд svn и git\rТаблица сравнения команд svn и git.\rSVN\nGit\nOverview\nsvn update\ngit pull --rebase\nПолучить последние\rизменения с удаленного репозитория\nsvn revert -R\ngit checkout . или git checkout --\r.\nРеверт всех незакомиченых\rизменений.\ngit reset --hard origin/ Полный реверт репозитория с удаление всех локальных комитов.\nsvn commit\r–m””\nsvn delete\ngit add -A\r.\ngit commit -m””\ngit push orign Коммит изменений в локальный репозиторий и, затем, пуш в удаленный репозиторий. svn co\r[folder]\ngit clone [folder]\nСоздать локальный репозиторий на основе удаленного.\nsvnstatus\ngit status\nИнформация по репозиторию.\nsvn log\ngit log --oneline\nЛог svn add\ngit add -a\r.\nДобавить все новые, удаленные или измененные файлы для комита.\rsvn delete --keep-local\rsvn rm --keep-local\ngit reset\nУдалить файл/каталог из индекса\nUnsupported\ngit clean -f\rDelete all untracked files\nsvn update -r\u003crev_num\u003e\ngit checkout \u003ccommit_hash\u003e\nПерейти на указанный комит\n-\ngit checkout \u003cbranch\u003e\nВернуться назад\nsvn remove\ngit rm\nУдалить файл и добавить\rв индекс\nsvn pedit svn:ignore .\nСоздайте файл .gitignoreв корне репозитория\rили в папке на уровень выше то, которую вы хотите добавить. Затем добавьте\rтуда относительный путь к файлу или папке которую\rхотите добавить в игнор.\nДобавить файл в игнор лист\nПодходты при работе с GIT.\rЕсть несколько подходов или вариантов работы с git. Каждый из этих правил удобно комбинировать между собой.\r1. SVN way\rЭтот подход очень похож на работу с SVN системой контроля версий.\rТ.к. git это распределенная система, у нас формально есть два репозитория - локальный и удаленный (origin). Все комиты мы делаем в свой локальный репозиторий командой commit, а затем делаем синхронизацию своего репозитория с удаленным командой pull --rebase.\rПараметр \u0026ndash;rebase переносит наш комит на самую верхушку стека комитов, делая его самым актуальным. При этом могут быть конфликты, которые обычно легко разруливаются. Будьте внимательный при разруливании конфликтов. При \u0026ndash;rebase конфликте Thairs файлы - это ваши файлы, а Mine - с удаленного репозитория.\nПосле этого делается синхронизация удаленного репозитория с нашим командой git push origin , где branch - текущая ветка. Если вы не делали новых веток в репозитории, это будет ветка по умолчанию - master.\n2. Stash way\rРабота через stash буфер.\rstash буфер - это фича, которая позволяет скрывать ваши изменения из файловой системы.\rКак это работает. Допустим, вы сделали изменения в файлах и хотите подтянуть более актуальную версию исходников с удаленного репозитория. Но вы не можете сделать pull \u0026ndash;rebase, потому что у вас есть измененные файлы. Чтобы подтянуть новую версию вам нужно либо сделать commit, либо \u0026ldquo;спрятать\u0026rdquo; ваши измененные файлы.\ngit stash Эта команда спрячет все что было добавлено в индекс. Если вы хотите спрятать Untracked файлы, нужно перед запуском команды выполнить git add.\nВы получаете чистый репозиторий и теперь можно сделать pull \u0026ndash;rebase.\nПосле пула можно вернуть ваши изменения из стеша командой git stash pop или git stash apply Разница в командах в том, что первая удалит измения из стеша, а вторая нет. Т.к. стеш является стековым буфером, в нем можно сохранять много изменений. Подробнее: git help stash\n3. Branching или бранчевание\rЭтот подход заключается в том, что любая новая фича, которую вы имплементируете, или баг, который вы фиксите, должен быть в отдельной ветке.\rКогда фикс или фича закончены, делается мерж этой ветки в master. При таком подходе стараются, чтобы разные бранчи работали с разными файлами и папками.\rИначе будут проблемы с конфликтами при мерже веток.\rgit branch - создаем новый бранчь. git checkout - переходим на наш брачь git push origin - пуш в новый бранчь на удаленном репозитории создаст наш бранчь там git branch -a - смотреим все бранчи которые сейчас есть. Зеленым будет подсвечен наш текущий бранчь. Текущий бранчь также показываете команда git status\nЕлси допустили ошибку можно удалить или переименовать бранчь git branch -d - удалить бранчь git branch -m - переименовать брачь\nДопустим нам понадобилась свежая версия файлов из бранча master. Делаем merge c бранчем master. git checkout master - переключились на ветку master git pull \u0026ndash;rebase - обновили её до самой последней версии git checkout [our_branch] - переключились на нашу ветку git merge master - подтянули в нашу ветку изменения с ветки master\nКогда мы сделали фичу мы хотим чтобы она полявилась в мастере. Делаем все то же самое что выше только для мастера. git checkout [our_branch] - переключились на нашу ветку если мы не в ней git pull \u0026ndash;rebase - обновили её до самой последней версии git checkout master - переключились на ветку master git pull \u0026ndash;rebase - обновили её до самой последней версии git merge [our_branch] - подтянули в master изменения с нашей ветки Будет создан мерж комити автоматически, так что осталось только залить изменения на удаленный репозиторий командой git push origin master.\nПолезные материалы:\rGit Pro на русском языке\rGit mide map\rОбзор всех команд git на хабре. Список команд\rАвтор: Сергей Тарабан\n","link":"https://staraban.com/git-shpargalka-varianty-raboty-s-git-sravnenie/","section":"staraban","tags":["Git","subversion @ru","svn @ru"],"title":"Git шпаргалка.  Варианты работы с git. Сравнение команд svn и git."},{"body":"","link":"https://staraban.com/tags/subversion-@ru/","section":"tags","tags":null,"title":"Subversion @Ru"},{"body":"","link":"https://staraban.com/tags/svn-@ru/","section":"tags","tags":null,"title":"Svn @Ru"},{"body":"","link":"https://staraban.com/tags/git-@en/","section":"tags","tags":null,"title":"Git @En"},{"body":"In this article I am going to describe the basic approaches in working with git and basic commands git versus svn subversion systems.\nAuthor: Sergey Taraban\n:ad:\rSvn vs git commands comparison\rTable of svn and git commands comparison.\rSVN\nGit\nOverview\nsvn update\ngit pull --rebase\nGet latest changes from remote repository\nsvn revert -R\ngit checkout . or git checkout -- .\nRevert all upstaged changes.\ngit reset --hard origin/\nFull revert. Make your local repository the same as remote. If you had some unpushed commits this command would remove them.\nsvn commit –m””\nsvn delete\ngit add -A .\ngit commit -m””\ngit push orign\nCommit the changes to the local repository and then push to the remote repository.\nsvn co [folder]\ngit clone [folder]\nCreate local git repository based on remote repository\nsvnstatus\ngit status\nInformation about local repository.\nsvn log\ngit log --oneline\nShow log by one line\nsvn add\ngit add -a .\nAdd all files for commit: deleted, changed or new\nsvn delete --keep-local\rsvn rm --keep-local\ngit reset\nRemove file or folder from index\nUnsupported\ngit clean -f\nDelete all untracked files\nsvn update -r\ngit checkout Go to commit with hash -\ngit checkout\nTake back\nsvn remove\ngit rm [filename]\nDelete file and add him for commit (to commit list)\nsvn pedit svn:ignore .\nCreate file .gitignoreв in root folder of repository. Then add\rthere a relative path to the file or folder that you\rwant to add to ignore list.\nAdd file to ignore list\nGit ways to work.\rThere are several work approaches or work rules when working with git. Each of these rules are easily combined with each other.\r1. SVN way\rThis git approach is very similar to working with SVN version control system.\rSince git is a distributed system, we formally have two repositories - local and remote (origin).\rAll commits we do in our local repository my commit command, and then we do sync repository with a remote by command pull --rebase.\rParameter \u0026ndash;rebase brings our commit on the very top of the commits stack, making it the most important. This may produce some conflicts that are usually easily to resolve. Be careful when use merge tool. Is this case Theirs files - it is your changes, and Mine files - files from remote repository.\nAfter this actions we need to synchronize our local repository with remote by using command git push origin, where branch - is out current working branch. If you did not make any new branches it would be default branch - master.\n2. Stash way\rWorking through the stash buffer.\rGit stash buffer - is a feature that allows you to hide your changes from the file system.\nHow it works. Let\u0026rsquo;s say you have made changes to the files and want to pull latest version of the source code from a remote repository. But you can not do pull \u0026ndash;rebase, because you have modified files (uncommitted changes). For pull up a new version of files you need either make a commit, or \u0026ldquo;hide\u0026rdquo; your modified files.\ngit stash\nThis command will hide all that was added to the index. If you want to hide untracked files, you need to perform command git add before running stash command.\nNow you get a clean repository and can now be done pull \u0026ndash;rebase.\nAfter pull you can return your change from stash by command git stash pop or git stash apply The difference in the commands is that the first clear the stash, and the second is not. So you can use stash buffer like back up. Since stash is a stack-based buffer, it can save a lot of changes.\nIn depth: git help stash\n3. Git branching\rThis approach lies in the fact that any new feature that you implement, or bug that you fix must be in a separate branch.\rWhen a fix or a feature is finished, you make merge this branch in master. Using this approach strongly recommended working in different files and folders for each branches to avoid merge conflicts.\rgit branch - create new branch git checkout - switch to new branch git push origin - push in the new brunch at the remote repository will create our brunch there git branch -a - list of all brunches what we have at this moment. Our current branch is highlighted by green colour. Current branch also shoved git status command.\nIf you make a mistake you can delete or rename a brunch: git branch -d - delete brunch git branch -m - rename brunch\nFor example, we need the latest files from the brunch master. Merge our branch with with brunch master. git checkout master- switch to master git pull \u0026ndash;rebase - update master to latest changes git checkout [our_branch] - switch back to out branch git merge master - get changes from master to our branch\nThen we made some changes, fix bugs or implement feature for exemple. So now we need to upload out changes to master. git checkout [our_branch] - switch to out branch if we not there already git pull \u0026ndash;rebase - update it to latest changes git checkout master - switch to master git pull \u0026ndash;rebase - update master to latest changes git merge [our_branch] - merge our changes to master Merge commit will be created automatically. So the last things you need to push your changes to remote repository: git push origin master .\nAuthor: Sergey Taraban\n","link":"https://staraban.com/english-git-commands-overview-git-working-ways-git-vs-svn-commands-comparison/","section":"staraban","tags":["Git @en","subversion","svn"],"title":"Git commands overview. Git working ways. Git vs svn commands comparison."},{"body":"","link":"https://staraban.com/tags/subversion/","section":"tags","tags":null,"title":"Subversion"},{"body":"","link":"https://staraban.com/tags/svn/","section":"tags","tags":null,"title":"Svn"},{"body":"\r","link":"https://staraban.com/invest/sitemap/","section":"invest","tags":[],"title":"Карта сайта"},{"body":"\r","link":"https://staraban.com/sitemap/","section":"staraban","tags":[],"title":"Карта сайта"},{"body":"\rKharkiv - is the biggest city in East Ukraine. Second after Kiev by number of universities. One of the rich city of Ukraine after Kiev and Odessa.\nThe Old Center\rConstitution Square and Museum\rHeart of Kharkov. Here is the Assumption Cathedral, Constitution Square, Historical Museum, department, Pavlov area (former Rosa Luxemburg), City Hall. Here the main strits Sumskaya and Pushkinskaya started.\nThe Shevchenko Park\rIf you go Sumskaya you will pass Shevchenko Park. Here are located HATOB, Mirror Stream, Shevchenko Monument, Cascade, Dolphinarium\rMonument to Taras Shevchenko\nShevchenko monument is the world\u0026rsquo;s most beautiful monument to the great poet and writer Taras Shevchenko.\nFreedom Square and the monument to Taras Shevchenko - places of cultural and political life in Kharkov. There are often different fairs, exhibitions, etc.\nThe New Center\rGoing further you go in Sumy on Freedom Square. Here begins the new center.\rIt was built in the first half of the 20th century.\nHere to Freedom Square, Derzhprom National University. Karazina, Medical University and the Regional Council.\nOn the square are part of different events and trade fairs.\nThe Gorky Park\r[singlepic id=17 w=320 h=240 float=left]\rModern thame park. Here you can also rent a bicycle, roller skates or skateboards. Every weekend there are different celebrations takes place.\nFull list of attractions (rus)\n.\n.\nSubway\rKharkiv subway called \"Metro\" is a bit worse then Moskov and better then in Kiev. Spacious and beautiful stations, each different from each other.\rSportivna station\n","link":"https://staraban.com/staraban/my-city-kharkiv-495/","section":"staraban","tags":[],"title":"Kharkiv my home city"},{"body":"\rХарьков - крупнейший город восточной Украины. Второй по числу университетов и IT компаний после Киева. Входит в тройку самых богатых городов Украины.\nВ нем находится множество парков и нет вредных производств, шахт и металургических предприятий, поэтому по экологии Харьков занимает высокое место.\nДалее отдельно хочу рассказать о местах, которыми известен Харьков и которые стоит посетить\nСтарый центр\rПлощадь Конституции\rСердце Харькова. Тут находится Успенский собор, площадь Конституции, Исторический музей, универмаг, Павловская площадь (бывшая Розы Люксембург), Городской совет. Отсюда берут свое начало улицы Сумская и Пушкинская.\nПарк Т. Г. Шевченко\rЕсли идти по Сумской то вы будете проходить мимо парка Шевченко. Тут расположены ХАТОБ, Зеркальная струя, Памятник Шевченко, Каскад, Дельфинарий\rПамятник Т.Г. Шевченку в парке Шевченка\nПамятник Шевченко является самым красивым в мире памятником великому поэту и писателю Тарасу Шевченко.\nПлощадь Свободы и памятник Шевченко - места культурной и политической жизни Харькова. Тут часто проходят разные ярмарки, выставки и т.д.\nКаждый день возле памятника Шевченко собирается харьковские Евромайдан (в будни в 18:00 и в выходные в 12:00).\nНовый центр\rПройдя дальше по Сумской вы выйдете на Площадь Свободы. Тут начинается новый центр.\rОн был построен в первой половине 20 века.\nТут находятся Площадь Свободы, Госпром, Национальный университет им. Каразина, Медицинский университет и Областной совет.\nНа площади часть проходят разные мероприятия и ярмарки.\nПарк Горького\r[singlepic id=17 w=320 h=240 float=left] Современный парк аттракционов. Тут также можно взять на прокат велосипед, ролики или самокаты. Каждые выходные тут проходят разные праздничные мероприятия.\rПолный список аттракционов с описанием\nМетро\rХарьковское метро лишь немного уступает Московсому и лучше Киевского. Просторные и красивые станции, каждая не похожая друг на друга.\rТЦ на Героев Труда\rКомплекс больших торговых и развлекательных центров на ст. метро Героев Труда. Тут находятся ТЦ Караван, ТЦ Даффи, Строительный и мебельный гипермаркеты, гипермаркет электроники, Харьковский радиорынок и продуктовый рынок.\rКнижный рынок\rНа этом рынке продают книги, учебную литературу, мелкую технику вроде чехлов и болванок, диски. Также тут можно найти старьевщиков и нумизматов.\rРынок Барабашево\rКрупнейший рынок в Украине и наверное в СНГ. Тут можно купить почти все и недорого. Выходной четверг. Рынок довольно бурный и очень большой. Если вы хотите спокойно погулять то лучше ехать на Героев Труда\rIMAX\rТЦ \"Французский Бульвар\" находится недалеко от рынка Барабашево. Тут находится единственный в Харькове кинотеатр IMAX.\rАквапарк\rАквапарк Джунгли - самый большой аквапарк в Украине.\r","link":"https://staraban.com/my-city-kharkiv/","section":"staraban","tags":[],"title":"Харьков – мой родной город"},{"body":"Моя поездка в Чехию весной 2013 [nggallery id=7 template=carousel]\n","link":"https://staraban.com/trevel-czech-2013/","section":"staraban","tags":[],"title":"Путешествие в Чехию"},{"body":"[nggallery id=1] [nggallery id=4]\n","link":"https://staraban.com/games/","section":"staraban","tags":[],"title":"Games"},{"body":"Places where I was.\r[imagebrowser id=2]\rKharkiv - city I am living in.\r[imagebrowser id=3]\rGame screenshots.\r[imagebrowser id=1]\r","link":"https://staraban.com/gallery/","section":"staraban","tags":[],"title":"Gallery"},{"body":"Места где я был\rХарьков - город в котором я живу\rСкриншоты из игр\r","link":"https://staraban.com/invest/my-gallery/","section":"invest","tags":[],"title":"Галерея"},{"body":"Места где я был\rХарьков - город в котором я живу\rСкриншоты из игр\r","link":"https://staraban.com/my-gallery/","section":"staraban","tags":[],"title":"Галерея"},{"body":"\rcensor.net.ua - тут я читаю новости gamedev.ru - сайт разработчиков игр Игромания - новости по играм Хабрахабр - лучший ресурс по IT. Lingualeo - очень удобный ресурс для изучения английского. SFW - наш Харьковский аналог Яплакал.ру.\nDOU - информация для разработчиков Украины: конференци, уровень ЗП и т.д..\n","link":"https://staraban.com/invest/links/","section":"invest","tags":[],"title":"Ссылки"},{"body":"\rcensor.net.ua - тут я читаю новости gamedev.ru - сайт разработчиков игр Игромания - новости по играм Хабрахабр - лучший ресурс по IT. Lingualeo - очень удобный ресурс для изучения английского. SFW - наш Харьковский аналог Яплакал.ру.\nDOU - информация для разработчиков Украины: конференци, уровень ЗП и т.д..\n","link":"https://staraban.com/links/","section":"staraban","tags":[],"title":"Ссылки"},{"body":"\rThe projects and tools I worked on in my professional career, my personal projects, or projects not under NDA.\nDead Island Mobile\rDeveloped a mobile game from scratch. Implemented core game logic, UI, metagame, locomotion system for zombie hordes, inventory, base building system, shader programming, tools programming, performance optimization, iOS and Android development. Game was released to app store and had success.\nHook Wars Online. Free multiplayer online MOBA game\rGenre: Multiplayer Online Battle Arena (MOBA)\nTechnologies: C# (Mono), Unity 3D, Photon Networking, NGUI, Cg shaders, HTML, CSS, PHP, JavaScript, MySQL, Facebook JS SDK\nPlatforms: Windows, Mac OS and Linux (Wine or Pipelight needed)\nTwitter\n\"Hook Wars: Pudge Revenge\" - multiplayer coop online game with RPG elements.\nA Maze in Love\rhttps://welldonegames.io/a-maze-in-love\nStrawberry Pie\rhttps://youtu.be/ty8sYHTHTBM\nGame for children in collaboration with famous Ukraine 2D artist. All screens are loaded as Unity scene bundles feature.\nRunner Hook Wars\rhttps://www.youtube.com/watch?v=29fOA3zB2O4\nFor mobile and web. The idea was to show some minigames during the main Hook Wars game is loading.\nElle Girl AR demo for iOS\rhttps://www.youtube.com/shorts/jKXBZSkJgvU\nLock screen shader for Android\rhttps://www.youtube.com/shorts/FEnaIRmpbKk\nWorld Of Towers\rPrototype of Civilization like game + Minecraft gameplay elements.\nTechnologies: Unity 4, Voxel engine for Unity\nLanguage: C#\nFeatures: Voxel engine optimization and modification\nPower zone system - area controled by towers\nAutomatic level objects generation\nUnity Tutorials\rMy Unity tutorials playlist. For of war\rCustom particle system\r2D Game tutorial\rScreenshot capturing tool\rhttps://www.youtube.com/watch?v=PNAvNeOTnSE\u0026list=PLzp0rfbbKySe9gHS-TIAHsJcAMKc8-sY_\nTOOLS\rColor picker Tool\rGitHub\nUI generator\rGenerates UI from C# classes using reflection\nConsoles\rStock Helper Tool\rThe tool scans the current select tab in Chrome and if Trading View is selected it shows the data for stock in tabs that are a web browser. Each tab preloads information about the selected stock.\nPublisher Helper\rApplication to publish content into social networks. It contains presets, automatically loads resources for these presets, and publishes them with settings. Effect editor for Tower Defense Game\rUse Qt and Irrlicht. Export to xml.\nScreenshot Capturing Tool\rhttps://www.youtube.com/watch?v=eQfokC5_jgE\u0026list=PLzp0rfbbKySe9gHS-TIAHsJcAMKc8-sY_\u0026index=6\nGameloft projects\rProjects I worked on when I was C++ Developer in Gameloft Inc.\nSix Guns.\rI created gambling system: game play logic, quest, tool for designer.\nAlso:\nImplemented new quests.\nImplemented save file encryption system.\nImprovement of in-app purchase game system\nImprovement of memory usage.\nAdding advertising systems.\nFashion Icon\rIt was funny work. It is completely girl game with fashion shops, dating and fashion battles )\nWorked as Lead Developer and Unity tutor.\nI worked on DLC system implementation\nDLC tools\nAdding new items\nReal Golf 2011 for Mac\rOverview\nI worked on porting from iOS to Mac OS.\nImplemented multi resolution system.\nImprove shaders and graphic quality.\nImprove ball aiming.\nImplemented joystick support.\nImplemented track pad support.\nImplemented keyword and joystick key binding system.\nAlso I worked on projects:\nLets Golf 2\nDungeon Hunter 2\nStar Battalion\nReal Football\nSplinter Cell\nOther my projects.\rTower Defense\rOne of my old game. It is a tower defence game with new original mechanic. Some days I will rewrite it on Unity or some other advanced engine.\nGame models in Unity\rArtist concept\rFeature:\n3DS max export tools in my own scene format.\nQt based Particle editor for magic effects.\nImroved Irrlicth shader system.\nAdded bump map shaders.\nLow level Irrlicht and Proton SDK optimization, refactoring and bug fixing.\nImplemented scalable gut system base on Proton SDK.\nImplemented GUI loading from Qt gui data files.\nPorted ProtonSDK to OpenGL ES 2.0.\nAdded new materials for Irrlicht.\nBox Runner\rGameplay video.\nThis simple game I have created themselves. The first game I've released.\nPlatform: iPad and iPhone\nTechnologies: Irrlicht, Proton SDK, Bullet.\nLanguage: C++ and Objective-C\nFeature:\nLow level Irrlicht and Proton SDK optimization, refactoring and bug fixing.\nImplemented scalable gut system base on Proton SDK.\nImplemented GUI loading from Qt gui data files.\nPorted ProtonSDK to OpenGL ES 2.0.\nFacebook and Twitter sharing support.\nGameCenter leaderboard support.\nFatality Racer\rIt was my first real big project. I was developing a modern Irrlicht based graphic engine with a lot of modern graphic effect for this game, created export tools from 3ds max and basic visual redactor on Qt. Also I added gameswf library for flash GUI.\nTechnologies: Irrlicht, OpenGL, PhysX, Qt, MAXScript, GameSWF.\nFeature:\n3DS max export tools in my own scene format.\nQt based simple scene editor.\nFlash based GUI using GameSWF library.\nLow level Irrlicht optimization, refactoring and bug fixing.\nMany graphic feature implemented: postprocessing, real time smoothed shadows, bump mapping,\nFatality Racer game\rFlash based GUI system\rEditor demo video\nGameplay demo. Video is not mine. Guy from our team made it from game demo.\nShadow map demo\rAdded shadows support for Irrlicht\nFree driver\rMy first real game :)\nI have got my first job in Gameloft thanks to this game.\nEngine: Irrlicht\nMy 3D Art\rMy 2D Art\rAuthor: Sergey Taraban\n","link":"https://staraban.com/projects/","section":"staraban","tags":[],"title":"Projects and Tools"},{"body":"Мои собственные проекты\rHook Wars\rЖанр: Multiplayer Online Battle Arena (MOBA)\rДвижок: Unity Pro 4\rТехнологии: Unity Web Player, C# Mono, Java Script\rПлатформы: Windows, Mac OS и Linux (нужен Wine или Pipelight)\rhttp://www.hookwarsonline.com (ИГРАТЬ ТУТ) Приложение в Фейсбуке Приложение ВК Группа ВК Твиттер Группа FB Канал Youtube\nВидео\nHook Wars: Pudge Revenge - многопользовательская командная онлайн игра с элементами RPG, улучшенная реинкарнация известной карты Pudge War для игры Warcraft III.\nНа карте играют две команды — Красная и Синя по 3 игрока в каждой. Задача игрока — убить как можно больше игроков другой команды для того чтобы команда выиграла раунд. Для убийства можно использовать оружие ближнего боя (Тесак) или оружие дальнего боя — Крюк. Игрок может улучшать свое оружие и характеристики героя, которым он играет. Для этого игрок покупает улучшения в игровом магазине за деньги, заработанные во время раунда за убийства других игроков.\nВ данный момент мы работаем в режиме открытой Alpha.\nДевиз: Slice and Dice!\nСкриншоты\nГлавное меню\nWorld Of Towers\rПрототип Civilization like игры с элементами Minecraft игровой механики. Цель игры - расширять зону влияния подконтрольных игроку башен и захватывать чужие башни.\rPLAY\nTechnologies: Unity 4, Voxel engine for Unity Language: C#\nFeature:\nОптимизация воксельного движка, добавление нового функционала Система визуализация \u0026ldquo;зон влияния\u0026rdquo; - области подконтрольные башням Автоматическая генерация и выгрузка геометрии и объектов уровня\nUnity Tutorial Demos\rКоллекция демок по Unity который писал для своих уроков. Нажмите на картинки чтобы поиграть в демки.\rBox Runner\rLeaderboard\nВидео геймплея.\nПростая игра которую я написал сам. Моя превая игра в App Store. Платформы: iPad и iPhone Технологии: Irrlicht, Proton SDK, Bullet. Язык: C++ and Objective-C\nFeature: Оптитимазция Irrlicht и Proton SDK, рефакторинг и багфикс. Имплементация GUI системы с поддержкой мультиразрешений в Proton SDK. Имплементация GUI редакотра на Qt. Портирование ProtonSDK на OpenGL ES 2.0. Facebook и Twitter шаринг фича. Поддержка GameCenter leaderboard.\nПроекты в Gameloft\rНиже проекты над которыми я работал в комании Gameloft.\rSix Guns.\rЗанимался созданием лотереи: лотерейный квест, лотерейная комната, система выпадения призов, tool для дизайнера по настройке вероятностей.\nAlso: Имплементация новых квестов. Имплементация системы шифрования для файлов игровых сохранений. Improvement of in-app purchase game system Improvement of memory usage. Имплементация рекламы.\nFashion Icon\rВеселая была работа, делать игру чисто для девочек) Но в ней по своему много фана. Особенно \u0026ldquo;модная битва\u0026rdquo;, где надо унижать и портить прически другим девушкам.\nРаботал в роли Lead Developer. Занимался: DLC system implementation DLC tools Добавление новых вещей Improvement of memory usage Консультации по движку Unity\nReal Golf 2011 for Mac\rПортирование игры с iOS на Mac OS. Implemented multi resolution system. Improve shaders and graphic quality. Improve ball aiming. Implemented joystick support. Implemented track pad support. Implemented keyword and joystick key binding system.\nТакже я работал на проектах:\nLets Golf 2 Dungeon Hunter 2 Star Battalion Real Football Splinter Cell\nДругие мои проекты\rTower Defence\rИгра жанра tower defence, которую я делал на для iOS на бесплатном движке Proton SDK со своими доработками.\rGame screeshot from windows demo\nGame models in Unity\nArtist concept\nFeature: 3DS max export tools in my own scene format. Qt based Particle editor for magic effects. Imroved Irrlicth shader system. Added bump map shaders. Low level Irrlicht and Proton SDK optimization, refactoring and bug fixing. Implemented scalable gut system base on Proton SDK. Implemented GUI loading from Qt gui data files. Ported ProtonSDK to OpenGL ES 2.0. Added new materials for Irrlicht.\nРедактор эффектов для игры Tower Defence\rИспользвоал Qt и Irrlicht. Экспорт в свой формат на xml.\nFatality Racer\rЭто был мой первый большой проект. Я разрабатывал движок на основе Irrlicht с кучей эффектов. Сделал свой плагин для экспорта сцены из 3ds max и редактор на Qt. Также я прикрутил библиотеку Game SWF для flash GUI.\rTechnologies: Irrlicht, OpenGL, PhysX, Qt, MAXScript, GameSWF. Feature: 3DS max export tools in my own scene format. Qt based simple scene editor. Flash based GUI using GameSWF library. Low level Irrlicht optimization, refactoring and bug fixing. Many graphic feature implemented: postprocessing, real time smoothed shadows, bump mapping,\nFatality Racer game\nFlash based GUI system\nДемо игрового редактора\nВидео геймплея. Видео не мое. Его сделал один из участников нашей команды.\nShadow map demo\rДобавлял поддержику теней в Irrlicht\rFree driver\rМоя первая игра. Это был конкурсный проект на вакансию в компанию Gameloft.\rДвижек: Irrlicht\nМой 3D Art\rМой 2D Art\r","link":"https://staraban.com/invest/projects-sergey-taraban/","section":"invest","tags":[],"title":"Проекты"},{"body":"Мои собственные проекты\rHook Wars\rЖанр: Multiplayer Online Battle Arena (MOBA)\rДвижок: Unity Pro 4\rТехнологии: Unity Web Player, C# Mono, Java Script\rПлатформы: Windows, Mac OS и Linux (нужен Wine или Pipelight)\rhttp://www.hookwarsonline.com (ИГРАТЬ ТУТ) Приложение в Фейсбуке Приложение ВК Группа ВК Твиттер Группа FB Канал Youtube\nВидео\nHook Wars: Pudge Revenge - многопользовательская командная онлайн игра с элементами RPG, улучшенная реинкарнация известной карты Pudge War для игры Warcraft III.\nНа карте играют две команды — Красная и Синя по 3 игрока в каждой. Задача игрока — убить как можно больше игроков другой команды для того чтобы команда выиграла раунд. Для убийства можно использовать оружие ближнего боя (Тесак) или оружие дальнего боя — Крюк. Игрок может улучшать свое оружие и характеристики героя, которым он играет. Для этого игрок покупает улучшения в игровом магазине за деньги, заработанные во время раунда за убийства других игроков.\nВ данный момент мы работаем в режиме открытой Alpha.\nДевиз: Slice and Dice!\nСкриншоты\nГлавное меню\nWorld Of Towers\rПрототип Civilization like игры с элементами Minecraft игровой механики. Цель игры - расширять зону влияния подконтрольных игроку башен и захватывать чужие башни.\rPLAY\nTechnologies: Unity 4, Voxel engine for Unity Language: C#\nFeature:\nОптимизация воксельного движка, добавление нового функционала Система визуализация \u0026ldquo;зон влияния\u0026rdquo; - области подконтрольные башням Автоматическая генерация и выгрузка геометрии и объектов уровня\nUnity Tutorial Demos\rКоллекция демок по Unity который писал для своих уроков. Нажмите на картинки чтобы поиграть в демки.\rBox Runner\rLeaderboard\nВидео геймплея.\nПростая игра которую я написал сам. Моя превая игра в App Store. Платформы: iPad и iPhone Технологии: Irrlicht, Proton SDK, Bullet. Язык: C++ and Objective-C\nFeature: Оптитимазция Irrlicht и Proton SDK, рефакторинг и багфикс. Имплементация GUI системы с поддержкой мультиразрешений в Proton SDK. Имплементация GUI редакотра на Qt. Портирование ProtonSDK на OpenGL ES 2.0. Facebook и Twitter шаринг фича. Поддержка GameCenter leaderboard.\nПроекты в Gameloft\rНиже проекты над которыми я работал в комании Gameloft.\rSix Guns.\rЗанимался созданием лотереи: лотерейный квест, лотерейная комната, система выпадения призов, tool для дизайнера по настройке вероятностей.\nAlso: Имплементация новых квестов. Имплементация системы шифрования для файлов игровых сохранений. Improvement of in-app purchase game system Improvement of memory usage. Имплементация рекламы.\nFashion Icon\rВеселая была работа, делать игру чисто для девочек) Но в ней по своему много фана. Особенно \u0026ldquo;модная битва\u0026rdquo;, где надо унижать и портить прически другим девушкам.\nРаботал в роли Lead Developer. Занимался: DLC system implementation DLC tools Добавление новых вещей Improvement of memory usage Консультации по движку Unity\nReal Golf 2011 for Mac\rПортирование игры с iOS на Mac OS. Implemented multi resolution system. Improve shaders and graphic quality. Improve ball aiming. Implemented joystick support. Implemented track pad support. Implemented keyword and joystick key binding system.\nТакже я работал на проектах:\nLets Golf 2 Dungeon Hunter 2 Star Battalion Real Football Splinter Cell\nДругие мои проекты\rTower Defence\rИгра жанра tower defence, которую я делал на для iOS на бесплатном движке Proton SDK со своими доработками.\rGame screeshot from windows demo\nGame models in Unity\nArtist concept\nFeature: 3DS max export tools in my own scene format. Qt based Particle editor for magic effects. Imroved Irrlicth shader system. Added bump map shaders. Low level Irrlicht and Proton SDK optimization, refactoring and bug fixing. Implemented scalable gut system base on Proton SDK. Implemented GUI loading from Qt gui data files. Ported ProtonSDK to OpenGL ES 2.0. Added new materials for Irrlicht.\nРедактор эффектов для игры Tower Defence\rИспользвоал Qt и Irrlicht. Экспорт в свой формат на xml.\nFatality Racer\rЭто был мой первый большой проект. Я разрабатывал движок на основе Irrlicht с кучей эффектов. Сделал свой плагин для экспорта сцены из 3ds max и редактор на Qt. Также я прикрутил библиотеку Game SWF для flash GUI.\rTechnologies: Irrlicht, OpenGL, PhysX, Qt, MAXScript, GameSWF. Feature: 3DS max export tools in my own scene format. Qt based simple scene editor. Flash based GUI using GameSWF library. Low level Irrlicht optimization, refactoring and bug fixing. Many graphic feature implemented: postprocessing, real time smoothed shadows, bump mapping,\nFatality Racer game\nFlash based GUI system\nДемо игрового редактора\nВидео геймплея. Видео не мое. Его сделал один из участников нашей команды.\nShadow map demo\rДобавлял поддержику теней в Irrlicht\rFree driver\rМоя первая игра. Это был конкурсный проект на вакансию в компанию Gameloft.\rДвижек: Irrlicht\nМой 3D Art\rМой 2D Art\r","link":"https://staraban.com/projects-sergey-taraban/","section":"staraban","tags":[],"title":"Проекты"},{"body":"\rUnity fog of war tutorial. Part 2. Mobile version (web demo)\rProject Anarchy vs Unity 3D. A comparison of two modern game engines\rUnity DLC system implementation tutorial. Problems and features overview\rAdding quaternion scene node transformation support into Irrlicht engine\rGit popular commands. Approaches to dealing with git. svn and git operation comparison\rVideo tutorials\rUnity fog of war tutorial. Part 1\rUnity Fog of War. Part 3\r2D Game Tutorial. Part 1. Character creating and tinting\r2D Game Tutorial. Part 2. 2D character with several states and dynamic sprite changing\rUnity custom particle system video tutorial. Making Christmas tree and curves\rOverview\rUnreal Engine 4 overview. Features, cons and pros\rTesting of MSI NVidia GeForce 760 in Ubuntu Linux and Windows\r","link":"https://staraban.com/articles/","section":"staraban","tags":[],"title":"Articles"},{"body":"\rТуман войны в Unity. Часть 2. Мобильная версия (демо)\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков.\rРеализация системы динамически загружаемого контента (DLC) для мобильной игры в Unity 3D\rДобавляем поддержку вращения объектов сцены с помощью кватернионов в Irrlicht engine.\rGit шпаргалка. Варианты работы с git. Сравнение команд svn и git.\rВидео уроки\rТуман войны в Unity. Часть 1\rТуман войны в Unity. Часть 3\r2D Игра. Часть 1. Создание и раскраска персонажа используя шейдер маски (видеоурок)\rУправляемые системы частиц в движке Unity\rОбзоры\rAssassin’s Creed 3: Liberation HD. Обзор\rX Rebirth. Первые впечатления об игре.\rТестирование MSI NVidia GeForce 760 в Ubuntu Linux и Windows.\rIttle Dew. Веселое приключение с пазлами и монстрами.\rDishonored. Обзор и прохождение первых квестов.\r","link":"https://staraban.com/invest/articles-sergey-taraban/","section":"invest","tags":[],"title":"Статьи"},{"body":"\rТуман войны в Unity. Часть 2. Мобильная версия (демо)\rProject Anarchy vs Unity 3D. Сравнение двух игровых движков.\rРеализация системы динамически загружаемого контента (DLC) для мобильной игры в Unity 3D\rДобавляем поддержку вращения объектов сцены с помощью кватернионов в Irrlicht engine.\rGit шпаргалка. Варианты работы с git. Сравнение команд svn и git.\rВидео уроки\rТуман войны в Unity. Часть 1\rТуман войны в Unity. Часть 3\r2D Игра. Часть 1. Создание и раскраска персонажа используя шейдер маски (видеоурок)\rУправляемые системы частиц в движке Unity\rОбзоры\rAssassin’s Creed 3: Liberation HD. Обзор\rX Rebirth. Первые впечатления об игре.\rТестирование MSI NVidia GeForce 760 в Ubuntu Linux и Windows.\rIttle Dew. Веселое приключение с пазлами и монстрами.\rDishonored. Обзор и прохождение первых квестов.\r","link":"https://staraban.com/articles-sergey-taraban/","section":"staraban","tags":[],"title":"Статьи"},{"body":"\nMy name is Sergey Taraban (mmortall). I am the creator of this blog.\rI live in Ukraine and work as a software and game developer.\rMy articles\rMy projects\rFeel free to contact me or subscribe:\n","link":"https://staraban.com/about/","section":"staraban","tags":[],"title":"About"},{"body":"Меня зовут Сергей. Я трейдер с более чем 5-ти летним стажем. Занимаюсь активной торговлей и инвестированием. Торгую в основном на фондовом рынке. Trading View\nhttps://www.tradingview.com/u/mmortall/\nТелеграмм\nhttps://t.me/taraban_invest_ru\n","link":"https://staraban.com/invest/about-me-sergey-taraban/","section":"invest","tags":[],"title":"Обо мне"},{"body":"\nМеня зовут Сергей. Я автор этого блога.\rРаботаю разработчиком игр и програмного обеспечения.\rПодписывайтесь на меня в соц сетях если вам интересно то, о чем я пишу.\rЯ в социальных сетях\r","link":"https://staraban.com/about-me-sergey-taraban/","section":"staraban","tags":[],"title":"Обо мне"}]