Задать вопрос
  • Привидение типов в Unity3d с использованием c#?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Кастануть CollisionFlags в Vector3 нельзя, но можно написать свой метод преобразования, правда получится ерунда.
    private Vector3 GetVector3(CollisionFlags flags)
    {
        switch (flags)
        {
            case CollisionFlags.None:
                return Vector3.zero;
            case CollisionFlags.Above:
                return Vector3.up;
            case CollisionFlags.Below:
                return Vector3.down;
            case CollisionFlags.Sides:
            default:
                return Vector3.zero;
        }
    }
    Ответ написан
    Комментировать
  • Прикрепленый Sprite к UI Image не видно в окне Scene?

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Вы про ray casting или ray tracing? Это близкие понятия, но одно относится больше к физике, а другое к рендерингу. Если брать ваш конкретный сценарий, то проверок нужно две: одна на пересечение луча и плоскости, вторая на нахождение точки в квадрате. Про алгоритм пересечения луча с плоскостью можете почитать здесь.
    Ответ написан
    Комментировать
  • Зачем люди используют pygame и подобные вещя для создания игр?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    В первую очередь открываете мануал и читаете:
    https://docs.unity3d.com/Manual/SL-SurfaceShaders.html
    https://docs.unity3d.com/Manual/SL-SurfaceShaderEx...
    После прочтения оказывается, что "My Shader3" это диффузный шейдер с картой нормалей, "My Shader2" это PBR шейдер с вынесенными параметрами металличности и гладкости, а "My Shader" это диффузный шейдер, который текстурирует только поверхности, у которых нормали смотрят вверх.
    Теперь, если мы хотим эти шейдеры объединить, то получается, что нужно сделать PBR шейдер, добавить в него карту нормалей и ползунки гладкости и металличности, а потом вставить условие проверки нормалей.
    void surf (Input IN, inout SurfaceOutput o)
    {
        o.Albedo = _Color;
        // Металличность и гладкость указываем либо здесь, либо внутри условия
        if(abs(IN.worldNormal.z)>0.5)
        {
            o.Albedo *= tex2D (_MainTex, IN.uv_MainTex).rgb;
            // Применяем диффузную текстуру, карту нормалей и тому подобное
            ...
        }
    }

    Дополнительно ещё можно скачать архив со встроенными шейдерами с сайта юнити и посмотреть как они работают.
    Ответ написан
  • Как изучить GLSL?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    На Wikibooks есть неплохая подборка статей: https://en.wikibooks.org/wiki/GLSL_Programming
    Ответ написан
    Комментировать
  • Virtual desktop без oculus/htc возможно?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Можете попробовать Trinus VR, но в такой связке скорее всего багов будет тьма и пользоваться будет невозможно.
    Ответ написан
    Комментировать
  • Почему важен высокий FPS в шутерах?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Проведите простой эксперимент: как можно быстрее переместите курсор под диагонали из одного угла монитора в другой. Много вам времени потребовалось? Я за долю секунды прошёл два монитора туда и обратно на простейшей мышке с низким DPI. За очень малое время можно очень далеко переместить прицел. С игровой мышкой результат был бы разы лучше и точнее. Теперь представим, что монитор работает с очень низким фпс, пускай это будет один кадр в секунду. Сможете ли вы точно прицелиться при такой частоте обновления? Не сможете.

    Теперь, если добавить в эту схему сеть, то получается следующее. С сервера на ваш компьютер приходят данные о положении противника с задержкой сети, скажем, 80 миллисекунд. Игра обрабатывает данные, отправляет на монитор, игрок реагирует, двигает мышку, игра считывает положение мышки, отправляет в сеть. Если игра тормозит, то серверные данные окажутся на экране с дополнительной задержкой, игрок позже с реагирует, игра позже отправит реакцию на сервер. Далее сервер принимает данные, сравнивает положение противника с положением мышки и принимает решение о попадании. В сумме такой цикл может занять несколько сотен миллисекунд. Иными словами, игрок получает устаревшую информацию, реагирует на неё, сервер получает устаревшую информацию, реагирует на неё. На задержки сервера и игры повлиять могут только разработчики, игроку это не доступно. Что может сделать игрок, так это уменьшить задержки на своей стороне: подключить стабильный интернет, играть без тормозов и быстрее передавать данные игре с помощью хорошей мышки.

    Длительность одного кадра при 30 фпс получается около 30 миллисекунд, при 60 фпс - около 15. Пятнадцать миллисекунд могут показаться слишком не слишком большим интервалом, но это не так. Существуют исследования по отзывчивости интерфейсов, в которых было выяснено, например, что кнопка, запускающая анимацию подсветки более чем через 30 миллисекунд после наведения курсора воспринимается как медленная, тормозная. И это мы говорим о самом обычном среднестатистическом человеке, который расслабленно нажимает на кнопку и, тем не менее, умудряется заметить разницу между тридцатью и сорока миллисекундами. А уж профессиональный игрок тем более заинтересован в максимальной отзывчивости всей связки от сервера до мышки.

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если меш создан в рантайме, то никак, максимум, что вы можете сделать, это вызвать Mesh.RecalculateNormals. Либо написать свой собственный алгоритм. Параметры, которые вы указали, существуют только в редакторе и доступны через ModelImporter.
    Ответ написан
  • Как отключить показ сетки в редакторе?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Класс, который вам нужен, называется AnnotationUtility, он internal, так что без рефлексии к нему не подобраться.
    using System.Reflection;
    using UnityEditor;
    
    public class Test
    {
        [MenuItem("Test/ShowGrid")]
        private static void ShowGrid()
        {
            var type = typeof (Editor).Assembly.GetType("UnityEditor.AnnotationUtility");
            var property = type.GetProperty("showGrid", BindingFlags.Static | BindingFlags.NonPublic);
            bool showGrid = (bool) property.GetValue(null, null);
            property.SetValue(null, !showGrid, null);
        }
    }
    Ответ написан
  • Как фиксировать Quality level в скрипте?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Используйте QualitySettings.SetQualityLevel.
    Ответ написан
    Комментировать
  • Где почитать про создание игрового искусственного интеллекта?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    На aigamedev.com есть много хороших статей. Ещё посмотрите родственный сайт nucl.ai.
    Ответ написан
    Комментировать
  • Какое разрешение экрана выбрать для дизайна игры для Android и/или IOS?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Сначала выбираете целевые устройства, например "от пятого айфона и выше". Берете максимальное разрешение из этого диапазона и рисуете, для меньших разрешений жмёте картинки скриптом для фотошопа. Далее либо запихиваете все варианты графики в одно приложение, либо делаете отдельно HD и SD версию, либо качаете нужную графику при первом запуске. Для айпадов-андроидов точно так же.
    Ответ написан
    2 комментария
  • Как определить "расстояние" угла до нуля?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    MoveTowardsAngle специально меняет отрицательные углы на положительные, если не хотите такое поведение, то используйте обычный MoveTowards.
    public static float MoveTowardsAngle(float current, float target, float maxDelta)
    {
        float num = Mathf.DeltaAngle(current, target);
        if (-(double) maxDelta < (double) num && (double) num < (double) maxDelta)
        return target;
        target = current + num;
        return Mathf.MoveTowards(current, target, maxDelta);
    }
    
    public static float DeltaAngle(float current, float target)
    {
        float num = Mathf.Repeat(target - current, 360f);
        if ((double) num > 180.0)
        num -= 360f;
        return num;
    }
    Ответ написан
    1 комментарий
  • В чем отличие google cardboard от Gear VR?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Cardboard это просто картонка с линзами и шайбой-кнопкой. У Gear VR есть тачпад, точный гироскоп и Asynchronous Timewarp, он более продвинутый технологически и цельнее как платформа. Насчёт Daydream пока ничего сказать не могу, не щупал.
    В контексте юнити разработка будет отличаться. Кардборд требует плагин, поддержка Gear VR есть из коробки, Daydream будет из коробки в следующей версии юнити. Кроме того, вы наверняка захотите использовать дополнительные кнопки Gear VR, так что придётся писать свои варианты интерфейса для каждой из платформ. Одно и то же приложение на разных платформах не запустится, например приложение Gear VR после запуска ждёт вставки телефона в шлем. Вдобавок, у Gear VR очень строго с сертификатами, как под обычный андроид просто взять и собрать не получится, придётся регистрироваться на сайте и получать ключ. Использовать кардборд для тестирования можно, но тогда вы будете ограничены плохим трекингом, а из способов ввода у вас будет только взгляд, так что решайте какая платформа вам нужнее. Обе платформы поддерживать не сложно, но вам придётся написать свои обёртки над SDK и переключать платформы при сборке.
    Ответ написан
  • Как масштабировать текст?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    У компонента Text есть галочка Best Fit, она позволяет сделать резиновый размер текста.
    hrq0W
    Ответ написан
    Комментировать
  • Как корректно обрабатывать столкновения пуль с объектами?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если жертва будет отслеживать попадания, то ей нужно будет знать про все возможные способы нанесения урона и запрашивать у пуль их урон, что довольно странно. Логичнее всего, когда свойства пули хранятся в ней, а не где-либо ещё, и пуля сама наносит урон. Так вам будет проще в случае чего добавить новые свойства оружию, например зажигательные патроны. И лучше будет, если вы в пуле будете через GetComponent доставать не конкретный класс, а интерфейс, например IDamageable, и дёргать метод Damage. Проверять теги тоже не советую, лучше свои и вражеские пули разнести по разным слоям, а возможность столкновения указать в матрице в настройках проекта.
    Ответ написан
  • Реально ли осуществить даную идею?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Есть много подобных игр: The Powder Toy, Vessel, PixelJunk™ Shooter, Sprinkle, Where's My Water?. В подобных играх очень сложно добиться хорошей производительности и получить красивую картинку, задача не тривиальная. Я бы посоветовал начать с чтения статей по симуляции жидкостей на Google Scholar, кроме подхода с шариками есть и другие. На юнити такое сделать можно, но про встроенную физику скорее всего придётся забыть. Настоятельно рекомендую поближе ознакомиться с проблемой прежде чем наворачивать сверху дополнительные сложности вроде обмена теплом.
    Ответ написан
    Комментировать
  • Как запустить полноценный Web Browser внутри игры на unity3d?

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