Задать вопрос
  • Почему игры на Unity плохо оптимизированны?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Потому что порог вхождения очень низкий и любой рукожопый разработчик может дотащить свою игру до магазина. Сам движок ни в чём не виноват кроме доступности, средств для оптимизации предостаточно: встроенный профайлер, внешние профайлеры, Frame Debugger, RenderDoc и т. п.

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

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

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Blizzard недавно выпустили инструменты для программирования ботов для StarCraft, но, вообще говоря, это cкорее исключение из правил. Делать игры само по себе сложно, а поддерживать внешнее API только для того, чтобы с ним поигрались два-три программиста, не очень выгодно. Конечно, бывают игры чисто про программирование, например CodeCombat , их достаточно много, на Steam даже есть специальный раздел, но в них обычно боты дерутся с ботами. Ещё как вариант можете поискать игры с открытым исходным кодом, например Quake или Doom.
    Ответ написан
    Комментировать
  • Unity для Линукс?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Билды под линукс не очень стабильные, поэтому распространяются через форум.
    https://forum.unity3d.com/threads/unity-on-linux-r...
    Ответ написан
    Комментировать
  • Как добавить появление спрайтов и кнопок на сцене?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вешаете в Canvas'е кнопку, потом либо в инспекторе подписываете нужный метод на событие клика, либо делаете это через скрипт:
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Example : MonoBehaviour
    {
        public Button button;
    
        private void Start()
        {
            button.onClick.AddListener(OnClick);
        }
    
        private void OnClick()
        {
            Debug.Log("Click");
        }
    }
    Ответ написан
    Комментировать
  • Как привязывается C# к Unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Всё описанное вами есть в официальных туториалах и Standard Assets.
    Более продвинутые туториалы есть на сайте Catlike Coding.
    Ответ написан
    Комментировать
  • Ошибка в unity Error loading launcher,что делать?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Создаётё нулевой счётчик, после обработки каждого файла его инкрементируете и считаете отношение обработанных файлов к общему количеству. Если про количество обработанных/необработанных файлов знает только функция, то можете пробросить в неё колбэк, который будет отдавать два числа при каждом изменении состояния счётчика, а вы снаружи эти числа будете как-то выводить на экран. Либо переделайте функцию так, чтобы она принимала на вход список файлов, тогда наружу надо будет отдавать только число обработанных файлов. Либо выводите прогресс на экран в самой функции, тут уж как хотите.
    Если говорить про конкретный способ вывода прогрессбара на экран, то в редакторе можно использовать EditorUtility.DisplayProgressBar, а в рантайме Slider.
    Ответ написан
    Комментировать
  • Кнопка в Unity 2D?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    GUI.Button это старый и медленный способ, никто им не пользуется, вам нужен Canvas, можете начать с официального туториала. Для "если нажали на спрайт" существует специальный компонент Button.
    Ответ написан
    Комментировать
  • Unity3d ошибка с переключением камер?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вы неправильно понимаете суть классов и компонентов, внимательно почитайте документацию. GameObject это не компонент, с помощью каста в другой класс нельзя магическим образом достать из него компонент, для этого существует специальный метод GameObject.GetComponent. Кроме того, в вашем случае конструкцию с FindGameObjectWithTag можно заменить вызовом Camera.main, результат будет такой же. Это не очень хорошая практика в контексте камер, но это уж вам решать. Что касаемо второй ошибки, она случается из-за того, что в вашем старте в первой строчке вызывается исключение, что обрывает поток метода, и все последующие строчки не вызываются, поэтому camera2 остаётся null.
    Ответ написан
    Комментировать
  • 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 комментария
  • NULLNULLNULLNULL?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вам надо брать Reflexil и менять скрипт точечно. Юнитёвые корутины очень коряво декомпилируются, чинить их руками утомительно, лучше целиком проект не пересобирайте.
    Ответ написан
    Комментировать
  • Как лучше сделать 3D модель?

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вот эти строчки разве не в конце должны быть?
    done = True
    while done:
      for e in p.event.get():
        if e.type == p.QUIT:
          done = False
    Ответ написан
    Комментировать
  • Лучшие gamedev блоги?

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Панель уведомлений это PlayerSettings.statusBarHidden, для панели навигации Screen.fullScreen нужно выставить в false, кнопка меню это KeyCode.Menu, кнопка назад это KeyCode.Escape.
    Ответ написан
    Комментировать