Ответы пользователя по тегу Unity
  • Как написать если кватернионы практически равны?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Например, можно вычислить Quaternion.Angle и сравнить с каким-то маленьким значением. Либо взять дистанцию между Quaternion.eulerAngles.
    Ответ написан
    Комментировать
  • Почему не отображаются якори в Unity?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Проверьте, что у вас включено отображение слоя UI:
    xyoDl
    Ответ написан
  • Compressed textu Ge3oxLDk-c is used as icon, This Unity Engine GUIUtility Process Event (Int32, IntPtr) Unity 3D. При билде игры. Как исправить?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Можно, но изменения не будут сохраняться в сборке, только в редакторе. Если хотите, чтобы сохранялись, тогда надо сериализовать ScriptableObject и писать куда-нибудь на диск. Когда я последний раз смотрел, изменения ресурсных файлов существовали только во время жизни приложения. За исключением необходимости сериализации хранить настройки в ScriptableObject очень удобно, особенно если надо что-то посмотреть или подправить в редакторе.
    Ответ написан
    Комментировать
  • Можно ли подключить .aar к Unity3d средствами maven и как это можно сделать?

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

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

    Второе по простоте решение - воспользоваться возможностями Tiled и вращать тайлы там, Tiled это умеет, Tiled2Unity тоже, скорее всего.

    Если же прям сильно хотите шейдером, то можно, например, с помощью двух флагов поворачивать uv во все четыре стороны.
    Custom/RotationExample
    Shader "Custom/RotationExample"
    {
        Properties
        {
            _MainTex("Texture", 2D) = "white" {}
    
            // Волшебные свойства для инспектора
            [Toggle] _RotateCW90("Rotate Clockwise 90", Float) = 0.0
            [Toggle] _Rotate180("Rotate 180", Float) = 0.0
            ////////////////////////////////////
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" "PreviewType" = "Plane" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                // Флаги для компиляции нескольких вариантов шейдера
                #pragma multi_compile __ _ROTATECW90_ON
                #pragma multi_compile __ _ROTATE180_ON
                ////////////////////////////////////////////////////
                
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2f
                {
                    float4 vertex : SV_POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                sampler2D _MainTex;
                float4 _MainTex_ST;
                
                v2f vert (appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    return o;
                }
                
                fixed4 frag (v2f i) : SV_Target
                {
    
                    // Собственно код вращения uv
    #if _ROTATECW90_ON
                    i.uv = float2(1 - i.uv.y, i.uv.x);
    #endif
    #if _ROTATE180_ON
                    i.uv = float2(1 - i.uv.x, 1 - i.uv.y);
    #endif
                    /////////////////////////////
    
                    fixed4 color = tex2D(_MainTex, i.uv);
                    return color;
                }
                ENDCG
            }
        }
    }

    Я комментариями пометил три важных кусочка, которые можно засунуть в любой шейдер для вращения текстуры. Код выше работает только для квадов с простейшей квадратной uv-картой, растянутой на весь диапазон от нуля до единицы, для атласов надо придумывать другое решение. Ну и не забывайте, что эти флаги надо будет как-то выставлять.
    Ответ написан
    4 комментария
  • Как реализовать переходы между сгенерированными локациями(Unity 2D)?

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

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

    Вообще говоря, на тему генераторов и сидов могу посоветовать вот эту статью от разработчика Cogmind, там всё то же самое, что и я сказал, только подробнее.
    Ответ написан
    Комментировать
  • Существует ли документация или справочник по Unity полностью на русском?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Скорее всего, вы его положили в папку Editor, поэтому он туда и попал.
    Ответ написан
    Комментировать
  • Как правильно спроектировать архитектуру и UI игры на Unity?

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

    Из общих советов могу порекомендовать избегать циклических связей, когда, например, вы в ui что-то отправляете и в сценарии ожидаете, что оттуда вас дёрнут в ответ, а если не дёрнут, то всё сломается. Для того, чтобы это не случалось, очень удобно использовать такую конструкцию:
    public event Action OnSomething = () => {};
    Так вы всегда сможете вызывать OnSomething и не беспокоиться о том, есть ли какие-либо подписчики у этого события, оно никогда не будет null и снаружи его никто вызвать не сможет. Когда вы начинаете думать в таком формате, то проектировать архитектуру становится проще.

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Берите Unity, для начинающих разработчиков это сейчас самый дружелюбный движок с хорошей документацией и множеством туториалов. На производительность в первую очередь влияет кривизна рук разработчика, движок сам по себе ощутимого оверхеда не даёт, тем более для 2D, а для 3D теперь есть Lightweight Render Pipeline. Другое дело, что раньше у юнити была проблема с размером сборки под мобильники, но сейчас они её практически решили, движок занимает всего 12 мегабайт.
    Ответ написан
    1 комментарий
  • Как вступить в команду разработчиков игр?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Если хотите опыт, то идите нанимайтесь на работу джуниором или стажёром в какую-нибудь студию. Если будете просто со случайными энтузиастами на форумах шашкаться, то в лучшем случае потеряете время, а в худшем -
    можете нахвататься плохих привычек. Не работая в реальной успешной команде, очень сложно понять процесс разработки, все эти мифы про волшебные дизайн-документы, бытующие среди любителей, к реальности имеют мало отношения. В качестве альтернативы можете поучаствовать в геймджемах (Ludum Dare, itch.io), иногда они проходят не только в интернете, но и в городах. Ищите ближайшие игровые студии, все более-менее крупные студии рано или поздно участвуют в геймджемах. А вообще говоря, если вас интересуют не деньги, а опыт, то команда вам не нужна, берите халявную графику в магазине, у Kenney или где-то ещё и просто делайте разную мелочёвку. Если с фантазией туго, то можете попросить тестовое задание у любого работодателя, это заодно вам установит дедлайн.
    Ответ написан
    Комментировать
  • Как сделать чтобы частицы создавали заданную картинку в unity?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Сделайте инспектор для своего класса с кнопкой "обновить пути", специальное меню делать не советую. Вот вам ссылки по теме:
    https://docs.unity3d.com/ScriptReference/Editor.html
    https://docs.unity3d.com/ScriptReference/Editor.On...
    https://docs.unity3d.com/ScriptReference/GUILayout...
    https://docs.unity3d.com/ScriptReference/AssetData...
    Ответ написан
    Комментировать
  • Персонаж в unity вилетает со сцены?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Translate игнорирует коллайдеры, если хотите двигать по физике, то используйте AddForce или MovePosition.
    Ответ написан
    Комментировать
  • Unity(C#) - Почему не работают корутины?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Конкретно в этом случае можно использовать CrossFadeAlpha, но лучше для таких вещей лучше взять твинер.
    Ответ написан
    Комментировать
  • Что изучать дальше в C#?

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

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Это оверхэд профайлера, если его отключите, то всё будет нормально.
    Ответ написан
  • Разработка игры под iOS 2d по типу Марио?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Берите Unity, изучайте документацию, смотрите примеры. Для новичков это сейчас самый дружелюбный движок.
    Ответ написан
    Комментировать