Задать вопрос
  • Стоит ли обращать внимание на предупреждение "shader channels normal and tangent.."?

    @Makkatchen
    все немного проще, там выбор сними с Normal и Tangent шейдеров в параметре "Additional Shader Channels" в настройках Canvas и предупреждение пропадет.
    Ответ написан
    Комментировать
  • Почему низкий фпс при большом количестве CharacterController?

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

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

    Другой вопрос, а будет ли в игре реально тысяча объектов? Это такой стресс-тест? Или это усреднённое значение и реально их может быть и полторы? Я это к тому, что если тысяча не предел, то, возможно, придётся писать что-то ещё более сложное, чем система выше.
    Ответ написан
    2 комментария
  • Что делать если установка win10 зависла на последнем шаге?

    @Drno
    Если Вы ставите НЕ лицензию - лучше ставить версию LTSC

    А так - переустановите, не вводите облачную учетку(зачем она вообще в винде? ) и создайте локальную. там есть это, на экране учетки
    Ответ написан
    3 комментария
  • Что делать если установка win10 зависла на последнем шаге?

    @TheBigBear
    СтарОдмины мы
    Это нормально.
    качаются и ставятся обновления и процесс ну ОЧЕНЬ долгий. Сам несколько раз на этом случайно ловился
    Мой совет:
    При установке Windows 10 не подключайте Интернет и соглашайтесь на ограниченную установку, которая появляется при отсутствии Интернета!
    Только потом, когда появится рабочий стол, подключайте WiFi или провод, подключайте учётку Microsoft и прочие плюшки
    Ответ написан
    2 комментария
  • Как получить переменную аналогичную LOD показателю?

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

    wide_e
    @wide_e
    Начинающий разработчик на C#
    Проверьте, стоил ли целевая частота кадров 60 фпс?
    Application.targetFrameRate = значение;
    Ответ написан
    Комментировать
  • Как сменить заблокированную учётную запись?

    3r1k
    @3r1k
    the quieter you become, the more you hear
    Попробуй так:
    1. Загрузись с любого live linux дистрибутива.
    2. Удали в папке "C:\WINDOWS\system32\config" файл SAM (а лучше переиминуй на sambak)
    3. Из папки "C:\WINDOWS\repair" скопируй файл SAM в исходную папку "C:\WINDOWS\system32\config"

    Вобщем нужно файл "sam" заменить резервным.
    Ответ написан
    Комментировать
  • Как сменить заблокированную учётную запись?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Берется Hiren, пишется на флэшку. Загружается с флэшки редактор паролей (или как он там называется). Сбрасывается пароль. (Редактировать на самом деле он не умеет, но сбросить пароль в нуль - умеет)
    Ответ написан
    1 комментарий
  • Как сменить заблокированную учётную запись?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Перезапустите компьютер, если настройка авто-входа не испортилась - она применится и войдёт.
    Ответ написан
    5 комментариев
  • Как редактировать сетку при нанесённой текстуре?

    @alpha-2007
    Инженер. Компьютерная обработка медиа-информации.
    Манипуляции с сеткой, такие как: рез полигонов, добавление вершин на существующие рёбра и подобные, не производящие перемещений существующих элементов сетки, не деформируют существующую на ней текстуру.
    В остальном, существует правило последовательности производства:
    1. Моделируется.
    2. Текстурируется.
    Аналогия, - сначала скульптура лепится, затем высохшую покрывают лаком. И подправить потом, не нарушая лак, не выходит.
    Ответ написан
    Комментировать
  • Почему модель по разному выглядит в Blender и Unity?

    GavriKos
    @GavriKos Куратор тега Unity
    Потому что скорее всего применился стандартный материал. В общем то гуглить как матриалы настраиваются в юнити.

    Но вообще "одинаково отображалось" - это сложно. Потому что разные рендер-пайплайны. Поэтому материалы настраиваются именно в движке (если там что то сложнее простой текстуры)
    Ответ написан
    3 комментария
  • Как правильно передвигать Rigidbody?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Не на 10%, а на корень из 2, и проблема не в горке, а в движении по диагонали с приращением сразу по двум осям.
    Чтобы не улетало в небо, отрегулируй силу. Плавно и реалистично делают анимацией и подбором индивидуальных параметрах.
    Да и нужен ли тут вообще ригидбоди если самой физикой тут и не пахнет?
    Ответ написан
    3 комментария
  • Как задать гравитацию отдельному телу?

    GavriKos
    @GavriKos Куратор тега Unity
    Комментировать
  • Как задать гравитацию отдельному телу?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Комментировать
  • Как не дать коллайдеру внутри объекта проникнуть в другой коллайдер?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Сам по себе CharacterController имеет внутренний капсуль-коллайдер, который так-то не должен застревать внутри других объектов. Такое может происходить в случае неправильного использования (скрипты). Например, толкать персонажа внутрь коллайдера со слишком большой силой. Сделай вы так со стандартной связкой коллайдера и твёрдого тела, последний бы просто улетел от накопившихся внутренних напряжений. CharacterController же, в свою очередь, не то чтобы сдвинуть, даже телепортировать извне никак нельзя без его отключения.

    Также такой баг теоретически может возникнуть при движении с использованием свойства velocity, словно это rigidbody. Если вы вдруг так делайте - используйте метод Move(Vector3).

    Кроме того, ваш контроллер сам по себе не знаком с гравитацией. Есть также ненулевая вероятность, что стоя краешком на обрыве персонаж всё ещё считает себя стоящим на земле, и у вас не срабатывает код гравитации (если он вообще есть).

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

    Примерно вот так выглядит обычный скрипт персонажа с таким контроллером:
    скрипт

    using UnityEngine;
    
    [RequireComponent(typeof(CharacterController))]
    public class PlayerMove3D : MonoBehaviour {
    
    	CharacterController controller;
    
    	Vector3 input, velocity;
    
    	public float moveSpeed = 10f;
    	public float jumpPower = 10f;
    	public float gravity = 20f;
    
    	public Transform groundCheckPoint;
    	public float groundCheckRadius;
    	public LayerMask groundLayer;
    
    	private void Start() => controller = GetComponent<CharacterController>();
    
    	private void Update() {
    		input.x = Input.GetAxis("Horizontal");
    		input.z = Input.GetAxis("Vertical");
    		input = input.normalized;
    
    		bool grounded = Physics.CheckSphere(groundCheckPoint.position, groundCheckRadius, groundLayer);
    
    		if (grounded && velocity.y < 0)
    			velocity.y = -2f;
    
    		if (Input.GetKeyDown(KeyCode.Space) && grounded) {
    			Jump(Mathf.Sqrt(2f * gravity * jumpPower));
    		}
    	}
    
    	private void FixedUpdate() {
    		Vector3 moveVector = transform.right * input.x + transform.forward * input.z;
    		controller.Move(moveVector * moveSpeed * Time.fixedDeltaTime);
    
    		velocity.y -= gravity * Time.fixedDeltaTime;
    		controller.Move(velocity * Time.fixedDeltaTime);
    	}
    
    	private void OnControllerColliderHit(ControllerColliderHit hit) {
    		// TODO collisions
    	}
    }

    Ответ написан
    1 комментарий
  • Как можно оптимизировать (уменьшить) передачу данных?

    2ord
    @2ord
    Для начала:
    MessagePack, Protobuf и их альтернативы для сериализации данных.
    Дельта-кодирование - для уменьшения разрядности чисел.
    Ответ написан
    Комментировать
  • Как избавиться от медленного сползания (RigidBody)?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Ищи в настройках физики какой-то из threshold отвечает за то, при какой энергии объект засыпает и уже никуда не двигается.
    Ответ написан
    Комментировать
  • Как сделать плавное равномерное передвижение?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Очень похоже на копипасту и не знание главного цикла Юнити.

    Предположим игра показывает 1 FPS, т.е. 1 кард в секунду. Следовательно deltaTime = 1.
    Физика, чтобы не быть ущербной выдерживает 5 циклов в секунду.
    Соответственной за 1 кадр ваш FixedUpdate отработает 5 раз и при скорость 1 юнит подвинет объект на 5 юнитов.

    Если мы проагрейдим видюху и игра заработает с 2 FPS, то deltaTime = 0.5
    Значит физика за 1 секунду подвинет объект на 2.5 юнита.

    В итоге самые нищеброды будут в вашей игре двигаться быстрее ПК-бояр.

    ПС. Действительно как пишут в комментариях, юнити подхачивает, и при вызове FixedUpdate, deltaTime = fixedDeltaTime
    Ответ написан
  • Как сделать плавное равномерное передвижение?

    @rPman
    Ты используешь Vector3.Lerp который считает расположение точки между двумя указанными позициями (у тебя это текущая позиция и та что пришла по сети), третий параметр должен быть при значении 0 и 1 соответственно первой позиции и второй, при значениях больше - позиция будет интерполирована дальше линейно, у тебя же там speed*Time.deltaTime что это значит я полагаю ты сам не понимаешь.

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

    Ты пробовал просто позицию полученную по сети подставлять без интерполяции?

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

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Посмотрите в сторону связки SignalR + Unity
    Очень удобная технология для обмена данными между клиентами, используя промежуточный сервер.
    Если клиент не за NATом, то можно реализовать P2P схему взаимодействия.
    Ответ написан
    Комментировать