Октябрь 2018. -375т

Прошлый

Деньги 694$ (-46)

Продуктивность

Рабочих 34

В основном нонстопом играл.
Так много я еще никогда не играл. Настоящая игромания. Как я вообще 34 рабочих из себя выжал?

Игры + чай + кофе + энергетики + ритмичная музыка похоже двинули мне крышу.
У меня постоянно «разогнанная» психика.
В голове последнее время одновременно по три мысли (игра, музыка и собственно мысль, на которой я пытаюсь сосредоточиться).
Это оказывает негативное влияние на способность удерживать внимание длительное время. В сентябре я начинал снова пользоваться Productivity Challenge Timer (это программа для помидорок), но в итоге перешел на простой таймер. Который каждые 10-15 минут останавливаю и отвлекаюсь.
В начале месяца расширял медитационную сессию с 20 до 30 минут. Но сейчас и 20 не могу усидеть.

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

Акции

-375 тысяч.
Еще в августе накупил с плечом MOEX на два с половиной ляма, думая, что обогачусь. А оно возьми и в минус.
Как и планировал буду ждать.

Прочее

А в целом все хорошо. ))
Есть жена, деньги (еще не кончились), вкусная и в целом здоровая еда, яркие впечатления от игр, мурашки от музыки и разработка хомячков движется.
Похолодало только. С другой стороны и в холоде нашел плюс. Спим с приоткрытым окном. Очень свежо. Из под одеяла только тяжело вылазить.
Что касается «разогнанной» психики, думаю это не на долго и через несколько дней отпустит.

Что касается игромании, то проблема не в конкретной игре или ютубе, я это осознал. И, мне кажется, нужно пытаться контролировать процесс, а не тупо бороться.
Потому, что игромания, как и любая аддикция — это приговор, и конечной победы не существует, процесс контроля должен быть постоянным. А «борьба» подразумевает иллюзию победу… Поэтому надо ставить перед собой задачу «контролировать». Собственно 34 рабочих часа это лучший результат по чистым часам с января. (В январе было 58)

 


Автор: Elsper.ru


VN:F [1.9.14_1148]
Rating: 10.0/10 (1 vote cast)
Октябрь 2018. -375т, 10.0 out of 10 based on 1 rating

167 thoughts on “Октябрь 2018. -375т

  1. Стараюсь работать от 30 до 35 в неделю. Жалеешь себя и страдаешь хуйней…

    Меняй распорядок дня, утренние ритуалы, ограничения какие-то — это все нужно, если хочешь что-то изменить. Если нет — похуй тогда.

  2. @Elsper, а в какую интересную игру-то играл, что так затягивает?

    p.s. вот эти состояния — в идеале у нас такой азарт должен быть при разработке своих проектов 🙂

  3. Да я тоже обновил ПК и давай гамать в Мафия 3, Дум, Томбрайред, Арк и тд прям на выходило за это время игрушек крутых пачки, очень круто

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

  5. Неееее, мне бы научиться так людей разводить как Форекс вас всех 🙂 Это же надо обворовывать людей так, что бы они себя винили в этом 😀 Вот реальная история в тему:

    Сижу в офисе, никого не трогаю. Телефонный звонок, дамочка:
    — Сколько у вас стоит суд?
    — Какой суд?
    — По ребенку.
    — Что по ребенку? Алименты, порядок общения, лишение родительских прав?
    — Вот вы тупые какие-то! Я позвонила до вас в одну контору, мне сразу сказали: 80 000 рублей!
    — Ну… у нас пусть будет 75 000 рублей!
    — А почему так дорого?
    — А в предыдущей конторе что ответили?
    — Сказали, дорого, потому что ребенок!
    — Ну вот! И у нас дорого, потому что ребенок!
    — А можно дешевле?
    — Так подробнее ситуацию опишите!
    — Да какие ж вы непонятливые! Суд по ребенку!
    — А, понял! Дело в самом деле сложное, у нас тоже 80 000 рублей.

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

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

  6. Привет!

    Как мне кажется зря ты в акции, крипту и т.п. «инвестирование» полез. Вот у тебя получается делать игры, ну и нужно делать их. А все эти фондовые биржи, форексы, крипта — это всё «игры для умных», чтобы отобрать у них деньги. Покер ещё есть. Простые, глупые люди играют в наперстки и в автоматы, а люди которые считают себя умными пытаются победить форексы, покеры, букмеккеров, фондовые рынки… Ну это моё такое мнение, я во все это «играл», ну кроме фондового рынка… У букмеккеров получилось чуть-чуть оторвать на «вилках».
    Это как я читал у маркетологов по сигаретам: блондинкам мы дадим розовые пачки — они любят всё розовое. А брюнеткам — они типо умные — мы сделаем стильную чёрную пачку, чтобы они считали себя умными и стильными. А внутри всё одно и тоже дерьмо.

    Ну и игроманию, можно и нужно контролировать — тупо выделяю себе 3 часа в день на игры, а в остальное время «отдыхаю» от игр — ну там работаю в удовольствие, гуляю, кино смотрю с женой, за продуктами в магазин… Чё, не хватит силы воли себя контролировать????

    Про жену — очень интересно тоже, присоединяюсь к предыдущему вопросу…

    Успехов тебе!

  7. Я с игроманией борюсь очень просто — не играю вообще. Никаких вот этих «сегодня пару часов поиграю и все», иначе жесть и провал в жизни на неделю другую минимум))

  8. Рынок и форекс — разные вещи. На рынке тебя никто не обманывает кроме себя самого.

  9. «Еще в августе накупил с плечом MOEX на два с половиной ляма, думая, что обогачусь. А оно возьми и в минус.»

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

  10. Согласен с димаксом, на компе нет ни одной игры, если уж сорвусь и установлю герои третьи или цивилизацию, то следующие пару недель можно вычеркнуть. Играю до полного отвращения к себе:)

  11. нафиг столько в РФ акции вкладывать? на фоне санкций??? как бы можно еще больше потерять…

  12. Якутский бомж, зачем прыгать на могилке?
    Плечо как множитель многих сводило в минус, особенно если вкладываться не только в «русское говно», но и «146% выигрышные американские акции» :)))))

    Elsper — делай игры, не торгуй. Торговать это сложно.

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

  14. А я удачно сделал +15% на акциях Яндекса. Сегодня закрыл. Заработать всегда можно.

  15. «Плечо как множитель многих сводило в минус, особенно если вкладываться не только в «русское говно», но и «146% выигрышные американские акции» :)))))»

    Ну так я об этом и говорю — кто-то относится к фондовому рынку как к инвестициям и в долгосроке выигрывает, а кто-то пытается «заработать» (трейдит, покупает с плечом (как там еще маржин колл не сработал) — и системно оказывается в жопе. Выводы каждый делает сам.

    «вложись по-серьезному и мышление будет по-другому работать»
    То есть ты считаешь правильной тактикой торговать с плечом? У меня акции не для того, чтобы на этом зарабатывать.

  16. Жека, играл в то же что и в прошлом месяце «Пути истории».
    Топовый игрок + управляющая роль в местом «клане» + соревновательность с соседними кланами-странами. Такая ситуация удерживает внимание. И вот именно это удерживаемое внимание — и есть главная причина.

    Еще немного в «Pathfinder: Kingmaker», «Beholder», в одну из ночей прошел квест «oxenfree». Но все эти игры не оказывают такого разрушительного внимания, потому, что не держат мое внимание с такой силой.

    «вот эти состояния — в идеале у нас такой азарт должен быть при разработке своих проектов»
    А у меня и был год назад, когда я хомяков начинал. Я же тогда за месяц сделал основные блоки и довел до технического прототипа. С тех пор правда перевел игру с флеша на юнити, а потом еще с сингла на мультиплеер. Плюс придумал пару блоков, о которых не думал год назад.
    _____
    Seokeys69, у меня хоть и топовый ноут (i7 седьмого поколения, 32гига ddr4, 512ssd самые быстрые что были два года назад, на видюшке правда сэкономил, но я знал, что она мне не нужна), но играю я обычно не самые требовательные игры ))) Потому, что мои любимые жанры просто не делают супер прожорливыми.
    _____
    Devvver, тут главная проблема все же плечо. Ну и MOEX — это сама биржа. Поэтому думаю принцип «не класть все яйца в одну корзину» тут имеет меньше влияния. Потому, что в этой корзине уже итак все яйца лежат.
    _____
    Андрей, мы это уже обсуждали ты просто не хочешь понимать, что такое акции.

    А по жене. Рисует в основном, играет иногда, но мало. Думает как компанию расширять с текущих двух людей. )))
    А что она может сделать, чтобы поднять продуктивность?
    К родителям жить пойти и вернуться только когда хомяки в альфу перейдут?
    _____
    Andrei, а деньги куда заработанные? Прожирать что ли? Или мертвым грузом в ящичке хранить? Тогда уж облигации хотя бы.
    Но ты этот вариант не назвал.

    «Чё, не хватит силы воли себя контролировать????»
    По-моему это очевидно )
    _____
    DimaX, если не играть, то я все равно найду чем упороться. Ютуб тот же. Это не проблема конкретно игр.

    Плюс я же разработчик игр. Один из мотивов разработки — это неудовлетворенность существующими играми. Так, что мне надо не гасить, а именно управлять тягой к играм.
    Если она погаснет, то каким способом я сам смогу сделать что-то интересное? А сейчас я смотрю на экран, где хомяки бегают и сразу вижу — это интересно или скучно получается.
    Моя внутренняя тяга к играм откликается и говорит мне, «в это было бы интересно поиграть».
    _____
    dimka, следом AdvUser верно написал про «146% выигрышные американские акции» ))
    У меня и по американцам -4к $ по открытым позициям. При том, что до этого тысячи на полторы я закрыл убыточных. В тинькове лежат три американские компании. По ним. -17,23% -15,51% -31,18%
    В цене русских заложены политические риски уже и поэтому они дешевые.
    Из-за низкой цены у русских акций высокие проценты див выплат. Что делает их довольно привлекательными, тем более если торговать с плечом, потому, что за плечо ведь платить надо, русские хоть с дивов покроют выплату за кредит.
    Та же MOEX 9% дивов годовых дает, впрочем цена рухнула, как раз потому, что они не дали осенних дивидендов. Еще одна компания у меня на пол ляма, обещает под 12% и последний отчет был хороший.
    _____
    AdvUser, опять же а деньги куда? На облигации? Скуууучно. Я еще слишком молод, чтобы отказываться от акций в пользу облигаций.
    Но от плеча пора бы отказываться. Но не продавать же на минимумах?
    Про «Якутского бомжа» забавная шутка, я даже не сразу понял ))
    _____
    Spryt, если ты сторонник «максимально осторожного» подхода, то почему не облигации? Акции это уже более высокий уровень риска, чем облигации. А значит между нами разница лишь в степени принятия риска. А не в чем-то принципиальном.

  17. «Spryt, если ты сторонник «максимально осторожного» подхода, то почему не облигации? Акции это уже более высокий уровень риска, чем облигации. А значит между нами разница лишь в степени принятия риска. А не в чем-то принципиальном.»

    А я не сторонник максимального осторожного подхода. Вопрос в способе использования инструмента. Облиги у меня тоже в портфеле есть, только меньший процент (а уж на падающем то рынке сам бог велел акции подешевевшие покупать). Если тебе деньги жгут карман — то зачем играть с плечом?

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

    И почему не делаешь более мелкие игры?

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

  20. Евгений,

    Потому, что более мелкие я уже делал. Не топтаться же вечно на месте.

    Да и что такое большая или маленькая игра? Они все у меня имеют десятки экранов, сотни файлов и больше мегабайта текста кода.
    Сейчас пока 84 экрана.
    В прошлой было 129. Конечно не правильно называть это именно экранами в полном смысле слова, часть из экранов черновики, которые я не стал удалять, часть экранов комбинируются в один общий. Но общий объем работ соотносим.

    Кода примерно 1,3метра. В прошлой примерно полтора.
    Так, что я еще даже не дотянул до прежней.

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

  21. ««Пути истории».
    Топовый игрок + управляющая роль в местом «клане» + соревновательность с соседними кланами-странами. Такая ситуация удерживает внимание. И вот именно это удерживаемое внимание — и есть главная причина.»
    — это как соцсети — всё на удержание внимания. Чтобы человек, как обезьянка, каждые 12 минут кликал и запускал ленту.
    В Пути истории — я зарегился и пару недель поиграл. Но понял, что она сделана так, чтобы сидеть безотрывно и бросил играть. Сейчас смотрю как добивают мой город — да и пофиг, есть занятия по интереснее. Я думаю, пути истории сделаны специально как наркотик — поглощают всё твое внимание…
    В любом случае удачи тебе!
    Я думаю, ты найдешь способ как контролировать свою игроманию.

  22. Вот что значит правильный ключевик в заголовке поста =) Вот как разработку игры обсудить, продвижение или монетизацию, так 2-3 человека… а как посоветовать как надо было полтора ляма пристроить, так все потомки Рокфеллеров, Ротшильдов и Морганов 😀

    Жека, ща этот народ рассосется и обсудим =) А пока полезная рекламная пауза с законом Паркинсона: ВЫСОКАЯ ФИНАНСОВАЯ ПОЛИТИКА, или Точка безразличия. В высокой финансовой политике разбирается два типа людей: те, у кого очень много д… (http://azps.ru/hrest/78/2446725.html)

    п.с. а вообще Элспер, как можно играть в игры для развлечения, когда можно что-то новое освоить в Unity или добавить в свою игру с Хомяками?

  23. Та же MOEX 9% дивов годовых дает

    зачем тогда туда вкладывать? в обычных банках же депозиты столько дают. Только чтобы греть надежду что когда-нибудь компания вырастет?

    как можно играть в игры для развлечения, когда можно что-то новое освоить в Unity или добавить в свою игру с Хомяками?

    не бывает же разработчиков идеально дисциплинированных 🙂

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

    в одиночку работать — теоретически замечательно, и жизнь свободная, и график как хочешь выстроишь, и путешествовать успевать можно…

    но без фантазий на практике в одиночку дисциплины не хватает

  24. «В любом случае удачи тебе!»
    Спасибо )

    «А пока полезная рекламная пауза»
    Интересная ссылка.

    «когда можно что-то новое освоить в Unity или добавить в свою игру с Хомяками»
    Вот когда что-то можно освоить или добавить, я обычно могу засидеться, как раз.
    Но обычно надо что-то придумать. А не просто сделать. И вот это придумывание нифига не способствует вовлечению в поток.

    «Только чтобы греть надежду что когда-нибудь компания вырастет?»
    Да, именно так.

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

    На счет мыслей — ты пытаешь бороться с ветряными мельницами, мысли, постоянный внутренний диалог из множества мыслей говорит о том, что ты что-то делаешь не так и чем сильнее ментальный диалог + чем негативнее мысли — тем больше ты косячишь. Медитациями убирать эти мысли и ментальный диалог — как бороться со следствием игнорируя причины.

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

  26. Я два раза в жизни уходил с головой в онлайн-игры. Один раз Diablo, другой раз танки.

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

    Но люди разные, бывает те, кто годами активно долбится в одно и то же без перерывов.

  27. «хочешь не хочешь, работать будешь»
    Жека, главное себя тренировать. Вот допустим есть у тебя дурная привычка что-то делать не так как надо. Как только поймаешь себя на том, встаешь и переделываешь. Даже если от этого уже нет смысла. Так ты создаешь в своем сознании автоматический шаблон правильного поведения.

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

    Ну а в случае с Элспером надо жестко, жена может ему отказать в сексе если он будет играть больше часа, не кормить вкусняшками или просто поставить на ПК блокиратор (у меня он стоит, что бы каждые 30 минут вставать и ходить в течении 2 минут, как же я иногда матом ругаюсь… если над багом работаю :D)

  28. п.с. Вчера так и не успел установить Unity. Вспомнил что надо бы OS переустановить на новом SSD винчестере, что бы Unity шустро работал. Ну а переустановка OS это хуже пажара =)

    А вот на счет игр… помню только Сферу от яндекса, это одна из первых онлаин игр (еще на модеме), и еще что-то было с драконами. Но и в первом и во втором случае, проблема шаблонности миссий. Ну какой смысл одно и тоже по 1000 раз делать или когда видишь, что следующий левел будет через неделю или месяц? Соревноваться у кого … больше? При этом размер зависит только от количества времени проведенным за ПК или слитым РЕАЛЬНЫМ баксам на бонусы?

  29. Жека, Unity подходит к кодингу очень интерестно. Именно это и есть единственное различие между ним и моим движком. Я даже поражаюсь, как я сам дошел до такого решения… обидно только то, что изобрел свой велосипед.

    Но вот проблему наследования и рассширения классов (компонентов) они очень оригинально решили — через свойства. Главное только разобраться каие готовые компоненты есть и как с ними работать (вот на это уйдет год практики).

    Вообще, я не могу понять как тут кто-то спрашивал Элспера, мол в юнити надо мышкой или кодом… Unity это чисто C# код и кодить тебя заставят по всем правилам ООП (инкапсуляции, наследования, MVC модель и т.д.)

    Я еще не пробовал скелетную анимацию Spine-а, но подозреваю они будут генерировать префабы и компонент движения для Unity, вот и все. Элспер, как ты хомяка анимировал в Unity через Spine?

  30. henzo, про контроль и отказ я чуть раньше написал, что если вычеркнуть из моей жизни игры вообще, то станет намного хуже.

    А контроль заключается не только в сдерживании, но и в переключении внимания.

  31. Андрей, мне наоборот не очень нравится их структура GameObject хотя навешивание компонентов и впрямь иногда удобно.
    Но в итоге я все же пишу все на своих классах.
    Они конечно содержат в себе GameObject, но логически я оперирую все же своими классами и объектами, а не юнитовскими.

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

  32. интересно, я Spine/DragonBones в принципе на 80% освоил

    теперь вопрос поднимается, как делать анимацию выразительной)) просто шевелить кости и деформировать мэши оказывается недостаточно чтобы красиво получалось 🙂
    получается, надо основы выразительной анимации знать

  33. Так дело в том, что я у себя делал наследованием. Вроде все супер… НО вот есть два класса допустим progress и slider у обоих есть свойства min, max. Если создать класс на основе этих двух (что бы объект созданный на их основе имел свойства обоих) то возникает проблема, когда первый перекроет свойства второго… я потом придумал писать типа progress_max, slider_min но намного проще сделали разработчики Unity. Они просто каждый из этих классов навешали на нужный объект и каждый класс имеет доступ к нужным данных, не создавая друг другу проблем.

    А почему ты все же решил писать свое? Можешь привести пример, где ты используешь свое и как именно реализовал. Очень не хочется повторно идти по не правильному пути =) Может и в правду есть случаи когда стоит делать самому (и как именно?)

    До мешей я пока не добрался (до текстур в целом). Я вообще хочу еще и 3Д обойти пока стороной. Но вот спайн очень хочу разобрать, так как считаю что без него создать что-то красивое будет сложно. Вот жека правильно подметил про «выразительную анимацию». Я даже больше скажу… всем вешают лапшу (особенно разработчики псевдо движков) что главное это среда разработки. На самом деле, что бы создать игру, для этого нужен хороший художник, программист и еще АНИМАТОР!!! Вот аниматор это и не кодер и не художник… хотя в рисовании наверно разбирается, а вот в коде не обязательно =)

    Жека покажи гифку твоих набросков в анимации, очень интерестно посмотреть

  34. Элспер еще такой момент… меня Visual Studio заставляет переменные начинать с маленькой буквы и каждое последющее слово с большой, а функции с большой. В принципе, я сам часто менял стиль и под конец остановился на _ между словами и все мелкими. Что бы не заморачиватся когда есть переменная типа userIp которая выглядит фигово… а писать userIP как то не верно… иногда вовсе попадаются сразу два слова абревиатуры… по этому использую user_ip (хотя теперь сложней понять это свойство или метод. А ты как в Unity кодишь? (Жека и тебе такой же вопрос, правда у тебя другая среда разработки)

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

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

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

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

  37. Жека покажи гифку твоих набросков в анимации, очень интерестно посмотреть

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

    щас хочу научиться добавлять глубину 2d-картинкам, типа как тут: https://www.youtube.com/watch?v=-LT7TgRcuE0

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

    P.S. я тоже «кожу как хочу», стараюсь как можно меньше ООП, а то в последнее время на ООП все плюются, как мне кажется доля правды в этом есть.

  38. Жека, если на ООП все плюются, может ты не тех читаешь/слушаешь?
    Как можно плеваться на ООП?
    Точнее иначе вопрос поставлю, как можно программировать что-то большое без ООП?

    А интерфейсную анимацию, да тоже в спайне делаем.

  39. Элспер: Понятно, видимо у тебя очень много наработок и если переходить на Unity целиком, потеряешь много времени. В принципе к образу Unity надо привыкнуть. Я вот вчера час потратил, пытаясь понять почему приложение перестало работать после того, как я создал на основе реального объекта prefab. А на практике оказалось, что при создании prefab, слетело одно из свойств (которое цепляешь в редакторе перетаскиванием). А после еще узнал (что логично в принципе), что prefab не может использовать элементы существующих объектов, только другой prefab или уже программно при его создании надо цеплять.

    Пока боюсь только одного… из за отсутствия (может я ошибаюсь?) прямой возможности передавать данные между объектами и необходимости делать это через свойства, может возникнуть путаница в больших проектах. Сложно будет вспомнить, кто куда и что использует. Наверно ко всему надо будет добираться через GameManager… время покажет.

    Вот же приятно видеть, что не только я за подчеркивание =) Я как начал его использовать, исчезла головная боль с большими буквами. Жека, а ты чего нам свою анимацию не показываешь? Ну может там не супер и может кривенько, но все же твое. Меня не пример интересует, а оценить насколько это сложно и как ты продвинулся (есть ли мне смысл это делать или просто пойти на стор купить или заказать у профи аниматора).

    Про ООП — согласен с Элспером, Жека не затягивай ты с этим. Рано или поздно придется перейти и чем раньше, тем быстрей игру писать сможешь. Без ООП просто не реально игру создать… кода будет столько… и главное все будет ОЧЕНЬ запутанно. Хотя к ООП надо привыкать, мне он по началу тоже не нравился. Очень, очень давно из за одного экзамена на магистратуре, я как бы углубился и после перешел только на него.

  40. я говорил «поменьше ООП», а не совсем без него:))

    @Андрей, имхо нам обязательно нужно основы Spine/DB освоить, чтобы меньше зависеть от художников. Иногда требуется слегка поправить чужие наработки. Или самому быстро создать что-то несложное, не обращаясь к художникам по пустякам.

  41. Жека, ну принципиально сувать везде ООП, это конечно тоже крайность.
    Мои главные куски кода это длиннющие функции с вложенными вызовами других функций.
    Но все данные исключительно по ООП модели.
    Всё построение сцен это тоже объекты от классов. Все мои элементы (картинка, кнопка, текст, анимация, группа) имеют в базе мой же класс «объект». И мне ОЧЕНЬ удобно иногда обратиться к картинке именно, как к объекту.
    Более того, я даже был вынужден специально переделать свои классы, чтобы сделать их все наследуемыми от «объекта». Изначально картинка, группа и анимация были самостоятельными классами. (кнопка и текст это функции/методы класса картинки)

    Что касается основ спайна. Тут надо понимать как впринципе все там работает, потому, что мне например пришлось менять код плагина спайна для юнити, чтобы
    1) Ускорить отрисовку.
    Для этого надо понимать, что 3D полигон может быть односторонним — и это быстрей. Но надо понимать, что сторона в которую он отображается зависит от последовательности вершин. Далее надо понять как и в каком месте код плагина строит эти полигоны. И развернуть те из них, что по какой-то причине смотрят не в ту сторону. (Таковой причиной является флип)
    2) Упростить навешивание разных шкурок на скелет.
    3) Адекватно обрабатывать смену картинки слота.
    Если например в анимации хомяк моргает и у него меняются глаза, то происходит смена картинки. Но что если изначально анимацию делали под рыжего хомяка, а применяется она для серого хомяка. Ведь в смене анимации заданы глаза рыжего хомяка. Так, вот нужно понимать, что есть эти слоты, что у них есть картинки, что эти картинки меняются, ну и найти место в коде, где они меняются, чтобы когда анимация меняет глаза на «eyes_brown» мы бы могли перехватить это изменение и сказать, что если хомяк серый, то ставим eyes_grey. (На самом деле у меня нет таких имен)

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

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

    «из за отсутствия (может я ошибаюсь?) прямой возможности передавать данные между объектами»
    А зачем? Я использую статическую переменную в каком-нибудь стороннем файле и все кому надо смогут этими данными пользоваться.
    И искать не надо. Все данные в статиках лежат в одной папке.

    Красивую анимацию делать, конечно сложно.
    А просто движение — очень просто. Ведь нужно только задать положение в ключевых кадрах и всё. А остальную работу делает код.

  43. @Жека, вот мне очень понравилась твоя фраза «чтобы меньше зависеть от художников». Я то с тобой согласен, но когда меня спрашивают, в каких технологиях разбираетесь и я им отвечаю, они не верят и думают, что у меня поверхностное представление о них, настолько они разношерстные =) А как иначе? Сам ты качественно сделаешь работу, а вот фрилансеру по фигу, ты для него одноразовый заработок… не ты так кто-то другой даст новую работу.

    Мне понравился пример с гаечным ключом. Вот только он столько времени потратил на такую простенькую анимацию. Представляю сколько же надо труда что бы анимировать целого персонажа =)

    @Элспер, а почему тебе не продублировать анимацию для рыжего хомяка в целом? Я понимаю, что программно там всего один кадр меняется, но ведь для будущего лучше этих хомяков разделить и если нужно будет рыжему добавить седло или шапку, то черного это не заденет. А вот по поводу отрисовки — я больше всего именно этого и боюсь. Я ведь почему от Phaser ушел, там Cordova не давала мне нужной скорости и даже после всех манипуляций, я не смог добиться нужной мне скорости запуска сцен.

    А вот про сторонний файл можно по подробней Элспер. Можно и простенький пример с кодом =) Ты не забывай, в Unity я пока чайник и только осваиваюсь. По этому с виду даже элементарные вещи мне не понятны (особенно текстуры, меши и точки =)). Спасибо

  44. p.s. Пипец, как же шикарно реализованы constraints в Unity. Вот эта ихняя контейнерная модель вместе с возможностью добавления компонентов, делает постройку резинового дизайна сущим пустяком. Главное что бы после в игре это все работало шустро а не тормозило 😀

  45. Андрей, про дублирование анимации. Твой же пример и использую.
    А если нужно будет добавить шапку всем хомякам? А если анимацию новую сделать? А если еще одного хомяка нарисуем?
    Сейчас это все в одном файле и шапка сразу всем хомякам (при желании я ее выключу или включу кодом конкретному хомяку).
    Все анимации доступны сразу всем хомякам.
    Новый хомяк получит сразу все анимации и «шапки» уже сделанные.

    А если хомяков разделить, то потом каждую правку придется делать в каждом хомяке. А их уже 4 разных цвета. А мы хотим добавить еще 5-6 особых скинов.

    Да в спайне есть что-то связанное со скинами. Но я не стал вникать, ведь я итак справился прекрасно на уровне кода.

    Про сторонний файл. Это же просто static public
    В С# существует такая штука, как namespace. Пространство имен в котором можно обращаться к тем или иным классам.
    Unity просто все что видит в папке assets (и подпапках, конечно) считает частью одного namespace.
    Итого есть у нас файл с содержимым

    public class my_class
    {
    public static int my_int;
    }

    И мы можем из любого места программы обратиться к переменной my_class.my_int и работать с ней, как с любой другой.
    Создавать объект класса не нужно.

    Я так еще с флеша делаю. Все данные хранятся в таких вот классах и я к ним получаю доступ от куда надо.

  46. Спасибо Элспер, теперь понятно на счет переменных. Просто мне пока очень не привычно, что Unity за меня все создает автоматом… На счет спайна и скина согласен, решение ты выбрал оптимальное. А насколько сложно кодом вносить правки? Есть ли документация? Править в исходниках надо или у себя в коде?

  47. И у себя и в исходниках, зависит от сложности вмешательства.
    Просто заменить картинку в слоте у себя. А менять картинку во время анимации, это надо через исходник ловить этот момент.
    К счастью код плагина открыт.

  48. интересно, что там за гениальные изменения Elsper в spine-плагин внедрил 🙂
    как это вся индустрия пользуется как есть, и в ус не дует, а тут оказывается вон оно что 🙂

  49. Не знаю, как ))
    Как получается, так и пользуются. Из ошибок неправильное построение треугольников. Неправильный порядок вершин. Я тут писал.
    http://elsper.ru/2018/01/itog-dekabrya-2017/
    Наверное разработчики просто не оптимизируют скорость и не ставят односторонние текстуры и поэтому не сталкиваются с этой проблемой.

    Плюс я в паре мест его просто под себя переделал, чтобы расширить его функционал.
    1) Сделал возможность разделять объекты по глубине, чтобы картинка могла «окружить» другую картинку. Конкретно у меня эта проблема была с тем, что сам хомяк стоит ПОЗАДИ стола. Но его РУКИ на ПЕРЕДНЕМ плане. Тоесть руки на другой Z позиции. Если не разделять по Z внутри хомяка, то надо делать две анимации будет. Анимацию хомяка, и отдельно анимацию рук.
    2) Уже упомянутая выше подмена содержимого на лету во время анимации. Если этого не делать, то придется делать анимацию под каждый скин, и в каждой из них использовать свои картинки слотов. Тоже можно, наверное так и делают.

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

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

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

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

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

  52. @Elsper, ты так рано встаешь, или еще не ложился? 🙂

    P. S. Я сегодня решил полностью разобраться в Spine и DB api-документациях, мне кажется там возможно увидеть реальные различия.

  53. Ложусь поздно.

    Еще важно как потом в коде со всем этим работать.
    Или DB тупо делают экспорт идентичный спайну, и потом спайновским плагином можно работать с результатом?

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

  55. Хз, как по мне, так это оч.полезные инструменты: Inverse Kinematiks, деформация мэшей, настройки веса.

    Максимум один день уходит, чтобы всё это попробовать и разобраться в API.

  56. поковырялся я в возможностях API обоих программ
    в принципе различий особо нет

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

  57. Я прерву вашу беседу и задам банальный вопрос. Я на Unity уже закончил первую пробную игру НО прочитав 300 страниц кода, не нашел ничего о разрешении игры =) Гугл тоже не помог… в Unity что game resolution вообще нет как такового? Что за бред? =)

  58. А что именно ты хочешь?
    Там камера. С ней и мучайся.
    Еще в самом редакторе во вкладке game, когда тестируешь, сразу под game есть выбор.
    А так у меня даже полосы специально сверху и снизу поставленны, чтобы не было неприятных сюрпризов на планшетах, но думаю это неправильное решение. Не помню уже, почему именно это взял…

  59. Вот, вот… а там во вкладке Game есть только возможность задать соотношение. Получается сколько на сколько пикселей показывать решает за меня сам Unity? Конечно это не критично, но допустим я хочу, что бы на слабеньком мобильнике разрешение было 360х480… хотя мобильный имеет нативное разрешение 720х960.

    1) Получается весь интерфейс надо относительно прямоугольника камеры располагать?

    2) А самое забавное, я когда по книге делал игру, там сказали добавьте кнопку UI и типа пока не заморачивайтесь что такое Canvas… я все ждал и ждал, закончил игру, но ни слова не сказали на хрена он мне вообще нужен? Я ведь без него могу создать Game Object-ы и они прекрасно без Canvas отображаются…

    3) А еще больше я шокировался, когда конвас у меня был в 40х больше камеры, но весь канвас и его children-ы идеально масштабировались под камеру автоматом =) Прям как технология Вуду… хрен поймешь почему работает, но оно работает =)

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

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

    «что бы на слабеньком мобильнике разрешение было 360х480… хотя мобильный имеет нативное разрешение 720х960»
    А разве телефоны меняют разрешение? Я об этом первый раз слышу.

  61. Мобилы то не меняют Элспер, но вот одно дело отрендерить сцену в качестве 1600х2500 а другое дело в 480х600. Сижу вот решаю тривиальные задачи. Почему то мои PNG в высоком разрешении в игре напоминают minecraft 😀 Сверяю с асетмаи из книги вроде мои лучшего качества… из параметров только не совпадает Generate Mip Maps… вот всегда так когда только начинаешь =)

  62. Да ставь как есть и не парься с расширением.
    Если что можно покопать в сторону edit — project settings — quality

  63. Да нет, там просто очень страшненько все =) Спрайт задан… сжатие при импорте отключил, качество текстур high, почти все проверил по этой инструкции:

    Game view scale should be 1x (the slider near resolution selector).

    Sprite filtering shouldn’t be point.

    Edit->Project Settings->Quality->Texture Quality should be Full Res.

    «Generate Mip Maps» on sprite import settings if you zoom in / out a lot.

    Make sure your sprite gameObject has a scale of 1 on x, y and z.

    Make sure your sprite import max size is at least as big as your source image.

    Make sure your sprite import compression is not set too low (try None to see if it has an effect).

    Pixel perfect orthographic camera size: (Vert Resolution/Pixels per Unit) * 0.5. For example: given a sprite imported with 64 Pixels per Unit, and a 1280×720 game resolution the camera size should be (720/64) * 0.5 = 5.625.

    Пока с нулевым результатом, но разберемся =)

  64. Хорошо что решил проверить под конец все на мобиле и… на мобиле все кристально чисто. Видимо на ПК Unity уменьшает качество. Так что завтра с утра начинаем постепенно осваиваться. Элспер, у тебя какой размер выставлен у камеры?

  65. 240.
    У меня Pixels per Unit = 1, не понимаю я этих приколов с 100, или вон в твоем примере 64.
    Размеры в которых я работаю 854×480

  66. ребят, кто-нибудь когда-нибудь имел дело с разработкой игр на C++? там и вправду что-ли реально страшно, как пугают?

    мне любопытно, но никак руки не дойдут, это надо свободную недельку

  67. Элспер, я собирался подымать это значение до 300, но пока оставлю 100. Если довериться моему опыту из Phaser-а, для FullHD надо от 250 и выше. НО в Unity, нет напрямую такого понятия как разрешение экрана (только размер камеры, по этому и интересно какое значение у тебя там выставлено)… а значит, он автоматом будет использовать максимально качество текстур.

    Жека, если ты про создание игр через DirectX, то был такой опыт =) Все в сотни раз сложней, чем сейчас. Максимум на что ты мог рассчитывать это на наличие базовых БЫСТРЫХ операций вывода графики. Хотя сейчас уже будут готовые движки, которые за тебя будут все делать, как Phaser/Unity. А тебе это зачем?

  68. А тебе это зачем?

    хочу когда-нибудь Unreal Engine на досуге посмотреть

    я в 3D вообще полный ноль, интересно, как там, по сравнению с 2D, хотя бы просто ради общего кругозора

  69. Всё быстрое 2D это надстройка над 3D, просто камера фиксированная. Так, что быть нулем в 3D по любому не получится, если начинать понимать, что делаешь.

  70. я не понимаю про надстройку над 3d

    в быстрых 2D моб.движках что-ли 2D это надстройка над 3D, хоть и о поддержке 3D не заявлено?

    (у 3D-движков производительность 2D-игр оч.уебищная, сколько я видел)

  71. Ну а как оно на железе то работает?
    Железо обрабатывает 3D. А 2D это всего лишь частный случай 3D.

  72. аа, я вспомнил, ведь в 2D-движках тоже есть возможности управления 3D-объектами

    какие-то разработчики показывали экспериментальные примеры (на Defold даже целую 3D-игру создали тамошние извращенцы)

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

  73. Спасибо Жека интересные ссылки =)

    Элспер, тебя не напрягает, что для использования простого Tween в DOTween надо подключать целый вагон файлов и маленькую тележку?

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

    Ты сам не пробовал на вакансии подавать заявки? Дофига же вроде вакансий нынче. Например html5-playable ads востребованы в индустрии, и т.д.

    В офис на зп в команду не хотел бы? Или ты в душе свободный сталкер? 🙂

  75. Ну там всего несколько DLL. Может ты что-то не то скачал?
    И нет, конечно не напрягает. Разработчики DOTween поумнее меня думаю.

  76. @Андрей, оч.интересно было бы почитать, если бы ты как Zaxx посоветовал, на Хабре написал статью типа «как я добился 200тыс установок и прогорел»

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

  77. Да я скилет своего твин класса накидал, а потом передумал. Я сообразил, что Unity по фигу где файлы… вот я и удалил вторую папку с настройками и перекинул файл из нее в его Demigiant папку. Вроде работает =) Потом для пробы переименовал Demigiant в нецензурное слово 😀 и сработало. А одна папка меня как то не напрягает. Не люблю когда каждый плагин считает обязанностью создать кучу папкой… а так пусть себе в одной паке лежит (вот на фига было настройки в отдельную папку кидать то?).

    Я пока свой твин класс разбирал, научился делать Singleton =) Анонимные функции типа () => {} И там вроде есть еще что-то вроде x => variable = x можно передать в виде параметра функции. Элспер ты случаем не углублялся на столько? Как это хотя бы называется, что бы потом почитать.

    Жека, я пока думаю на счет Хабры. Одно дело, если я вот возьму и напишу статью про Элспера, как он хомяков делает (шутка Элспер), а другое дело написать информацию, которая тебе обошлась во много килобаксов и год твоей жизни =) Мне жалко моих нервов…

    У меня было несколько предложений зам начальника (тимлид), но там был контракт и довольно все сложно с оплатой. Хотя предложений именно по геймдевелопу пока еще не было. А доход… ну так я же в интернете с нулевых. Но мне очень хочется иметь доход именно с разработки игр… это будущее.

    Очень большие надежды на Unity и удивляюсь, как народ кодит на чем то другом…

  78. «Как это хотя бы называется, что бы потом почитать.»
    Лямбда. Но я это использую только если меня принуждают, тоесть кто-то уже написал функцию, и чтобы ей воспользоваться надо передавать параметры именно таким видом.
    Сам не вникал в это.

    Да юнити ПОЧТИ пофиг где файлы (в коде главное namespace же. А юнити по умолчанию считает, что все в одном пространстве).
    Но есть значение какая родительская папка.
    Главное все что используется в игре, в Assets запихать. При чем там уже можно папки и подпапки, как хочется тусовать.
    Еще ресурсы должны иметь родителя Resources.
    Но этих Resources может быть несколько в разных местах (при желании) и вовсе не обязательно чтобы сама папка Resources была первоуровневой подпапкой Assets. Она может и глубже быть вложенна.

    «как народ кодит на чем то другом…»
    Сказал человек, которого еще недавно было не оторвать от html5 )))

  79. Очень большие надежды на Unity и удивляюсь, как народ кодит на чем то другом

    я наоборот бросил все надежды

    мне достаточно чтобы Spine и Photon поддерживались, и производительность была хорошая

    этого достаточно, чтобы делать моб.игры уровня топ-тайтлов в сторах, ничто абсолютно не ограничивает

  80. Про лямбду надо почитать 🙂 Я тоже не планирую… но лусше знать, может будет ситуация для которой она будет идеальным решением. На счет Фейзера… ты прям как предсказатель 🙂 Сегодня матом ругался… авто позеционированние вроде имеет баги на разных мобилах, ну да ладно… потом оказалось тригером пользоваться нельзя, он потом не передает дальше сигналы и скрол не работал… скрол сам по себе работает только если есть фоновая иллюстрация… короче полный зоопарк. Кто сказал, что не придеться свои компоненты писать? Кнопку ввою сделал, сегодня если бы не нашел решение с тригером, пришлось бы прокрутку свою делать да и фотка в фоне напрягает… а я ведь только начал 😀

    Жека, пока не поздно отрекись от лже среды разработки и твоя геймерская душа спасеться 😀

  81. Элспер… ты как подгружаешь спрайты из Resource папки? Я вот заметил, что если подгружать самому, сцена грузится медленно, но если создать заранее префаб, тогда в два раза быстрей. Такое чувство, что сам Unity в тихую в фоне все подгружает.

    Я почему спрашиваю… при эксперименте, на генерацию сцены с выбором уроков у Unity ушли те же 2.8 сек что и у Phaser-а. Конечно, я потом сумел чуток сэкономить создав заранее три цветовых шаблокна кнопки. А после скрыл иконку и через каратин (главный плюс Unity) постепенно начал подгружать и как только иконка подгружена, делал ее видимой.

    Вот и вопрос… как бы сделать подгрузку в фоне? А если точней, как сообщить Unity, что надо вызвать определенный метод, как только запускается подгрузка сцены через LoadSceneAsync? Ведь Start() будет запущен только после того, как сцена будет активирована. Значит должен быть другой метод, который получить управление… после того как его сцену начнут асинхронно подгружать в фоне.

  82. Вот так

    private Texture2D _texture;
    private Sprite _sprite;

    _texture = Resources.Load(name, typeof(Texture2D)) as Texture2D;
    _sprite = Sprite.Create(_texture, new Rect(0, 0, _texture.width, _texture.height), new Vector2(0f, 0f), 1f);

    Создаю компонент SpriteRenderer и меня в нем параметр sprite

    name — имя файла без расширения

  83. @Андрей, почему у тебя сцена такая тяжелая?
    Что туда надо напихано, что аж 2.8сек прогружается?

  84. Странно, я вот именно так и подгружаю Элспер. Только у меня Image вместо SpriteRenderer. Дело в том, что если создать к примеру список (массив) из спрайтов у объекта и загрузить все иконки через них, то все будет грузиться быстро (проверю как раз сегодня). Но это как бы костыль… или Unity как бы создает текстуры и все прогружает постоянно в фоне… Я ведь когда генерировал 80 кнопок и менял им два спрайта терял время, после как создал три префаба в три цвета и использовал нужный, начал экономить. Только если экономия тут за счет клонирования… один раз прогрузилось и после банально клон, а не как у меня было, сначала клон а потом обновление цветов спрайта.

    Жека, да на самом деле все банально… я для теста решил список уроков из обучалки отрисовать. Это 80 кнопок, каждая кнопка это 4 Image: фоновый кружок, иконка урока, фон под панель со звездами и один спрайт со звездами. На саму гунерацию 80 кнопок уходит 0.8-1.5 сек, а вот на подгрузку 80 иконок для каждого урока еще 1.5 сек. Что бы интерфейс не подвисал, я их подгружаю в отдельном потоке и помере готовности отображаю. Получаеться эффект как при подгрузке веб страницы =)

    Именно что бы избежать этого эффекта, надо иконки уровней заранее прогрузить в фоне… они кстати fullhd порядка 512х512 пикселей каждая. Текстуру тут особо не создаш или надо будет мульти файловую текстуру (Unity вроде их поддерживает, в отличии от Phaser-а), может и даст прирост скорости.

    Самое не понятное, почему при прогрузке сцены в фоне, не срабатывает ни один из методов awake, start… что бы добавить туда подгрузку спрайтов. Вот свои спрайты уже существующие на сцене, Unity подгружает при подгрузке уровня в фоне, а мне не дает возможности выполнить свои подготовительные операции в фоне 🙁

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

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

  86. После длительных экспериментов, пришел к выводу что использовать DontDestroy для визуальных элементов очень усложняет код. Я конечно добился, что бы мой Signleton класс благополучно все сохранял и убирал дубликаты НО все равно визуально все остается видимым… значит надо найти оригинальный способ как временно убрать не нужный мне кусок из Canvas. Но и это не все… вот был у меня prefab с загрузкой нужных сцен и визуальным прогрессом. Что бы он работал как надо, пришлось выносить в отдельный Canvas, потом делать класс загрузки Signleton-ом… ведь если сохранить только сам класс загрузки, Unity после смены сцены удалит его визуальное окошко с загрузкой =) А если его тоже сохранять, то возникает проблема скрытия и отображения в нужное время визуального объекта.

    На сегодня хватит экспериментов =) Уже завтра попробую в фоне подгрузить спрайты заранее. А пока пошел попробую другой экран создать. Уверен там тоже много нового узнаю про Unity.

    Элспер, Жека и другие… если у кого есть идея или знает что я делаю не так как надо, пожалуйста отпишитесь =)

  87. @Андрей, я проекты дизайню в разрешении 480×854.

    Даже на экране смартфона fullhd@1080p картинка выглядят хорошо и резко, мне не к чему прикопаться.

    Для высоких разрешений можно автоматом подгружать @2x @4x спрайты вместо обычных, но как мне кажется, это даже лишнее.
    Ну разве что на больших планшетах они увидят разницу. Насколько знаю, android-планшеты вымерли, их ничтожно маленький процент. Эппловские гейпады вроде существуют, вот только для гейпадов наверно и надо HD-графику.

  88. Жека, всему свое время =) Ты правильно делаешь, что пока не заморачиваешся. Сначала надо сделать просто игру, а потом уже думать как ее улучшать. Я вот вчера весь день эксперементировал с DontDestroy… с виду хорошая штука, но для визуальной части не оправдывает усложнение кода. А после пару часов потерял впустую, не заметил что дочерный класс перезаписывал один из методов родителя… а я ломал голову, почему не срабатывает Awake (аналог construction у нормальных языков) метод у объекта, при том что он создается =) А сегодня чуток успел покодить логику… в Unity код вообще по другому делается. Хотя может это стандарт и шаблоны проектирования самих игр… пока ничего точно сказать не могу.

  89. @Андрей я хз зачем тебе простые мобильные 2d игры городить на Unity

    цикл разработки дольше чем на моб.2d движках
    производительность хуже чем на моб.2d движках
    размер apk больше чем на моб.2d движках

  90. Жека, с чего ты взял первые два пункта?

    Напомню, только два движка заморачиваются полигональной нарезкой текстур. Юнити и кокос.

  91. Жека, разработка быстрая на других движках после года разработки своего движка. Элспер даже при переходе на Unity не хочет наработок отказываться.

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

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

    Вот в производительности — загрузка медленная, но сама скорость интерфейса после высокая. Вот с этим делом я пока не разобрался.

    Довод Элспера пока не могу подтвердить или опровергнуть, не углублялся так. Но нет причин ему не верить, не одну игру написал

  92. Ребят, я извиняюсь что по старой привычке гоню на Unity. Там вообще-то далеко не дураки сидят. И даже напротив, во многом гении, без преувеличения, иначе бы движок так не доминировал в индустрии.

    Давайте на практике проверим? Интересно же, как оно в 2018м.
    Типа как тут:
    https://www.youtube.com/watch?v=Ou_90guwUwo

    Забилдим каждый из нас по два apk:
    1) один apk с множеством spine-анимаций (например как на видео: 10/100/1000/5000/10000 объектов)
    2) второй apk с той же анимацией, только традиционным покадровым spritesheet’ом

    @Elsper, с тебя Unity-билд
    @Андрей, с тебя Phaser-билд
    С меня Lua-билд

    (разрешение экрана, spine объект и spritesheet надо одинаковыми)

  93. Жека, я бы с удовольствием, только меня Unity нервирует 🙂 Постоянно что-то разбираю и эксперементирую. Сегодня хотел создать класс синглетон, который создавал бы объект на экране, если его нет. Суть в том, что в Unity все объекты за тебя сам движок создает. Посему есть случай когда этот синглтон уже добавлен 🙂 Вроде сделал все, а под конец что-то глюкнуло в старом коде и я забил.

    Страннт что в Unity нет банального SetTimeout. Я понимаю, что есть коратин… но для него надо писать свой метод, вот если бы можно было анонимную функцию коратин создать… я свой метод написал, всего пару строк кода и полная аналогия JS… НО как то метода добираться? Достало уже на экране плодить объекты только для того, что бы их использовать как контейнер.

    А вообще, я как то очень боязлево смотрю на спаин. Мне он особо не нравиться, такое количество уникальностей в Unity, как бы Спаин не добавил мне головной боли… вот к примеру анимация — Г это а не анимация в Unity. Она подточена под анимацию персонажей. Я пытался ее использовать для динамической анимации кнопок — не получилось. Сеголня пытался элементы двигать… тоже не гуд, так как при смене анимаций нет возможности задать стартовую точку. Ну типа я хочу что бы элемент анимировался от и до… все хорошо НО если другая анимация его переместила в Ж, то новая анимация сгладит переход и плавно (кто ее просил об этом?) переместит объект в начальную точку, вместо того, что бы за один кадр все сделать.

    Может у меня пока опыта не достаточно… но я забил на анимацию и сделал все тоже самое одной строчкой через твин! И главное на 4!!! сцуко, 4!!! Файла меньше в проекте. При этом моя анимация линамичная, а не статичная… видимо она (анимация) чисто для персонажей.

    п.с. Я верю что спрайт анимация будет в разы быстрей НО мне надо, что бы у атакующих скилетов голова от выстрела летела назад, за пределы экрана 🙂 Как такое спрайтами сделать?

  94. «Суть в том, что в Unity все объекты за тебя сам движок создает. »
    У меня только камера на сцене. Остальное я создаю.
    Хотя тут конечно смотря, что считать созданием.

    some_object = new GameObject(«название»); — это я создаю или движок создает? )
    ___

    «Вроде сделал все, а под конец что-то глюкнуло в старом коде и я забил. »
    Я синглотнами не пользуюсь, но мне кажется из любого класса можно сделать синглтон добавив туда статическую переменную в которой и хранить состояние.

    ___
    «Страннт что в Unity нет банального SetTimeout. Я понимаю, что есть коратин»

    У меня просто отдельный класс таймера, в который скидываются пары функция-задержка. Внутри класса каждый фрейм проходит опрос словаря с парами. Если у кого-то кончилось время задержки — исполняю функцию. Но я это сделал и только в одном месте применил. А так-то особо и не надо оказалось.

    __
    «Достало уже на экране плодить объекты только для того, что бы их использовать как контейнер.»
    Это вообще не понял.

    __
    «Мне он особо не нравиться, такое количество уникальностей в Unity, как бы Спаин не добавил мне головной боли»

    При чем тут анимация юнити и анимация спайна? Я например даже не знаю где в юнити анимация делается. У меня по этому поводу голова не капли не болит.
    А вот некоторые вещи, которые я сделал с помощью спайна, иным путем мне пришлось бы в разы более сложнее делать.
    Если пока нет четкого понимания зачем спайн — то и не юзай. Я тоже не сразу к нему пришел.

    __
    «все хорошо НО если другая анимация его переместила в Ж, то новая анимация сгладит переход и плавно (кто ее просил об этом?) переместит объект в начальную точку, вместо того, что бы за один кадр все сделать.»
    скорее всего существует функция сброса состояния и один из ее параметров это плавность. Просто перед новой анимацией раз тебе нужен резкий переход ставь базовое состояние с отключенной задержкой. Во всяком случае в спайне как-то так.

    __
    «но я забил на анимацию и сделал все тоже самое одной строчкой через твин!»
    Если это можно было сделать одной строчкой через твин, то зачем вообще заморачиваться с анимацией?

    __
    «И главное на 4!!! сцуко, 4!!! Файла меньше в проекте.»
    Это не главное. Это вообще не важно.

    __
    «Я верю что спрайт анимация будет в разы быстрей»
    Что очевидно — так, это что спрайт анимация намного больше памяти жрет. А память у устройства вроде как не бесконечна.

    Само по себе сравнение спрайт-анимации и скелетной — это детский сад. Просто кто-то упорно не хочет отказываться от привычной и понятной мультипликации. Может на компах с гигами памяти можно себе позволить мультипликацию, но тут только в особых случаях.
    А вот сравнить насколько быстро будет работать та или иная анимация в разных движках уже есть смысл, но не для меня. От HTML5 я отказался еще в самом начале, когда выбрал флэш. А что касается defold, то я от теряющего популярность флеша ушел не для того, чтобы прийти к еще менее популярной платформе.

    __
    «НО мне надо, что бы у атакующих скилетов голова от выстрела летела назад, за пределы экрана Как такое спрайтами сделать?»
    Сделать два спрайта. Тела и головы.

  95. @Elsper, сами спайновцы говорили, что процедурная анимация не всегда уместна, иногда spritesheet производительнее.

    Например я щас тестировал spine vs spritesheet (17 кадров)
    Spritesheet памяти жрет больше, но FPS выше.

    При том, что 17 фреймов это оч.много, чаще делают меньше.

  96. Ребят, го проверим производительность на практике! 🙂

    Вот мой готовый APK и исходные картинки Spine/Sprites:
    https://yadi.sk/d/rUZ-6RkyUVhiUw
    Проект в разрешении 1280×720 на черном фоне.
    При клике по экрану открывается диалог, сколько спрайтов сгенерить (texturemem у меня всегда ~2500kb, т.к. spritesheet прогружен, если каждый раз его выгружать, то чисто на Spine texturemem~150kb)

    @Elsper, сгенерь плз на Unity с твоей любимой полигональной нарезкой
    @Андрей, сгенерь плз на Phaser (хотя бы версию со spritesheet, если не хочешь со Spine связываться)

    я уже всё подготовил, вам проект собрать займёт совсем немного, может минут пятнадцать

  97. Элспер, так ты сам создаешь =) А я вот пытаюсь по правилам Unity визуально кодить логику. И мне начинает это не нравится… открыл сцену и не понятно, какой код выполняется в первую очередь. Не перебирать же мне объекты и смотреть что у них там на Start()-е прописано? Думал создать GameManager а он только один может быть… надо почитать что там вначале надо добавить, что бы можно было иметь два класса с одинаковыми именами.

    Я как бы пытался создать себе уникальный класс синглтон, который позволил бы мне быстро добраться до объекта через статчный instance но при отсутствии объекта — создавал бы. И еще имел бы возможность DontDestroy =) что бы не создавать объект при каждой смене сцены. Вот все три не получилось сделать… точней получилось, но видимо какой-то частный случай не учел. А так класс который позволяет быстро найти объект, с добавлением его при желании в DontDestroy сделал и работает.

    На счет SetTimeout — вчера нарыл одну интересную реализацию коратинов через статичный класс (про статичный класс как то сам не подумал), с запуском анонимной функции (оказывается это тоже лямбда, вчера перед сном почитал) с задержкой. А вообще зачем мне это надо? Да очень просто… вот есть у меня таймер, он должен раз в секунду красиво анимировать мне прогресс. Для этого нужно SetInterval или простой таймер с выполнение определенных действий каждый Н секунд. Вот нафига мне мусорить код методом IEnumerator? Или надо что бы через две секунды что-то показать пользователю… снова создавать метод с типом IEnumerator? Применений целый вагон и … возможно у меня в голове наработки разных решений уже через таймера… а в будущем будет через коратин и надо просто подождать =)

    А связь между спайном и анимацией прямая =) Мне про анимацию тоже все говорили и все книги заливали какая она крута и как облегчает код. Можно сделать окошко которое вьезжает на экран и выезжает одними анимациями и без единой строчки кода. Так вот с окошками работаем а с моими объектами нет — частный случай. Возможно и есть где-то возможность отключить переход… я даже знаю где он находится, но вот только дока учит как сделать этот переход короче или быстрей, но не говорит как вообще отключить… да и время жалко. Нафига? Когда можно твином чище все сделать? =)

    Про количество файлов ты зря так Элспер… ты как своих хомяков закончишь. Потом месяц не делай их и после попробуй понять что и где у тебя запускается. Правда у тебя свой редактор и он за тебя все помнит. А вот если делать все чисто в Unity МУСОРКА… я пока придумал только файлы каждой сцены в свою папку, а эти папки конечно же в scenes папку. Но возинкают сложнсоти с файлами, которые используют сразу две сцены… пока такую проблему решаю папой misc

    «Сделать два спрайта. Тела и головы.» а когда будут руки то и руки? и чем это от спайна отличается? =) я рассчитываю что спайн даст мне свободу… хотя если это будет слишком усложнять код то временно откажусь (пока не набиру опыта в юнити)

  98. @Андрей, почему ты решил что Spine усложняет код? Наоборот же проще.

    Например в моём сегодняшнем тестовом проекте я для спайн-объекта написал лишь две строчки:

    rooster=SpineSprite.new(«data/rooster.json»,»data/rooster.atlas»)
    rooster:setAnimation(0,»rooster_run_anim»,nil,true)

    p.s. хватит там вайнить, генерьте тестовые apk епта, спрайты и json я скинул))
    p. p. s. @Андрей, мне кажется в Unity каким-то образом хорошо продумали, как управлять кодом в больших проектах, может ты просто не успел въехать (мне тоже любопытно как огромными проектами управляют)

  99. А может все же игры делать?
    У меня окружение не заточенно под такие маленькие задачи, мне это нифига не 15 минут.

  100. Ок решил без окружения делать. Только свой код спайна взял.

    И что я вижу.
    rooster

    У тебя петух двухсторонний. А значит у тебя для его отображения используются более трудоемкие шейдеры, которые показывают текстуру с двух сторон. А значит это уже ПЛОХОЕ 2D.
    У меня шейдеры работают только с одной стороны.

    Про то, что правильные шейдеры намного быстрей я писал еще тут
    http://elsper.ru/2017/12/unity-testyi-skorosti-raznyih-sposobov-vyivoda-grafiki/

  101. ой давай не будем внезапно включать исключительно занятых бизнесменов

    забилди спайн-объект как есть, и альтернативный spritesheet запакуй полигональной нарезкой, посмотрим, какие чудеса производительности она выдаст

    p.s. К слову о скорости разработки, это лишь 54 строчки заняло
    https://pastebin.com/1G6q1Tja
    (если задрочиться, можно еще на 20 строк сократить)
    Интересно, насколько код компактней на C#.

  102. Есть у меня подозрения, что полигональная нарезка на практике годится лишь для того, чтобы в жопу её засунуть.

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

    Но могу быть неправ, это лишь теория.

  103. А я и не включаю. Просто если уж и тратить свой рабочий час, то на реальный проект.
    Но как ты можешь заметить я все же попробовал. И столкнулся с неправильным построением модели. В реальном проекте я бы полез разбираться что да как. Возможно написал бы код, подготавливающий модель, чтобы таких вещей не происходило, но пока я не столкнусь с этим в СВОИХ моделях — у меня не возникнет мотивации.

    «как есть» он будет отображаться неправильно.
    Можно использовать другие шейдеры, но использовать заведомо более медленный код, чтобы таким образом решить проблему неправильной модели — бессмысленно.

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

  104. В спайне она и не используется.
    Нет традиционно узким местом считается все же графика. Но наверное от проекта в большей степени зависит.

  105. @Жека чисто предположения. Пока мне все что не советовали, ничего не подходило. Я 2/3 книги UI рецептов по Unity прочитал как раз на днях. Читаешь: вот же шикарное решение! На практике: тут анимации нет, а тут элемент не перемещаеться как надо, а тут вовсе позиционирования по центру не предусмотрели.

    Я не люблю ограничивать свою фантазию возможностями конкретногорешения. Дучше уж самому что-то свое прилумать, дописав пару строк кода, чем делать круто, но с ограниченным эфыектом (я верю в погремушки, еще с момента как впервые познакомился с iPad).

    Спайн я воспринимаю как отдельную, самостоятельную технологию, на которую нужно пол года как минимум. Вон Элспер нарыл как там ускорять анимацию… а ты говорил про «естественное» движение. Всему этому надо учиться и набивать руку (как в интерфейсах нужно знать какие твины как чередовать, что бы получить нужный эффект).

    Я вот пока не нашел книги, которая уделяла бы достойное внимание организации файлов проекта, разбиению кода между объектами. Вот вчера два раза по несколько часов было потеряно, пока я наконец не нашел оптимальный способ передачи данных между элементами сцены. По началу все было слишком перелинковано: один объект инструктировал три других при определенном событии, получалась дисинхнлрищация действий (они должны были быть прследовательны, а использовать delay, что бы подогнать все, я посчитал рискованным), после удалил все и решил инструктировать один центральный… и тут тоже все пошло не так, код стал более трудно читать (как в Phaser), наконец я просто продублировал (что мне казалось не правильным) сигналы в каждом объекте цепочки действий и организовал передачу управления логики между ними. В результате код чистый (логика каждой секции скрыта в контролере конкретной секции), действия последовательны и без таймеров. Через час подтвердилось, что я все правильно сделал, когда я понял что логику действий надо поменять и я за 20 минут все исправил, внеся изменения только в одну секцию.

    Вот анимацию спрайтами могу сделать для теста, хотя все равно это на час, перелогиниться в старую ОС (я же ща на новой с SSD), создать кордова проект и после мелкий Phaser скрипт. А качать и разбирать спайн сейчас опасно — потом буду весь день разбирать как сделать, что бы оно работало 🙂 Особенность HTML5 и кордовы в том, что там НИХРЕНА не работает сразу 😉

    @Элспер, я думаю Жека тут шифруеться 🙂 Наверно уже что то скодил и либо стесняеться показать (считая что оно не достойна внимания, что ошибочно), либо работает в команде девелопером и не может показать проект, над которым работает.

    @Жека, в реале, ты чего на реальный код не переходишь и не показываешь результат? =)

  106. спасибо, вы меня убедили, надо работать над реальными проектами, а не измерять сферических коней в вакууме
    :beer:

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

    А я не уверен, сильный издатель стал бы связываться с мной, если даже еще не было серьезных проектов в релизе.

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

    P.S. Я не ради спора затевал бенчмарк анимаций, просто как разработчику интересно, как с этим дела обстоят сейчас в индустрии.

    Меня в Unity напрягают только две вещи:
    — Все Unity-игры, которые мне попадаются — все так или иначе с лагами
    — Их анальное навязывание ООП (я не являюсь мегапрофи, но даже мне уже сейчас видно, что во многих ситуациях ООП неуместен, а иногда вообще полное УГ.

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

  107. Жека у каждого свой подход к изучению нового материала. Я к примеру предпочитаю прочитать целую книгу по новой технологии, после повторить все что в книге написано самому (часто то что кажется простым, на практике сложно сделать), а потом делать что-то свое. Но другие предпочитаю прямо начинать с проекта, смотреть видео инструкции и делать свою первую игру. А как только сталкиваются с проблемой, переписывают весь код =) Есть и другие методы… тут главное что-то делать, как раньше любили говорить «труд облагораживает человека» 😀

    Я бы на твоем месте сделал бы простую игру типа три в ряд или что-то с АИ шашки, домино. Только с нуля и до конца, что бы на мобиле работало и на сторе было опубликовано. И не для того, что бы заработать, а что бы доказать себе, что ты можешь создавать игры и это не сложно. А вот на счет кликера — это НЕ простой жанр, а я бы даже сказал сложный! Намного легче написать любой пазл, чем правильный кликер =)

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

    На счет ООП — хоть я и против разбиения кода на файлы, я уже несколько раз убедился, что даже когда тебе кажется что это излишне, лучше разбить =) Чуть позже оно тебе обязательно пригодится, когда придется немного изменить логику и связь между объектами. Правда надо признать, думать как Unity ОЧЕНЬ сложно(это если все правильно делать)… но с практикой думаю привыкнешь.

    Твое заключение абсолютно верное! Даже если не брать во внимание мое прошлое, за год я сменил Phaser на Unity. Но работа с Phaser не прошла даром… он меня показал как работает логика в играх.

  108. @Андрей, «match3» — это самый сложный жанр мобильной индустрии, наравне со слотами 🙂

  109. @Elsper, дружище, слушай, можно тебя попросить? (честно, позарез необходимо)
    Я тестирую тот же проект с тем же спайновским объектом (rooster) на другой вспомогательной библиотеке, производительность ПЗДЦ низкая (60fps лишь когда спавню на экран лишь пять rooster’ов, а если больше спавнить — то с каждым следующим объектом проседает). Не могу понять, либо в моём сетапе какой-то косяк, либо так оно и ожидаемо в среднем.

    (не ради споров, а для практического понимания, какой FPS адекватно ожидать)

    (*Андрей, можешь если что тоже попробовать? Ты же всё равно Unity осваиваешь, тебе по-любому надо будет знать, как работать со спайновскими объектами.)

  110. Жека, сложный в плане пеализации или монетизации? Я все же думаю монетизации… именно из за простоты реализации 🙂 Я только предложил, решать тебе.

    Я вот вчера ломал голову, пытаясь найти метод сериализации Dictionary любой сложности. В JS очень легко и я даже мог бы свой класс для этого написать, но все же решил ограничиться List-ами и заранее описанными типами с спец ключом. В принципе списки можно использовать как словари, но поиск нужного элемента через лямбду (Элспер, разобрал их наконец, крутая шиука!!!) удлиняет саму строчку, что не совсем супер, но терпимо.

    Я чего ща пришел пост писать то? Сегодня случайно попал на вот это https://youtu.be/eXIuizGzY2A Может это и есть причина почему спайн умирает? Я как обычно пока не трогаю скелетную анимацию, хватает и так материала на осваивание 🙂 Но хотелось бы услышать мнение Элспера, почему он выбрал спайн, когда было решение из коробки от Unity?

  111. аниматоры хейтят встроенный редактор анимации, все работают только на Spine
    Развитие Spine заторможенное, т.к. в индустрии специалистов работает мало, массовых продаж нет. Им надо было не одиночнкую цену делать, а подписки как Adobe. Плюс Dragonbones им всю малину обосрали.

    как я понял из последних тестов, Спайн-это роскошь больше для десктопов, чем для мобилок
    Спайн-объекты в проекте становится ботлнеком очень быстро.

    @Андрей, имхо никому невозможно избежать работы со Спайном, это неоспоримый стандарт индустрии.
    Ты сам плз в Unity глянь, заспавни на сцену 50-100 объектов из того моего архива, посмотри что будет.

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

  112. Элспер, а настройки пользователя ты где хранишь? Я вот думаю про PlayerPref, но уверен за деньги будет более продвинутая среда, со своим визуальным редактором. Или ты не заморачивался и просто в PlayerPref хранишь?

    Жека, да у меня все свободное время уходит на поиск решений тривиальных задач. Если допустить ошибку и негладеть, в будущем будут проблемы, а переписывать старый код особо не хочу. На счет необходимости использовать анимацию — согласен, без нее даже интерфейсы сейчас мертвые. Людаям нравяться живые кнопки и тем более экшен на экране 🙂

    Для примера, я вот думал про такую простую анимацию как удаление сердечка. Хотел оформить в виде пасколотого сердца, которое постепенно исчезает. В чем это делать? В спаине, в анимации Unity или спец программа для 3D анимации? А главное я еще как то умею дизаинить в 2D, а в 3D даже сложно представить сам эффект 🙂

  113. @Андрей, у меня на освоение DragonBones с нуля ушло 3-4 дня, это была одна из моих лучших инвестиций времени.

  114. Dragonbones умеет всё то же, что и дорогая версия Spine. Инструмент великолепный.

  115. Жека, мне бы решить реальные задачи, а скилетнуюанимацию я успею разобрать. Не сработает, так спраитную буду использовать или количество мобов понижу а сложность и живучесть каждого повышу 🙂

    Элспер на счет PlayerPref можешь уже не отвечать. Купил пару плагинов, выбрал лучший и чуток доработал.

  116. @Андрей, тогда забилди плз проект со спрайтовой анимацией, проверим какая у юнити прилок производительность спрайтов.
    (ссылка та же самая, там спрайты есть: https://yadi.sk/d/rUZ-6RkyUVhiUw )

  117. Жека, это можно. Как только проснусь сегодня (еще не спал), сразу попробую. Надо просто сделать анимацию из кадров, верно? Размер сцены или просто размер текстур оставить как есть? Сколько копий анимаций на сцене?

  118. нуу, ребят

    это же элементарнейшее: заспавнить N спрайтов/спайн-объектов на сцену, и посмотреть, сколько их движок держит, не роняя FPS

    что может быть элементарней?
    print «hello world» ?

    P. S. @Elsper, не обижайся, но мне кажется ты сцыкуешь сравнить реальную производительность юнити, т.к. твои фетиши про «полигональную нарезку» и «быстрее только cocos» вероятней всего окажутся ложными.

  119. Да слился, слился я.
    Когда мне нужны были тесты я уделил им достаточно времени.
    А сейчас тратить несколько часов не понятно на что, что мне ничего не даст и ни на что не повлияет. У меня тупо нет мотива.

  120. Жека я не забыл про тест, просто офлаин на несколько дней выбил. Но вроде уже со всем разобрался и возвращаюсь в кодинг =)

    Элспер, мы все с нетерпением ждем твой отчет за этот месяц. Особое внимание удели хомякам. Можно пару скриншотов добавить. Так интересней читать будет =)

  121. для чего может понадобиться «несколько часов»?

    1) создать проект 1280×720
    2) запаковать spritesheet Texturepacker’ом, поставив галочку на полигональную нарезку — заспавнить на сцене
    3) заспавнить на сцене spine-объекты
    4) добавить текстовое поле с FPS и окошко диалога, сколько объектов заспавнить

    это максимум минут 20-30

  122. офлаин на несколько дней выбил

    @Андрей на Soi Cowboy тусил наверно? Признавайся))

  123. Жека, ну ты и приставучий. Это упорство, да в правильное бы русло.

    Мне надо получается.
    1 Создать проект.
    2 Разобраться как его подогнать под твое 1280х720 потому, что в юнити нет размеров.
    3 «запаковать spritesheet Texturepacker’ом, поставив галочку на полигональную нарезку» — это да легко.
    4 Разобраться как работать с покадровой мультипликацией.
    5 Выбрать через что все это делать через визуальную среду или через код. Если через среду, то разобраться как в юнити работать с визуальной средой. Если через код то написать класс для мультипликации и разобраться куда его вставлять.
    6 Та же фигня со спайном, если через визуальный редактор, то разбираться с этим.
    7 Разобраться с кривой моделью, или использовать медленные шейдеры, что делает тест бессмысленным. И даже если и использовать медленные, то понять какие именно, потому, что я их не использую.
    8 Подумать как сделать вывод фпс.
    9 Таки сделать окошко диалога с функциональным полем ввода (чего я еще не делал).
    10 Написать управление всеми этими объектами. В частности освобождение памяти и удаление (чего я тоже еще не делал)
    11 Забилдить
    12 Залить

    Тебе надо
    0) скачать юнити
    и дальше
    1) создать проект 1280×720
    2) запаковать spritesheet Texturepacker’ом, поставив галочку на полигональную нарезку — заспавнить на сцене
    3) заспавнить на сцене spine-объекты
    4) добавить текстовое поле с FPS и окошко диалога, сколько объектов заспавнить

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

  124. Ребят я тут немного поофтоплю 🙂 Элспер, что быстрей будет работать: шейдер или маска? У меня есть Image, в который подгружен Sprite (частями прозрачный). Мне надо весь спрайт сделать одного цвета. Это можно типа сделать через щейдер, который обновит цвет каждого пикселя (говрят можно использовать шейдер от текста), а можно наложить добавить обекту маску и задать контур этим де спрайтом (как бы вырежать из однойветного прямоугольника нужный мне силуэт). Мне кажеться что шейдер должен быть быстрей, так как маска по сути делает все тоже самое… но тут работа с одним спрайтом. Что думаешь?

  125. п.с. Жека дай ссылку на спрута 🙂 Я тут сегодня чуток наверстал пропущенное. Очень сложно кодить пару дней а потом пауза… код просто не идет и такое депресивное настроение, думаешь нахрена мне все это надо? Сложно… может забить на все =)

    А на счет офлаина — да нет, в Банкоке интерестного в этом плане мало (хотя есть места, но вот улицу которую ты упомянул я бы за пару километров обходил), для этого надо за пределы столицы… если надумаешь, то могу поделиться ценными советами =) Тай это очень опасно, в хорошем смысле этого слова — разок приедешь, правильно отдохнешь и не захочешь уезжать… Главное обходить туристические места и тайцев, котрые работают с инострацами =)

  126. Андрей, думаю шейдер, по простой логике, что маска 99% все равно работает через шейдер.

  127. spryt.ru — вечноправый человек, неспособный признавать свои ошибки.

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

  128. Жека вот тебе ссылка на тестовое приложение. Расширение как ты просил… при клике создается объект петуха. В анимации ты не говорил сколько должно быть кадров, посему я сделал 30, а то с 60 он очень быстро бегал =)

    https://www.dropbox.com/sh/i07w9i1om1sb235/AADO8Yhf2a7TxXrrFwy5US4Za

    Залил как apk так и сам исходник. Можешь качнуть себе Unity, создать проект и потом подменить Assets папку из архива. Но мне пока не понятно, какого хрена пустой проект получился 22мб. У меня мой новый проект 15мб весит из которых 30% это сами ресурсы, а тут ресурсы всего 200кб. Но я уже не стал заморачиваться… и еще я не делал полигональную нарезку, так как TexturePacker в другой ОС, которая на старом HDD и тормозит =) Так что данный пример можно еще ускорить. У меня на старом мобильнике 80 объектов работают без проблем до 50 кадров. Самое главное сколько из объектов перекрывают друг друга… так что чистый результат сложно получить.

  129. Элспер, согласен с тобой! Жеку бы с его энергией да на разработку игры =) Ему кажется, что имея хорошую среду разработки (Unity) остается только сидеть и ничего не делать =)

    А я вот к примеру вчера очередной раз попал на особенность Unity, которая генерирует ошибку. Объекты создаются в хрен знает какой последовательности… по этому один объект может вызвать метод другого, пока у того еще не сработал Awake метод (в котором происходит его инициализация). Вот думаю добавлять для своих объектов приватное свойство, которое будет говорить, был ли Awake метод или нет… а если он еще не вызывался, то вызывать вручную перед выполнение критичного кода. Вот только бред выходит… не ставить же мне проверку в каждый из методов?

    А Unity предлагает всего два уровня Awake и Start, одно за другим. Но это для логики подходит… а если один вспомогательный компонент инструктирует другой вспомогательный? Ведь они оба должны быть на уровне Awake… а вот сама логика на Start, тогда выходит они могут вызваться в разной последовательности… первый целиком прошел инициализацию Awake-ом, а у второго пока она еще не выполнялась 🙁

  130. Добрых всем успехов, комменты тут — добротный контент, читаю каждый день!

    Но помните, что в Unity таится страшная ловушка — попробовав такой движок, вы можете захотеть пойти дальше и сделать 3D-игру )))

  131. Привет Закс, куда пропал? На счет 3Д можешь не переживать, оно нам и не снилось 😀 Я вот потратил несколько часов, что бы написать простенький шейдер по смене цвета спрайта!!! Делал по книге, а оказалось что в Unity 2018 уже новый стандарт… а по новым шейдерам документации нет. Куча разных не понятных констант и все больше похоже на Вуду =) Даже когда все закончил, оказалось там еще надо принимать во внимание маску, мол пиксель внутри нее или нет… мало того, что функцию надо было найти, так еще ее в 2018 уже нет и пришлось ее реализовывать самому. И как на фоне всего этого о 3Д даже просто думать?

  132. я отдыхал после проекта на компанию, сначала казалось — заслуженно, потом увлекся, и просто просирал время ))

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

  133. Элспер, ты каким плагином для мягкой маски пользуешься? Поражает, что такого элементарного в Unity нет из коробки. Только если они так помогают кодерам чуток заработать на плагинах…

  134. Я вот только сегодня заметил, что если накладывать ту, что идет в пакете с Unity, она обгрызает края =) Не учитывает альфу. А вот тут вроде русский разработчик толкает за 30 баксов такую https://assetstore.unity.com/packages/tools/gui/soft-mask-80667 У него как раз в примерах показана разница, между мягкой и нативной. Но я помню ты как раз про маски говорил, вот и подумал, может ты как раз про это в свое время говорил.

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

    Так, что в итоге пришлось расширить свои знания по шейдерам. Узнать что такое stencil буфер. Узнать как он работает (потому, что он и отвечает за маску), ну и переписать плагин.
    Поэтому лучше попробуй сделать мягкую маску сам через шейдеры. С большой вероятностью тебе все равно придется с этим столкнуться.

    У меня первая же ссылка по запросу «шейдеры альфа маска» вывела на сайт, который ссылается на https://bitbucket.org/UnityUIExtensions/unity-ui-extensions
    И там в открытом доступе код, в том числе шейдер.
    Можно взять готовое, а можно поразбираться в коде.

    Сам я не смотрел, что там (говорю же за минуту нагуглил), но попробовать стоит.

    Сам шейдер
    https://bitbucket.org/UnityUIExtensions/unity-ui-extensions/src/693a49997b9560f08444bb748a7f360629cf528c/Resources/Shaders/SoftMaskShader.shader?at=master&fileviewer=file-view-default

    Блок Properties — это параметры которые мы передаем в шейдер. (через код или через юнити редактор)
    Блок Stencil — это маска.
    А вот с альфой сам разбирайся как ее сделали. ))

    Как я понял. Маска и альфа это раздельные по смыслу куски алгоритма. Сначала маска. Потом внутри маски объекту передается альфа маски.
    float a = tex2D(_AlphaMask, IN.maskTexcoord).a;
    ….
    color.a *= a;

  136. Спасибо Элспер, спас ты мои кровные 30 баксов =) Как я не сообразил, что можно шейдерами наложить маску! Надо будет углубить свои познания в них. У меня тут сразу два вопроса возникло:

    1) Можно ли применить к одному спрайту сразу два шейдера? До сих пор я шейдер применял через материал, который потом указывал спрайту. Но у спрайта один материал, а у материала один шейдер =)

    2) Вот вложенные маски это в реале головная боль Элспер. Как раз вчера у меня был случай, когда применил свой шейдер на спрайт который находился в объекте с маской. Конечно же мой шейдер ее игнорировал. После пошаманил, нарыл переменную _ClipRect, через которую проверял, видим ли пиксель или нет и вроде сработало НО теперь вопрос, где прочитать про все эти переменные?

    3) Если сделать все через шейдер, можно ли в виде маски использовать спрайт 9 slice?

  137. п.с. пока пошел почитаю статью по ссылке, начинаю понимать всю силу шейдеров и всю сложность их написания =)

  138. На все три вопроса не знаю ответа.
    Разве что хочу заметить, что не понял, что ты нашаманил, потому, что _ClipRect — это просто имя переменной.
    За маску отвечает этот блок

    Stencil
    {
    Ref[_Stencil]
    Comp[_StencilComp]
    Pass[_StencilOp]
    ReadMask[_StencilReadMask]
    WriteMask[_StencilWriteMask]
    }

    ReadMask и WriteMask, это побитовая маска для параметра Ref, если что.

    (Ладно мне надо идти, может потом про маску подробней отвечу)

  139. Элспер, прикол как раз в том, что я просто регистрирую эту переменную, а ее за меня сам Unity заполняет. Как и вот эту переменную:

    sampler2D _MainTex;
    float4 _ClipRect;

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

    c.a *= UnityGet2DClipping(i.worldPosition.xy, _ClipRect);

    У меня перестал шейдер отрисовывать за пределами маски. Как все это работает я не понимаю точно, только догадываюсь.

    Кстати вот неожиданность. Макс размер шрифта в Unity 300 =) а мне нужно 500. А ты каким компонентом текст выводишь на экран Элспер?

  140. Надо тоже с _ClipRect поэкспериментировать… Мне же нужны прямоугольные маски. А стенсил дает маску любой формы. И хотя я его уже реализовал, возможно он тупо избыточен.
    Текст через TextMesh

    Что касается автозаполнения, думаю ты упускаешь. Скорее всего эти переменные есть в верхнем блоке Properties. Соответсвенно они становятся доступны для редактирования, и какой-то код где-то их задает.
    Ну или эти переменные идут по умолчанию со своими значениями.

  141. На счет _ClipRect больше похоже на второе. А вот касательно сложных масок, это пока сложно для меня. Но рано или поздно придется разобраться.

    На счет TextMeshPro или все же TextMesh, просто в 2018 он как бы уже встроен в приложение. Я пока его не смотрел, но меня смутило то, что у него свой шрифт и я не вижу напрямую возможность подгрузить ttf (особенно это касается букв из французского, турецкого и других языках). Ты используешь базовый шрифт или все же разобрал как создавать свой?

  142. Напомню у меня все через код. Я делаю так.

    _font = (Font)Resources.Load(«Fonts/»+fontName);
    _mesh_text_component.font = _font;

  143. Шикарно… а шрифт у тебя простой ttf верно Элспер? Значит надо будет визуально найти где там свойство для задачи шрифта. Это очень радует… а то я как то не подружился с битмап шрифтами. Много раз их пробовал… но возможно я их как то не правильно использую

  144. Элспер, я немного запутался. Шейдер можно легко добавить к спрайту, через материал. Но что если мне надо применить шейдер маску к объекту, в котором другие объекты (спрайты). Недостаток компонентов Unity это отсутсвие исходников, которые можно использовать как шпаркалку 🙂

  145. Ну у меня у всех вложенных в маску объектов специальный шейдер специально для маскируемых объектов написан.
    Правда «специального» там не много. Я просто сделал копию шейдера и прикрутил стенсил к нему. В итоге если объект маскируется, то один шейдер, если нет — другой.

  146. Я вчера смотрел как мягкую маску реализовал TextMashPro. Они просто применяют шейдер сглаживания краев элементам, которые пересекаются с внешней прямоугольной маской. Вот я и подумал, что может просто определять прозрачность пикселя его расстоянием от края маски? Чем блие, тем прозрачней. А используя метод с стенсилрм, все работает по другой логике?

  147. Стенсил, как я понимаю все же просто для маски.
    «Мягкая маска» это 1) маска + 2) альфа. Два разных смысловых блока. Просто по получаемому эффекту объединенные в словосочетание «мягкая маска».

    Но это все догадки. Я не задавался вопросом делать мягкую маску.

  148. @Андрей, спс!
    Можешь плз тестовый apk сделать на черном фоне, чтобы разрешение проекта (1280×720) и масштаб спрайтов были одинаковыми?
    (у меня в анимации 34 фрейма, по два фрейма на каждую картинку)

    А то невозможно сделать какие-то выводы, слишком по-разному в смартфоне отображается:
    https://imgurhd.ru/i/3ya2_orig.png
    https://imgurhd.ru/i/3ya3_orig.png

    У меня установлен TPacker, я экспортировал unity-spritesheet с великой и могучей полигональной нарезкой:
    https://www.dropbox.com/s/8skbgccail4zuoi/rooster_unity_polygonal.zip?dl=0
    настройки выставил как у них в статье:
    https://imgurhd.ru/i/3ya4_orig.png
    https://www.codeandweb.com/texturepacker/tutorials/cocos2d-x-performance-optimization

    P. S. @Elsper, го «Итоги ноября 2018» ёпт, а то в этот раз что-то затянул как Спрутэлло.

  149. «А то невозможно сделать какие-то выводы, слишком по-разному в смартфоне отображается:»
    Уже не 20-30 минут правда? ))

  150. Так же вижу, Андрей не использовал атлас.
    А еще, как я вижу, Андрей использует канву. А это медленнее раза в два чем обычный sprite.

  151. @Жека попробую обновить, главное найти время или выполнить сложный кусок кода, что бы была мотивация. Расширение я как раз выставил как ты и сказал. Но у меня растяжка сцены до целого экрана, что бы не было полосок. А размер анимации я оставил оригинальным, а ты случае не увеличивал размер у себя?

    @Элспер, так ведь перед нами не стояла задача получить макс продуктивность =) Конечно спрайты будут быстрей и даже не знаю почему автоматом сделал через Image, возможно очень много работаю с интерфейсом.

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

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

  152. Персонаж с именем это и есть два раздельных блока. Персонаж и строчка.
    У меня именно так. Текст отдельным элементом. И вместе с картинкой засунут в один родительский объект, чтобы двигать и менять видимость было удобней.

    >а вот текст надо однозначно на канву
    Почему?
    Вот я как раз и использую textmesh, потому, что без канвы работаю.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Спoнcopcкиe ссылки