Ответы пользователя по тегу Разработка игр
  • Что быстрее рендерится-спрайты или модели?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Какая целевая платформа? Абстрактно в вакууме один квад это, конечно, меньше чем сотня треугольников, но квад будет рисоваться с прозрачностью, и, может быть, у вас специфика такая, что вам овердроу от прозрачности страшнее чем дополнительные треугольники. А вообще говоря, на такие вопросы ответить только профайлер, сделайте тестовую сцену и посмотрите, гадать в таких вещах вредно. В контексте мобильников три тыщи полигонов это достаточно мало, при грамотном батчинге и не сильно жирных шейдерах оно быстро отрисуется. Может быть по результатам теста окажется, что вам и не нужно со спрайтами извращаться.
    Ответ написан
    3 комментария
  • Можно ли так использовать интерфейсы в unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Нормальный подход, так много где делают, просто мало кода видели, вот и кажется странным. Более того, его используют не только для атакующих, но и атакуемых, например, делают интерефейс IDamageable и при нанесении урона работают с ним, а логика нанесения повреждений скрывается в конкретном классе.
    P. S. Attack пишется с двумя t.
    Ответ написан
    4 комментария
  • Что выбрать для создания логического квеста?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Такие решения нужно принимать исходя из доступных ресурсов. Умеете хорошо рисовать - выбирайте 2D, умеете хорошо моделить - выбирайте 3D. Двадэшные спрайты сильно быстрее и дешевле в производстве, чем модели, но анимировать их может быть сложнее, тут зависит от технологии: скелетная анимация или спрайтовая. Кроме анимации технология влияет на скорость итерации, если, например, захотите поменять одежду персонажу, то со спрайтовой анимацией придется перерисовывать все атласы, со скелетной такого может и не быть, но всё зависит от используемых инструментов. С трёхмерными моделями в плане анимаций проще, при желании вообще можно найти готовые, но тридешность тянет за собой кучу других проблем: большая нагрузка на видеокарту, стилистические ограничения, возня с освещением и т. п. Если говорить про квесты, то часто идут на компромисс: героев моделят, а задники рисуют плоскими. Ещё иногда фоны моделят, но потом рендерят в текстуру и дорисовывают в фотошопе.

    Кроме того, многое зависит от ваших стилистических предпочтений, какой-то картинки проще добиться с помощью моделей, а какую-то проще нарисовать руками. При желании, конечно, можно шейдерами и постэффектами всё изменить до неузнаваемости, но не факт, что вы захотите усложнять пайплайн рендера. Для абстрактного квеста в вакууме, я бы советовал двигать в сторону двадэшной скелетной анимации, так вы быстрее всего сможете сделать прототип, а для того, чтобы разнообразить и оживить картинку, есть много трюков, посмотрите доклад от разрабов Broken Age.
    Ответ написан
    1 комментарий
  • Как сохранить кастомный массив в Unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    В первую очередь вам нужно пометить класс атрибутом System.Serializable, после этого юнити будет знать, что этот класс можно сериализовать и будет показывать поля с этим типом в инспекторе. Правда нужно понимать, что юнити умеет сериализовывать далеко не все типы, поэтому DateTime вам придётся переводить в строковое представление. Чтобы вписаться в общий процесс сериализации, вам нужно реализовать интерфейс ISerializationCallbackReceiver и написать методы, в которых вы будете переводить DateTime в строку и обратно. После этого можете использовать JsonUtility, для сериализации в json и записи в файл или куда-то ещё.
    Ответ написан
    1 комментарий
  • Как моделировать дорожный трафик?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Открываете Google Scholar и читаете первые пять-десять страниц. После прочтения легко может оказаться, что вам не то что физика не нужна, но и вообще транспортные сети можно без автомобилей тестировать.
    Ответ написан
    Комментировать
  • Как попасть в game-dev и с чего начать карьеру в этой области если ты веб-разработчик?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Ответы не ищи @ Вопросы пиши
    Куда податься вчерашнему студенту-недопрограммисту, желающему попасть в геймдев?
    Хочу попасть в игровую индустрию. В какую магистратуру поступать?
    Как попасть в game dev?
    Что нужно, чтобы стать разработчиком игр?
    С чего начать путь в Game Dev?

    Самый простой способ продемонстрировать свои способности работодателю - сделать игру. Выбираете любую классическую ретро-игру попроще (змейка, тетрис, арканоид), садитесь и делаете. Когда закончите с геймплеем, сделайте главное меню, выход по кнопке Esc, туториал или хотя бы инструкции - короче говоря, все те мелочи, которые делают игру игрой, а не прототипом. Потом берёте и выкладываете исходники на GitHub, а сборку на GitHub Pages или itch.io. Если игра мобильная, то можете разориться на лицензию разработчика и подзасрать магазин своей поделкой, тут уж как сами хотите.

    Когда всё это сделаете, можете подавать резюме, этого должно быть достаточно на позицию джуна. Будет плюсом, разумеется, если вы сделаете не одну игру, а несколько, желательно разных жанров. Они не обязательно все должны быть магазинного качества, тут уже скорее важно показать, что вы умеете делать игры в общем, а не только тетрисы. Для проверки своих навыков очень рекомендую поучаствовать в геймджемах (Ludum Dare, itch.io), они хорошо учат собранности и вырезанию лишних фичей.

    Из обучающих ресурсов могу посоветовать туториалы на Catlike Coding, там рассматривается довольно много продвинутых вещей. Про официальные туториалы тоже советую не забывать, в последнее время их качество стало сильно выше.
    Ответ написан
    2 комментария
  • Как можно перевести персонажа игры вместе с реальной одеждой в формат 3д?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Берёте художника, сажаете в хорошо проветриваемую комнату и отправляете моделить на несколько недель. Сканирование подойдёт только для текстур, сетки моделей после сканирования получаются грязные, анимировать их будет тяжело. Если персонаж будет просто стоять на месте, то, например, анимацию дыхания можно зафейковать шейдером, в таком случае, возможно, имеет смысл попробовать сканировать шмотки. Но, опять-таки, где вы это будете делать? В СНГ таких контор штуки две, а за границу шмотки отправлять будет накладно. Делать свой стенд для сканирования вылетит в копеечку и много месяцев экспериментов и разработки. Многое ещё зависит от доступной вам информации, например, если у вас есть выкройки одежды, то, теоретически можно их экспортировать в Marvelous Designer. Может быть даже что-то автоматизировать. Но скорее всего выкроек у вас нет, шмотки только одного размера или только на фотографиях, денег нет, а времени в обрез. В таком случае самый жизнеспособный вариант это посадить несколько художников моделить одежду по рефам, при желании процесс достаточно хорошо масштабируется.

    Менять одежду под персонажей можно с помощью бленд шейпов, в разных редакторах оно по разному называется, но суть в том, что вы задаёте граничные положения сетки модели, а в движке потом параметризуете модель и получаете нужную форму. Опять-таки, это проще делать на моделях, сделанных вручную, а не отсканированных. Ещё как вариант, можно в шейдере двигать вершины по маске и делать модель худее-толще программно, но тогда будет сложнее управлять внешним видом модели и чинить самопересечения и прочие артефакты.
    Ответ написан
    Комментировать
  • Шейдеры, реагирующие на объекты. Как такое создаётся?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Как ни странно, про шейдеры очень хорошо написано в мануале. Там есть отличные примеры вершинно-пиксельных и поверхностных шейдеров. Помимо мануала еще есть серия туториалов на Wikibooks, где подробно всё разбирается с основ. Начинать лучше с вершинно-пиксельных шейдеров, в конечном итоге всё сводится к ним, поверхностные шейдеры это просто синтаксический сахар, да и те же постэффекты делаются только на пиксельных шейдерах. Кроме того, я бы настоятельно рекомендовал поставить Visual Studio вместе с Visual Studio Tools for Unity, иначе не получите худо-бедной подсветки синтаксиса, шейдеры и так сложно дебажить, так хоть будет полегче. В качестве образца ещё часто пригождаются встроенные шейдеры, скачать их можно на этой странице.

    Что касается взаимодействия шейдеров с объектами, так оно отсутствует. Шейдеры ничего не знают про сцену и объекты, они работают только с данными, которые есть в модельке, экранных буферах и переданных параметрах. Есть ещё глобальные константы и ключевые слова, но не думаю, что они вам в скором времени понадобятся.

    Если говорить конкретно о примере с просвечиванием сквозь стену, то делается оно довольно просто с помощью двухпроходного шейдера с изменённым ZTest. Один раз моделька рисуется только там, где в z-буфере уже что-то есть, и один раз рисуется "как обычно". В шейдере ниже я просто скопировал второй раз проход из обычного Unlit шейдера и добавил строчку с ZTest Greater, ничего сложного.
    Пример шейдера
    Shader "Custom/Example"
    {
        Properties
        {
            _Color ("Color", Color) = (1, 1, 1, 1)
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
                
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                };
    
                struct v2f
                {
                    float4 vertex : SV_POSITION;
                };
    
                float4 _Color;
                
                v2f vert (appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    return o;
                }
                
                fixed4 frag (v2f i) : SV_Target
                {
                    return _Color;
                }
                ENDCG
            }
    
            Pass
            {
                ZTest Greater
    
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                };
    
                struct v2f
                {
                    float4 vertex : SV_POSITION;
                };
    
                float4 _Color;
    
                v2f vert(appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    return o;
                }
    
                fixed4 frag(v2f i) : SV_Target
                {
                    return -_Color;
                }
                ENDCG
            }
        }
    }


    Энергетические щиты можно сделать разными способами, обычно это комбинация шейдеров, скриптов, систем частиц и анимаций. Например в шейдере может быть массив точек, рядом с которыми в определённом радиусе рисуется кружок. Точки передаются в материал с помощью Material.SetVectorArray или в рендерер с помощью MaterialPropertyBlock.SetVectorArray и Renderer.SetPropertyBlock. Далее в скрипте с помощью функции или анимации меняется радиус рисуемого кружка и одновременно запускается система частиц. Всё это вместе выглядит как энергетический щит, но нельзя сказать, что дело только в шейдере.
    Ответ написан
    3 комментария
  • Баг режима рендеринга Fade/Cutout в стандартном шейдере, как решить?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Предположу, что дело в мипмапах и при отдалении камеры на тонкие линии не хватает разрешения. Попробуйте их отключить и посмотрите что получится.
    Ответ написан
  • Ошибка CS0117. Что не так?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Обе ошибки из-за того, что у вас нету нормальной ссылки на камеру. В первом случае вы подсунули newcam, что совпадает с названием вашего класса, а посему компилятор пытается интерпретировать это как вызов статического метода. Во втором случае вызов метода у camera не срабатывает, потому что вы взяли туториал трёхгодичной давности, а Component.camera уже давным-давно выпилили. Решить это всё можно двумя способами: обращаться к камере через Camera.main, либо сделать публичное поле и в инспекторе перетащить туда камеру.
    Ответ написан
    Комментировать
  • Можно ли "легко" повернуть объект "лицом" в сторону его движение?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Берёте Rigidbody.velocity и запихиваете его в Quaternion.LookRotation, получаете нужное вращение, которое можете применить к трансформу вашей графики.
    Ответ написан
    1 комментарий
  • Что лучше Unity vs UE4 (для 3D приложений)?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    В Asset Store гораздо больше выбор по сравнению Marketplace, например можно купить готовые модельки планет. Документация у Unity и C# получше чем у Unreal и C++, а в остальном движки одинаковые. Если раньше на плюсах писали, то берите Unreal, не придётся одновременно изучать движок и язык.
    Ответ написан
    3 комментария
  • Как выделить несколько галочек?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    ToggleGroup для того и нужен, чтобы нельзя было выделить несколько галочек, читайте внимательнее мануал. Если хотите выделить несколько - удалите ToggleGroup, вот и всё.
    Ответ написан
    Комментировать
  • Как сделать управление персонажем с помощью мыши и клавиатуры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Всё сводится к поиску положения мышки в мировых координатах, после этого, зная положение игрока, можно делать всё, что душе угодно. Основные методы, которые вам нужны это Camera.ScreenPointToRay и Camera.ScreenToWorldPoint. Кроме того, на эту тему есть официальный туториал, рекомендую посмотреть.
    Ответ написан
    1 комментарий
  • Как создать 2d карту?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    У тайлов нет стандартных размеров, какие пропорции нужны для художественного стиля, такие и берутся. Иногда берут числа кратные степеням двойки для оптимизации, но и это не обязательно.

    Для работы с тайлами вам нужно либо взять бету 2017.2, либо скачать плагин из магазина, руками расстанавливать тайлы очень неудобно, замучаетесь с позиционированием и заделкой щелей. Тайлы разного размера в одной игре редко делают, но если уж так вышло, то можно их разнести по разным слоям, главное, чтобы оба набора можно было уложить в сетку одной размерности.
    Ответ написан
    1 комментарий
  • Как работает ИИ в играх?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Подходов к разработке ИИ много, конкретная реализация зависит от конкретной игры, где-то достаточно двух правил, которые реагируют на события, где-то нужно городить поведенческие деревья. Начинают обычно с конечных автоматов, как самых простых в реализации, далее по степени сложности идут поведенческие деревья и Utility AI, про все три можно почитать в статье на гамасутре. Помимо этого, можете почитать pdf-ки со статьями на сайте Game AI Pro. Если больше любите смотреть презентации, то можете заглянуть на канал GDC.

    Выполняется код в отдельных потоках или нет к разработке ИИ не относится, это просто оптимизация, которая используется по ситуации.
    Ответ написан
    Комментировать
  • Cocos или Unreal Engine 4?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    1. Можно, видел вроде даже туториалы.
    2. С производительностью всё будет хорошо, но размер игры будет больше. Есть ряд оптимизаций, которые позволяют уменьшить размер билда, но по сравнению с кокосом будет больше. По части разработки теоретически может не быть каких-то инструментов, которые есть в кокосе, но не могу сказать точно, с кокосом плохо знаком.
    Ответ написан
    Комментировать
  • Новые 3D-движки типа Alternativa?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вам нужен движок, который умеет делать сборку для WebGL. Самые развитые трёхмерные движки сейчас это Unity и Unreal, с коллизиями там всё замечательно, документации и туториалов полно. Если веб вам ближе, то можете поискать чисто браузерные движки, но возни с ними будет больше.
    Ответ написан
    1 комментарий
  • Почему не подгружается спрайт мотодом Resources.Load?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Во-первых, убедитесь, что спрайт лежит в папке ресурсов, Resources.Load грузит по относительному пути из всех папок в проекте, которые называются Resources. Во-вторых, при загрузке из ресурсов не нужно указывать расширение. В-третьих, есть вероятность, что вы грузите не по тому имени, back это название текстуры, спрайт может называться back_0 или ещё как, проверьте.
    Ответ написан
    2 комментария
  • Куда пропадает рабочее пространство Unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Так работает ортографическая камера, если сильно приблизиться к объектам в сцене, то их начнёт отрезать ближней плоскостью камеры. Если переключить камеру сцены из двадэшного режима в тридэшный, то станет понятнее. Не очень очевидное поведение, но так уж есть. Для фокусировки на объектах можете использовать горячую клавишу F, либо двойной клик по объекту.
    Ответ написан