• Выбор языка для разработки концептуальных решений в сфере строительства с использованием VR?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Современные VR-приложения чаще всего делают с использованием игровых движков. Среди самых популярных движков сейчас Unity и Unreal, поддержка виртуальной реальности в них включается галочкой, что несравнимо проще, чем интегрировать SDK вручную. В Unity пишут на C#, в Unreal на C++, кроме того, в обоих движках есть средства для визуального программирования. Если сравнивать языки по сложности для новичка, то я бы советовал C#, на плюсах ногу отстрелить всё-таки сильно проще.
    Ответ написан
    2 комментария
  • Не поварачивается камера с помощью гироскопа?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Что-то вы перемудрили, Gyroscope.attitude это кватернион, а не вектор, нельзя его компоненты брать и просто так использовать. Вы пример из документации пробовали, работает?
    using UnityEngine;
    
    public class GyroscopeExample : MonoBehaviour
    {
        private void Awake()
        {
            Input.gyro.enabled = true;
        }
    
        private void Update()
        {
            transform.rotation = Input.gyro.attitude;
        }
    }

    А вообще говоря, если вы пытаетесь сделать мобильную виртуальную реальность, то для этого в настройках плеера есть специальная галочка, включаете её и вращение камеры само по себе обновляется, даже делать ничего не надо.
    rRAEI
    Ответ написан
    Комментировать
  • Как сохранить кастомный массив в Unity?

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Превращаете эйлеры в кватернион с помощью Quaternion.Euler, и умножаете на получившееся вращение:
    transform.rotation *= Quaternion.Euler(0, 90, 0);
    Ответ написан
    5 комментариев
  • Построение unity проекта под платформу android?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Почитайте документацию к MonoBehaviour.OnCollisionEnter и посмотрите официальный туториал. Для включения воды можете использовать Object.Instantiate.
    Ответ написан
    Комментировать
  • Почему треугольник хуже квадрата?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Код немножко странный, ну да ладно.
    Замените это:
    var settings = 0;
    foreach (var permission in permissionsArray)
    {
        settings += permission;
    }

    На это:
    var settings = 0;
    foreach (var permission in permissionsArray)
    {
        settings += (int) permission;
    }

    После этого должно скомпилироваться.
    Ответ написан
    Комментировать
  • Как попасть в game-dev и с чего начать карьеру в этой области если ты веб-разработчик?

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

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

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

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Используйте метод SceneManager.LoadScene.
    Ответ написан
    Комментировать
  • Как написать метод, который будет выполняться перед каждым другим методом?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Это называется декоратор, в шарпе их нет. Не знаю, что у вас конкретно за случай, но иногда удобно бывает метод А вынести в статический класс. Либо можете сделать метод-посредник, в который вы будете передавать делегат, а он будет делать проверку и либо вызывать делегат, либо нет.
    Ответ написан
  • Какие телефоны для подойдут для тестирования Google ArCore?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Пока новые девайсы не выйдут, список не обновится. На сайте даже написано:
    ARCore is being offered as an early preview so that you can start experimenting with building new AR experiences

    С поддержкой ARKit тоже не так много моделей, просто Apple лучше почву подготовили по сравнению с гуглом.
    Пока ждите, ближе к новогодним праздникам что-нибудь да анонсируют.
    Ответ написан
    Комментировать
  • Как из модели терреина сделать основной terrain?

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

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

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Проще всего такое делать физикой. Чтобы пули взаимодействовали с коллайдерами вам нужно повесить на них Rigidbody и отключить трение и гравитацию. Помимо этого на коллайдер пули нужно повесить физический материал с нулевым трением и единичной прыгучестью, чтобы при столкновении пули не тормозились. При выстреле запускаете пули с помощью Rigidbody.AddForce или Rigidbody.velocity, и после этого они будут вечно лететь и отскакивать от всех поверхностей.
    Ответ написан
    Комментировать
  • Шейдеры, реагирующие на объекты. Как такое создаётся?

    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
    Геймдизайнер-телепат
    Предположу, что дело в мипмапах и при отдалении камеры на тонкие линии не хватает разрешения. Попробуйте их отключить и посмотрите что получится.
    Ответ написан
  • Как назначить определенную кнопку на картинку из массива Unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Для вашего случая хорошо подходит словарь, но в юнити не умеет их сериализовывать, поэтому лучше использовать список классов-контейнеров:
    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Example : MonoBehaviour
    {
        public List<KeyboardKey> keyboardKeys = new List<KeyboardKey>();
    
        private void Update()
        {
            for (int i = 0; i < keyboardKeys.Count; i++)
            {
                var key = keyboardKeys[i];
                if (Input.GetKeyDown(key.code))
                {
                    // Делаем что-то с key.image
                }
            }
        }
    }
    
    [Serializable]
    public class KeyboardKey
    {
        public Image image;
        public KeyCode code;
    }

    При желании KeyboardKey можно сделать MonoBehaviour, тут уж как вам удобнее.
    Ответ написан
    Комментировать