Ответы пользователя по тегу Unity
  • Материал розовый, при universal render pipeline, исправить?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    У вас сам пайплайн настроен?
    Edit >> Project Settings >> Graphics
    Там в самом верху пустое поле для префаба пайплайна. Если там "None ...", то почитайте тут что там делать - https://docs.unity3d.com/Packages/com.unity.render....
    Если там всё ок, попробуйте поменять шейдер материала со Standart на URP/Lit
    Не помогло - пишите в коменты, подумаем ещё.
    Ответ написан
  • Как реализовать механику как в игре Draw and run?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    То, что делает игрок - просто рисующий жест.

    Что делает игра.
    По траектории ввода составить массив точек при помощи проекции UI координат на мировые (функция). Затем скрипт, зная о минимальной дистанции спавна объектов (установленную вами заранее), разбивает кривую на отрезки такой длины (список точек). Далее в точках спавнит префабы.
    Ответ написан
    Комментировать
  • Почему анимация с mixamo криво работает в unity?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Так происходит, потому что так записана анимация. Как пофиксить
    1) Положить объект с анимацией в другой, который понемногу опускать скриптом или анимацией дополнительной
    2) Руками переделать анимацию через Animation вкладку
    3) Использовать Animations Rigging
    4) Взять другую
    Ответ написан
    4 комментария
  • Какие есть способы оптимизации Post Processing для телефона?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    К сожалению, процессинг (да и URP в целом) - это не про производительность. Тут есть всего два пути - лёгкий, то есть просто отключить и придумать что-то другое и геморный - ковыряться руками и всё оптимизировать под конкретно вашу игру для телефона. Или, хотя бы, под мобильную платформу.
    Это довольно трудозатратная задача, поэтому имеет смысл посмотреть в сторону готовых решений. Я не пробовал бесплатные варианты, так что хз что там норм, но вот то, что использовал я:
    https://assetstore.unity.com/packages/vfx/shaders/...
    Ответ написан
    Комментировать
  • Как реализовать перемещение на определенное расстояние от одной точки к другой?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Вам отлично подходит MoveTowards. Работает он следующим образом:
    1) Сначала он берёт первый аргумент - текущее положение объекта.
    2) Затем берёт второй - место, куда объект стремится в итоге попасть.
    3) Прокладывает путь между этими точками, после чего отмеряет на этом пути расстояние, равной третьей аргументе - шагу.
    4) И возвращает местоположение, куда вам нужно переместить объект.
    Плюс этого метода в том, что вы никогда не пройдёте дальше цели. Выглядеть это будет как-то так:

    using UnityEngine;
    
    public class ClickMoveExample : MonoBehaviour {
    
    	public Transform target;
    	public float moveDelta = 0.1f;
    
    	void Update() {
    		if (Input.GetMouseButtonDown(0))
    			transform.position = Vector3.MoveTowards(transform.position, target.position, moveDelta);
    	}
    }
    Ответ написан
  • Почему не отрабатывает IAP в мобильном приложении Unity?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Данный пакет на самом деле просто перенаправляет ваши запросы на указанный сервис и его ответы вам, почти никак на них не влияя. Запуск OnInitialized является следствием получения определённого сообщения извне. В случае с Android проблема кроется в самом устройстве, а точнее в активной сессии Google.
    Проверьте статус входа в аккаунт, нет ли там каких предупреждений? Плюс может быть ещё такое, что он не сработает для сырого собранного приложения, а не скачанного с маркета. Также по опыту скажу, что IAP вообще не запустится ни под каким соусом, если ваше приложение система пометила как небезопасное. Проверьте ещё почту, нет ли там каких служебных писем от гугла?

    UPD. вспомнил ещё одну проблему, IStoreListener должен создаваться только один раз за сессию приложения. Типа вы, например, запустили его на сцене 1, при переходе на сцену 2 оно удалилось и пытается запуститься на сцене 2, но сервис это уже не схавает. Попробуйте пометить его как DontDestroyOnLoad(gameObject), может поможет.
    Ответ написан
    Комментировать
  • Как можно зафиксировать позицию дочернего объекта после проигрывания анимации?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Либо с помощью пустой ноды, либо разделив анимацию на слои (в аниматоре слева раздел Layers), либо использовать скрипт вместо анимации. Не видя иерархии и вообще самой анимации точнее не могу сказать, что-то из этого должно подойти
    Ответ написан
    2 комментария
  • Хочу купить ассет, но пугает вот это. Кто сталкивался с этим?

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

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

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Если вам просто нужно ровно двигать, воспользуйтесь инструментом Move Tool в связке с зажатым Ctrl. Свойства такого движения можно посмотреть и поправить в Edit » Grid and Snap Settings.

    По поводу самого тайлмапа, схема там такая:
    1) Родительский объект с компонентой Grid.
    2) Дочерние объекты с компонентами Tilemap + Tilemap Renderer, дальнейшая работа будет происходить внутри именно этих объектов (по иерархии).
    3) Во вкладке Window » 2D » Tile Palette нужно создать палитру и перетягивать на сцену спрайты оттуда (также попробуйте возможность делать это не поштучно, путём их массового выделения), а не из вкладки Project.
    Если вы всё так и делали, проверьте настройки. При создании палитры вы могли незнаючи что-то тут поменять.
    63d8c5aa9d785789778703.png
    Если проблема останется, напишите в комментарии
    Ответ написан
    Комментировать
  • Как сделать 2д освещение?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Если бы такое задание дали мне, я бы в фотошопе маску полупрозрачную сделал. Если оно анимировано должно быть, то и маску тоже можно анимировать. А вообще, указанный вами пакет с такой задачей должен справляться, типа можно разделить стену с окном на фрагменты и настроить для некоторых из них тени.
    Если всё не то, то можно написать шейдер. Подсказки можете найти в этой статье https://habr.com/ru/post/425989/
    Ответ написан
    Комментировать
  • Как завершить игру?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Работа с плеером:
    https://stackoverflow.com/questions/36738981/how-d...

    Работа с вкладкой:
    https://answers.unity.com/questions/1576906/close-...

    Плюс всегда можно вызвать:
    Application.OpenURL("about:blank");
    Ответ написан
  • Как реализовать дурака онлайн?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Структуру описали выше, а насчёт самой логики. Разделите намерение сделать ход от реакции. Получив от игрока его намерение (нажатие, свайп и т.д.), вы не делаете изменений на клиенте, а шлёте запрос на сервер, а сервер уже реагирует (проверяет чей ход и рассылает обновления всем клиентам сессии).
    Ответ написан
    Комментировать
  • Как получить переменную аналогичную LOD показателю?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Ответом на ваш вопрос будет функция, принимающая из меша модели массив вершин и для каждой пробивающая координаты на экране в WorldToScreenPoint() - отрицательные = за камерой. Но, как правило, объекты не усекаются на части, видимые и невидимые камерой, поэтому достаточно просто факта наличия на экране.
    Поэтому, если вы не ставите перед собой задачу немного задолбаться, а просто узнать, рендерится объект или нет, то вот эта замечательная функция срабатывает только когда объект надо отрисовать на экране:
    https://docs.unity3d.com/ScriptReference/MonoBehav...
    Ответ написан
    1 комментарий
  • Не могу понять почему ошибка cs1003?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    В следующий раз, пожалуйста, оформите код при помощи соответствующего тега и приведите текст ошибки. Пока что могу сказать, что вот в этой строке содержится лишняя точка с запятой:
    public class lobby : MonoBehaviourPunCallbacks; {
    Ответ написан
    Комментировать
  • Как узнать минимальные требования для собственной игры?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Действительно лучший способ определить спецификации - эмпирический на большой выборке разных устройств. Коими, конечно же, одиночные разработчики не обладают. Но это не значит, что сделать тут ничего нельзя.

    Вы можете начать со сравнительного анализа. Из предложенных мной способов он самый простой и быстрый. Достаточно отыскать несколько похожих на вашу игр и провести некое винзоризованное среднее значение критического минимума и оптимального максимума. Не обязательно искать именно те игры, что написаны на Unity, но будет больше похоже на правду, если авторами игр будут небольшие студии, или независимые разработчики.

    Если вы захотите уточнить вашу гипотезу, можете продолжить ручной проверкой.

    1. Место на диске
    Просто посмотрите, сколько весит папка с собранной игрой.

    2. Количество ОЗУ
    Оценить максимум вы можете прямо в диспетчере задач, только проводите оценку не посреди главного меню, а в процессе максимума интенсивности игрового процесса. Также можете создать несколько виртуальных машин на вашем компьютере с разной конфигурацией и по очереди прогнать по ним игру.

    3. Видеокарта
    Оценить характеристики видео вы можете по загруженности игрой активными объектами и средствами, влияющими на отрисовку - шейдерам, освещению (трассировке лучей, отражениям и т.д.), постпроцессингу и т.д.. Тут зависимость простая - чем больше эффектов, тем круче видеокарта нужна, чтобы каждое обновление экрана всё это дело перерисовывать. Также почитайте про шейдерные модели. Например, та же 4 версия HLSL требует минимум DirectX 10 версии. Также грубо оценить видеокарту вы можете по тому же диспетчеру задач, сравнив значение столбца GPU во время интенсивной игры со значением мощности видеокарты.

    4. Процессор
    Оценка процессора самая сложная, т.к. в неё постоянно вмешиваются другие процессы. В том же диспетчере задач вы можете посмотреть, как сейчас ведёт себя процессор, плюс можете попробовать занизить его тактовую частоту или выделить игре больше/меньше ядер, чтобы посмотреть как она себя поведёт.

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

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

    Как видите, данный процесс весьма трудоёмкий, а местами требующий специфических знаний. Потому порой проще воспользоваться услугами тестировщиков, или заглянуть на реддит. Например, в r/playmygame или в r/playtesters.
    Ответ написан
    2 комментария
  • Ошибка с поворотом камеры в скрипте?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Занятный способ использовать агента. Обычно для движения используют Transform, Rigidbody, CharacterController или WheelCollider. Не видя проекта могу лишь сказать, что вы поместили камеру по иерархии внутрь игрока. И когда игрок поворачивается, камера поворачивается вместе с ним. Обычно для управления камерой пишут отдельный скрипт, что я вам и советую сделать.
    Ответ написан
    Комментировать
  • Как разделить 3D модель на конечности?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Вроде были дополнения для работы с мешами в юнити, но они $15++ стоят, и имеют функционал далёкий от того же бесплатного блендера, который предлагаю вам использовать. Также в блендере легче и приятнее анимировать модели, ведь можно управлять такими вещами, как веса костей, чтобы, например, при подъёме задней ноги не деформировалась геометрия крупа или хвоста.
    Ответ написан
    3 комментария
  • Как сохранить положение слайдера после перезагрузки игры UNITY?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    При запуске сцены загрузите значение из базы в слайдер.
    Ответ написан
    Комментировать
  • Как сделать проверку на землю под ногами(Unity 2d)?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Способов проверить наличие земли много, вопрос в конкретной игре. Самый простой - проверить столкновение коллайдеров.
    иллюстрация1
    63d2302016761335903485.png

    Стандартные скрипты сверху имеют сигнатуру вида
    public class [название] : MonoBehaviour.
    MonoBehaviour - это специальный скрипт, дающий возможность нашему использовать некоторые стандартные методы, например:
    void OnCollisionEnter2D(Collision2D c) {
    	Debug.Log(c.gameObject.name); // выводит в консоль название объекта, с которым владелец скрипта столкнулся
    }

    Минус подхода в том, что ваш объект будет считать столкновениями в том числе и удары головой о потолок, что не очень сходится с задачей. В таком случае поступают иначе - создают в иерархии персонажа пустую точку, затем вокруг неё в коде ищут определённые поверхности. Выглядит обычно как-то так или так:
    иллюстрация2
    63d231f8302fc690248078.png

    Код же будет выглядеть как-то так:
    код
    // поля класса
    public Transform groundCheckPoint;
    public float range;
    public LayerMask groundLayers;
    
    // сама инструкция
    bool isGrounded = Physics2D.OverlapCircle(groundCheckPoint.position, range, groundLayers);
    
    // в вашем коде имеет смысл как-то так сделать
    void Jump() {
    	if(Physics2D.OverlapCircle(groundCheckPoint.position, range, groundLayers))
    		rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
    }


    Пара непрошенных советов для начинающему коллеге по цеху

    Инструкции вида
    [SerializeField] public float speed = 10f;
    [SerializeField] public float jumpForce = 14f;

    Не имеют смысла, так как оператор доступности public и так делает вашу переменную видимой в инспекторе, поэтому использование атрибута избыточно. Хуже не делает, просто бессмысленно. Атрибуты больше нужны, чтобы задать специфическое поведение для удобства редактирования игры. Например, вы не хотите давать другим классам прямой доступ к изменению скорости бега и силы прыжка персонажа - ставите приват, но чтобы в редакторе можно было потестить и выставить нужные значения (вы же не экстрасенс, чтобы с первого раза угадать), добавляют атрибут и получается:
    [SerializeField] private float speed = 10f;
    [SerializeField] private float jumpForce = 14f;


    Второе уже относится больше к здравому смыслу - все запросы ввода лучше делать внутри Update, а обеспечением их доступности для метода FixedUpdate должна заниматься внутренняя переменная класса, типа:
    private float xInput;
    
    private void Update() {
    	xInput = Input.GetAxis("Horizontal");
    	// code
    }
    
    private void FixedUpdate() {
    	rb.velocity = new Vector2(xInput * speed, rb.velocity.y);
    }

    Ответ написан
    Комментировать
  • Не логинится в юнити хаб вообще, даже ничего не открывается, просто не реагирует, что делать?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Чтобы решить проблему, нужно понимать, как именно юнити делает авторизацию.

    Unity Hub посылает в браузер запрос, дальше браузер его обрабатывает, как если вы бы через браузер входили, но вместо демонстрации интерфейса успешного входа, он посылает ответ обратно в хаб.

    Так как у вас при нажатии на кнопку не открывается браузер, значит что-то блокирует этот запрос. Это может быть как антивирус, так и фаерволл вашей ОС. Бывает ещё такое, что сам хаб не посылает запрос вообще, тогда надо его полностью выключить через диспетчер задач - остановить все процессы/снять все задачи, в названии которых как-то упоминается Unity, а затем перезайти и попробовать ещё раз.

    Также может быть такое, что вы в самом браузере что-то настроили не так. Если у вас есть несколько браузеров, типа Chrome/Edge, можете залогиниться на сайте через другой, временно сделать его браузером по-умолчанию и попробовать снова в хабе зайти.
    Ответ написан
    Комментировать