• В каком порядке изучать математические дисциплины?

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

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

    Кроме того, для расширения кругозора советую погулять по ссылкам википедии про вычислительную геометрию. Какие-то вещи стоит попробовать написать самому (например, алгоритм пересечения отрезков), а про какие-то достаточно просто знать - с той же триангуляцией можно месяцами возиться, для таких вещей лучше брать готовую библиотеку.
    Ответ написан
    Комментировать
  • Как отобразить и спрятать группу объектов в unity?

    Griboks
    @Griboks Куратор тега C#
    Подробно читайте документацию! FindGameObjectsWithTag ищет только среди активных объектов на сцене.
    Ответ написан
    Комментировать
  • Есть ли компилятор для Андроид в бинарный код?

    @MarkusD
    все время мелю чепуху :)
    Как я понял Java компилируются в байт-код, который потом кушает JVM.

    Немного не так. В основе процесса приложения лежит не JVM, а Dalvik. Ни на что не смотря, резкие отличия от JVM есть.
    Только Dalvik уже отжил свое, английская статья в вики повествует о так называемом Android Runtime (ART), который присутствует в Android начиная с версии 4.4, а с 5.0 и вовсе вытеснил Dalvik. Подробнее о принципах работы ART можно почитать снова в английской вики. Только не стоит думать что ELF может содержать исключительно и только инструкции для реальных процессоров. ELF - это просто контейнер исполняемого кода.

    Теперь обратимся к коду.

    https://android.googlesource.com/platform/art/+/ma...
    Это код утилиты dex2oat, которая и производит преобразование из DEX в ELF.

    https://android.googlesource.com/platform/art/+/ma...
    Вот тут есть некоторые пояснения самих данных и принципов их хранения в ELF формате.

    Это всё не говорит о том, что после обработки DEX в ELF будут храниться исключительно инструкции реального процессора. Это все говорит только о том, что в ELF формате хранится уже подготовленный и оптимизированный код, не требующий докомпиляции и оптимизации во время своего запуска.

    Так и зачем смущаться этого всего? Разницы мало, для виртуального там процессора инструкции или для реального. Все уже оптимально собрано.

    Идем дальше.

    https://android.googlesource.com/platform/art/+/ma...
    Это описание главной функции процесса приложения.

    https://android.googlesource.com/platform/art/+/ma...
    Вот тут Dalvik создается безусловно, т.е. от него никуда не деться. Вот точное место.

    Далее, касательно пресловутой Native activity.

    https://github.com/android/platform_frameworks_bas...
    Это исходный код NativeActivity, который зашит внутри стандартной библиотеки Android.

    https://github.com/android/platform_frameworks_bas...
    Чтобы NativeActivity смогла загрузить свой низкий уровень, в AndroidManifest.xml нужно описать мету вот с этим именем и именем .so файла в качестве значения.

    https://github.com/android/platform_frameworks_bas...
    Вот тут производится загрузка низкого уровня. Как видно, это делается из метода onCreate самой NativeActivity. То есть, это самое начало жизненного цикла Activity.

    spoiler
    У NativeActivity есть много очень неприятных ограничений и очень неудобный интерфейс. Из за этого я еще в 2011 году для используемого в производстве игр движка был вынужден разработать альтернативу NativeActivity и некоторую обертку над JNI для увеличения удобства разработки.

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

    NDK что-то дает, но далеко не все, буквально мелочи. Как только тебе понадобится обратиться к телефонной книжке, узнать громкость звука уведомлений или состояние беззвучности, как-либо опросить окружение устройства, тебе придется писать код на Java.
    NDK не является инструментом разработки приложений. NDK - это средство реализации только критичных к производительности участков программы.

    Хочу начать разрабатывать моб. приложения, кроссплатформерность не интересует. Гонюсь за быстродействием.

    Не спеши гнаться за быстродействием, по всей видимости тебе и C++, как инструмент разработки, не нужен, т.к. вообще не ясно для чего и зачем ты решил его использовать.
    Инструменты выбирают исходя из целей. Цели пока не обозначены. Быстродействие не может быть целью, т.к. это только условие достижения лишь некоторых целей.
    Во многих случаях в мобильной разработке максимальное быстродействие дает именно использование основного предлагаемого языка программирования. Лично я предлагаю тебе сперва уделить 5-6 месяцев (но лучше год и более) ежедневному чтению документаций, книг и исходного кода как открытых проектов, так и репозиториев разработчиков мобильных платформ.

    В качестве эпилога.
    https://developer.android.com/ndk/guides/index.html
    The NDK may not be appropriate for most novice Android programmers who need to use only Java code and framework APIs to develop their apps.
    Ответ написан
    Комментировать
  • Почему все уперто направляют на msdn когда есть docs?

    @SZolotov
    Asp.net core, MAUI,WPF,Qt, Avalonia
    Раньше не было никакого docs, появился он не давно, год или два как, а MSDN лет больше чем многим программистам
    Ответ написан
    Комментировать
  • Фокусировка персонажа, как правильно?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Пытался понять что ваш скрипт должен делать, так и не понял. Что такое "фокусировка персонажа" человеческим языком? На чем висит этот скрипт?

    По факту вы берете координаты объекта pers, и объекту на ктором висит скрипт даете те же координаты с поправкой высоты. Но вот хоть убейте не пойму - зачем? Да еще и в апдейте. Вам нужно просто объект расположить выше? Сделайте это в иерархии и все - положите этот GO как child вашего pers и выставите ему нужные координаты - будет автоматическая привязка без всяких скриптов.

    А пустой экран скорее всего потому, что в поле зрения камеры ничего нет.
    Ответ написан
    4 комментария
  • Как создавать модели как в игре SuperHOT?

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

    @0x131315
    По поводу скрипта - он странный:
    1) Он работает только для обьектов, которые участвуют в столкновениях.
    2) Он не учитывает дистанцию до центрального тела, только его массу, и работает только для случаев, когда дистанция между противниками в тысячи раз меньше дистанции до центрального тела, т.е. более-менее точен где-то на задворках звездной системы, вдали от звезды. На более ближних дистанциях начинает безбожно врать.
    3) Он наполняет обьектами массив, который не особо нужен скрипту для работы, который нигде не очищается. Это - утечка памяти.
    4) Его можно прикладывать только к одному телу - центральному. Иначе это умножает утечку памяти и сильно расходует процессор. В некоторых случаях его можно заменить триггером. И часто его оптимизируют, вызывая раз в несколько десятков кадров, а не каждый кадр. Также пишут, что указание маски слоя в Physics.OverlapSphere повышает эффективность работы.

    По поводу утечки.
    Не знаю тонкостей unity, не могу сказать точно, насколько она серьезна. Но возможны два варианта:
    1) обьект скрипта пересоздается каждый кадр, и время от времени устаревшие экземпляры собирает сборщик мусора.
    Тогда утечка равна размеру массива помноженному на количество кадров в секунду и на таймаут сборщика мусора.
    При условии, что скрипт используется только на одном обьекте (надеюсь ты не додумался применить его ко всем обьектам?), для 1000 обьектов в сцене, 60фпс и 10 секундном таймауте сборщика мусора, утечка составит 5..50Мб - именно столько памяти игра будет отьедать впустую, никуда не используя, только на один экземпляр этого скрипта.
    Если скрипт применен к 10 обьектам, утечка увеличится до 50..500Мб.
    А если обьектов 1000?
    Так и рождаются игры, которые требуют 16Гб оперативки.
    Это не говоря о бесполезной трате процессорных ресурсов: если по глупости применить скрипт ко всем обьектам, эффективно работать он будет только на одном, но жрать память и процессор будет за всех.
    На 1000 обьектах потребление процессора этим скриптом увеличится в 1000000 раз: 1000 скриптов должны будут каждый обработать по 1000 обьектов.
    Так рождаются игры, которые требуют топовое железо.
    Всего 2 легкие ошибки с одним скриптом (далеко не основным) - и такой потенциал! :)
    2) Используется один экземпляр скрипта, он не пересоздается каждый вызов.
    Тогда обьем массива каждую секунду умножается на фпс, пока массив не забьет всю память.
    И сборщик мусора тут не поможет, т.к. скрипт существует пока существует основной обьект, т.е. пока загружен уровень - всю игровую сессию.
    Для тех же условий утечка в первую секунду составит 0,5..5Мб, и каждую секунду будет увеличиваться на столько же. За час игры утечка составит от 2 до 20Гб, в зависимости от размера структур.
    Утечка процессора останется той же, что и в первом варианте.

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

    По поводу ошибок прицеливания: введи поправки на гравитацию при прицеливании.
    Не факт, что это тебе поможет, все-таки скрипт у тебя кривой, и непонятно правильно ли ты его используешь - каковы максимальные дистанции между противниками, каковы минимальные дистанции от противников до центрального тела, каков размер центрального тела, как создаются снаряды (независимыми или привязанными к тому, кто выстрелил), как задается их скорость (постоянная или относительно скорости выстрелившего), какова скорость снаряда и цели.
    Но самое простое:
    dy=g*t*t/2
    t=l/v
    dy - величина смещения снаряда гравитацией на текущей дистанции
    g - величина гравитации, локальная (вблизи точки выстрела). В твоем скрипте гравитация постоянна, не зависит от координат, и равна массе центрального тела, значит вместо g можно подставить массу центрального тела.
    t - время полета снаряда
    l - прямая дистанция до противника.
    v - глобальная скорость снаряда (относительно мира).
    Ограничения:
    Локальная гравитация неприменима, если дистанция сравнима с расстоянием до центрального тела - там нужен дополнительный учет кривизны поля гравитации. Гравитация в разных точках пути снаряда будет разная, а это сильно снизит точность, особенно на больших дистанциях - на много порядков.
    Прямая дистанция неприменима, если дистанция сравнима с расстоянием до центрального тела - там нужен дополнительный учет кривизны поля гравитации. Дистанция будет не прямой, а дугой, и значит снаряд пройдет больше расстояния, лететь будет дольше, и поправка нужна больше.
    Если время полета больше нескольких секунд, придется учитывать влияние гравитации на скорость снаряда. Снаряд будет ускоряться или замедляться гравитацией, а значит точность с дистанцией начнет быстро падать.
    Если скорость цели сравнима со скоростью снаряда - придется учитывать, что цель движется. Пока снаряд летит в точку прицеливания, быстрая цель оттуда уже убежит, и точность никакой не будет.
    Ответ написан
    1 комментарий
  • Как сделать систему повреждений корабля?

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

    GavriKos
    @GavriKos Куратор тега Unity
    Коллайдер тут не поможет - он не выдает данные о "области попадания". Вам нужно смотреть в сторону Projector и шейдеров самописных.
    Ответ написан
    Комментировать
  • Игры написанные на С#, как их импортировали на андроид и ios, как это проходит?

    Amfore
    @Amfore
    Angry Birds создан с использованием кроссплатформенного игрового движка box2d.

    Он написан на платформо-независимом языке программирования C++, поэтому может работать (выполняться) на любой платформе, на которой присутствует компилятор C++.
    Ответ написан
    1 комментарий
  • Игры написанные на С#, как их импортировали на андроид и ios, как это проходит?

    Rou1997
    @Rou1997
    В целом с помощью Xamarin (Mono), а если сразу использовался кроссплатформенный игровой "движок", то задача упрощается.
    Ответ написан
    Комментировать
  • На каком игровой движке сделана игра Cossacks 3?

    SagePtr
    @SagePtr
    Еда - это святое
    Вот здесь разработчик казаков пишет, что на Delphi 7 они: https://dou.ua/forums/topic/18580 (РКН данный ресурс может блочить)
    Ответ написан
    Комментировать
  • Надо реализовать электронный меню. Вопрос на чем?

    Denormalization
    @Denormalization
    Начните с изучения php.net/manual/ru.
    думаю как то не такая уж сложная система

    Когда перестанете так думать, обратитесь сюда:
    fl.ru
    upwork.com
    Ответ написан
    Комментировать
  • Гадание по коду на собеседовании. Как проверяют кандидатов?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    я бы показал БогоСорт https://ru.wikipedia.org/wiki/Bogosort - очень интересный алгоритм.
    Ответ написан
    Комментировать
  • Где можно почитать про приложения или функции которые запрещено разрабатывать на IOS?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    в правилах аппстора
    Ответ написан
    Комментировать
  • Какой php фрейморк использовать для написания апи сервера?

    Jump
    @Jump
    Системный администратор со стажем.
    На каком php фрейморке писать апи сервер
    Ни на каком.
    На фреймворках не пишут! Пишут на языке программирования, а фреймворки используют.
    Что такое " апи сервер" не совсем понятно. Объясните подробней.
    И как лучше хранить файлы?
    На ленте.
    Ответ написан
    1 комментарий
  • Как сделать диалоги в играх?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Либо неправильно представляете, либо неправильно описали. Классика жанра - это 1 реплика персонажа и n ответов главного героя. Даже если вам надо разбивать реплику на несколько экранов - это 1 запрос. Т.е. у вас неверен пункт 1. Плюс непонятно откуда возьмется номер вопроса и что это вообще такое. Я бы делал так:
    1) дергаем скрипт Speak, передаем ему ID игрока (если его достаточно)
    2) получаем 1 реплику, ее ID, ответы и их ID, либо сигнал окончания диалога
    3) если не получен сигнал окончания диалога - после реакции от игрока дергаем Speak, передаем ID игрока, ID реплики и ID ответа. Переходим к пункту 2.
    4) Если получен сигнал окончания диалога (из п.2) - выход.

    Можно убрать пункт 1, но это оптимизация, не более.

    Все это можно красиво завернуть в XML/JSON.
    Ответ написан
    3 комментария
  • Как программно остановить зарядку при достижении определенного уровня заряда?

    @OvLab
    Процесс заряда контролируется отдельным контроллером и никак не управляется программно. Без внешнего устройства, разрывающего цепь не обойтись.
    Ответ написан
    1 комментарий