• Как сделать смену обьекта при приближении?

    Kentavr16
    @Kentavr16
    long cold winter
    using UnityEngine;
    
    public class TransparencyController : MonoBehaviour
    {
        public Transform playerTransform; // Ссылка на трансформ игрока
        public Transform objectTransform; // Ссылка на трансформ объекта, прозрачность которого мы хотим контролировать
    
        public float maxDistance = 10f; // Максимальное расстояние, при котором объект полностью прозрачен
        public float minDistance = 2f; // Минимальное расстояние, при котором объект полностью непрозрачен
    
        private SpriteRenderer objectRenderer; // Ссылка на компонент SpriteRenderer объекта
    
        void Start()
        {
            // Получаем компонент SpriteRenderer объекта
            objectRenderer = objectTransform.GetComponent<SpriteRenderer>();
        }
    
        void Update()
        {
            // Рассчитываем вектор от игрока к объекту и нормализуем его
            Vector3 playerToObject = objectTransform.position - playerTransform.position;
            float distance = playerToObject.magnitude;
            float normalizedDistance = Mathf.Clamp01((distance - minDistance) / (maxDistance - minDistance));
    
            // Изменяем прозрачность объекта в зависимости от нормализованного расстояния
            Color objectColor = objectRenderer.color;
            objectColor.a = 1f - normalizedDistance; // Инвертируем значение прозрачности
            objectRenderer.color = objectColor;
        }
    }


    Можно создать пустой объект, к нему прикрепить скрипт и задать в полях ссылки на объекты.

    Что нужно поучить - базу игрового движка (здесь в частности использование трансформа игровых объектов), почитать про векторы в юнити. Почитать про нормализованные векторы и векторную математику - крайне удобная практика. Ну и практика, практика и еще раз практика.

    П.С. - при ответе использовал чатГПТ. Проблема в том что не зная основ юнити невозможно даже четко сделать запрос к ИИ. Так что удачи в обучении.
    Скрипт проверен и рабочий.
    Ответ написан
    Комментировать
  • Какие минимальные характеристики ноутбука для работы в Unity?

    Kentavr16
    @Kentavr16
    long cold winter
    Для нетребовательных проектов:
    1) вполне подойдет и 5, при возможности на вырост можно смотреть старшие модели.
    2) современные встройки подойдут, если не планируешь работать со сложным 3Д, рендером его в катсцены и т.д. Если сомневаешься, предпочтительна дискретки. Для простых проектов встройки хватит.
    3) для простого проекта 16 за глаза. Оперативная память не станет узким местом проекта. Чисто для удобства работы я бы лучше взял быстрые 16 чем посредстсвенные 32.
    Ответ написан
    1 комментарий
  • Как в результат substring вывести только число?

    Kentavr16
    @Kentavr16
    long cold winter
    let htmlString =  '<a href="https://site/ua-search/page-4?search=футболка">4</a>';
    let content = htmlString.replace(/<a.*?>(.*?)<\/a>/g, "$1");
    console.log(content);//4


    ЧатГПТ услужливо написал регулярку.
    Ответ написан
    1 комментарий
  • Персонаж не прыгает в unity3D! Почему?

    Kentavr16
    @Kentavr16
    long cold winter
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    
    {
        public float speed = 10f;
        public CharacterController controller;
        public Transform groundcheck;
        public float gravity;
        public LayerMask groundMask;
        Vector3 velocity;
        public bool isgrounded;
        public float groundDistance = 0.4f;
        public float jumpHeight = 3f;
    
        void Update()
        {
            isgrounded = Physics.CheckSphere(groundcheck.position, groundDistance, groundMask);
            if (isgrounded && velocity.y < 0)
            {
                velocity.y = -2f;
            }
    
            float x = Input.GetAxis("Horizontal");
            float z = Input.GetAxis("Vertical");
    
            Vector3 move = transform.right * x + transform.forward * z;
            controller.Move(move * speed * Time.deltaTime);
    
            velocity.y += gravity * Time.deltaTime;
            controller.Move(velocity * Time.deltaTime);
    
            if (Input.GetButtonDown("Jump") && isgrounded)
            {
                velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
            }
    
        }
    }

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

    Kentavr16
    @Kentavr16
    long cold winter
    уважаемый Киану, хочу пожелать вам удачи в последующих съемках и спасибо за пожелания. По делу - если мне нужно получить ссылку на игровой объект в процедурно генерируемом экземпляре префаба, я создаю публичное поле в родителе(!) который генерирует префаб, и уже при генерации префаба передаю нужные данные. Вот наглядный пример -
    //ссылка на игровой обьект
     public GameObject DigUiPanel;
    **** остальной код***
    //генерирую экземпляр 
     GameObject Layer = Instantiate(LayerPrefab, LayersStartPos.transform.position + layerCreatingDirection * i * offset, Quaternion.identity);
     Layer.transform.rotation = Quaternion.Euler(0, 0, 45);
     DigUI DigUIScript = Layer.GetComponentInChildren<DigUI>();
    //задаю созданному экземпляру ссылку на реальный игровой объект
     DigUIScript.DigUIPanel = DigUiPanel;

    Надеюсь что я правильно понял суть твоего вопроса.
    П.С. - главное помнить что Instantiate возвращает ссылку на новосозданный объект, который ты можешь свободно менять.
    Ответ написан
    1 комментарий
  • Почему не удается навесить слушатель на клик?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Проблема была в том, что я с помощью команды Debug.unityLogger.logEnabled = true; в одном из скриптов глушил спам от Adaptive Performance модуля. Убрал строку - лог работает. Видимо эта команда отсеивает некоторые логи, такие как вызываемые в рантайме. Нужно читать доки.
    Ответ написан
    Комментировать
  • Как создать полностью черную сцену в юнити 3д?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Все дело в запеченном глобальном освещении. в window->rendering->lighting снять галочку с baked global illumination и нажать generate lighting.
    Ответ написан
    Комментировать
  • Как "правильно" моделировать мелкие детали на объектах?

    Kentavr16
    @Kentavr16
    long cold winter
    По логике следует избегать ненужных полигонов - меньше нагрузка на ПК игрока. Во взятом тобой примере нет большой разницы, но если таких объектов на сцене сотни, то можно получить ощутимую разницу в нагрузке. Вот если твоя бочка должна распадаться при взрыве к примеру, то ее деление оправдано. Но просто так добавлять грани - зачем?
    Ответ написан
    Комментировать
  • Почему не навешиваются стили на root?

    Kentavr16
    @Kentavr16
    long cold winter
    Можешь стилизовать index.html - инлайново или в теге скрипт должно сработать. Но стоит понимать что корневой компонент приложения - это не про стили и отображение. Это про точку рендеринга, скорее логику. Потому советую его вообще не трогать. Точно так же ширину в сто процентов можно задать основному компоненту, в который ты собираешь приложение (App)
    Ответ написан
  • Как сделать раскрытие подменю js?

    Kentavr16
    @Kentavr16
    long cold winter
    menuLink.addEventListener("click", function (e) {
                    e.stopPropagation(); // замени preventDefault на это
                    menuLink.classList.toggle("_active");
                });

    Код жесть конечно.
    Помогло - отметь решением.
    Ответ написан
  • Как делать такие сложные анимации?

    Kentavr16
    @Kentavr16
    long cold winter
    Два основных варианта - animation-timeline или скрипты. Из минусов анимейшн-таймлайн - относительно слабая поддержка браузерами. Когда я смотрел последний раз было около 65 процентов. Мозила не поддерживает принципиально. Скрипты - это множество библиотек, вот пара примеров. Можно еще руками написать, если знания позволяют.
    Ответ написан
    Комментировать
  • Как связаны между собой сервер node.js и фронтенд react?

    Kentavr16
    @Kentavr16
    long cold winter
    правильно ли я понимаю, что на этапе продакшена мы должны подключаться только к одному порту, на котором находится сервер, а он отправит html, css, js файлы при первом запросе на главную страницу а в дальнейшем будет отправлять JSON?
    В зависимости от настроек сервера и архитектуры твоего проекта. Экспресс может как отдавать хтмл/css,так и служить для обмена данными бека с фронтом(апи). Во втором случае за раздачу хтмл может отвечать какой-либо популярный веб-сервер, nginx/apache.
    при использовании npm run build я получаю папку build, где много css и js файлов. Как эту папку надо связать с node.js

    Никак. На стадии билда участие ноды в проекте заканчивается (в случае с фронтом, естественно. Если у тебя сам сервер, бекенд на ноде, то там нужно запускать это дело на хосте). Ты размещаешь свой код на веб-сервере, который его раздает в дальнейшем клиентам.
    Допустим мы при первом запросе на сервер отправляем HTML файл. Но как клиент получит нужный ему css и js файл из кучи в папке build.
    все как в обычном html. Есть точка входа в виде хтмл-файла, к которой твой билдер уже привязал все стили/скрипты. Все это отдается клиенту.
    Это базовый сценарий. Есть другие способы, такие как SSR например. Но это уже другая история.
    Ответ написан
    Комментировать
  • Локальная дата и время?

    Kentavr16
    @Kentavr16
    long cold winter
    Я состряпал для этого функцию. Можно настроить формат как тебе удобно.

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

    Kentavr16
    @Kentavr16
    long cold winter
    ответ здесь. Даже с примером по твоему вопросу.
    Проблема в том что ты пытаешься получить асинхронное значение в синхронном коде. Это не будет работать. Почитай про промисы и колбеки в контексте асинхронности джаваскрипт. Будет куда полезнее за строчку кода в ответе на твой вопрос.
    Ответ написан
    Комментировать
  • Задать первому input checked?

    Kentavr16
    @Kentavr16
    long cold winter
    Написать checked в конце хтмл каждого инпута
    Ответ написан
  • Какая причина неправильного отображения разрешения на втором мониторе?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Сам спросил - сам ответил. Продолжая эксперименты, обнаружил что при плохо работающем дисплее в меню "частота обновления" появляется пункт 60,020 Гц(по умолчанию 60 Гц). При выборе этой опции изображение приходит в норму, а из менюшки выбора частоты обновления экрана опция 60Гц просто исчезает. Вместо нее становится 60,020 Гц. И все работает - ровно до тех пор пока не покрутить изображение. Снова устанавливается 60Гц, снова полосы по бокам. Выглядит как баг то ли видеокарты, то ли операционки, то ли их сочетания.
    Ответ написан
    1 комментарий
  • Как подождать, пока будет подключена База данных?

    Kentavr16
    @Kentavr16
    long cold winter
    можно использовать что-то вроде
    import express from "express";
    
    const app = express();
    const ip = "localhost";
    const port = 4000;
    
    app.get("/", (req, res) => {
      res.send("some response");
    });
    
    function startServer() {
      app.listen(port, ip, () => {
        console.log(`Сервер запущен на адресе ${ip} и порту ${port}`);
      });
    }
    
    async function connectToDatabase() {
      return new Promise((resolve, reject) => {
        setTimeout(() => resolve("ok"), 2000);
      });
    }
    
    connectToDatabase()
      .then(() => {
        startServer();
        console.log("Успешное подключение к базе данных.");
      })
      .catch((err) => {
        console.error("Не удалось подключиться к базе данных:", err);
      });

    где для коннекта к бд использовать промис
    export function connectToDatabase() {
        return new Promise((resolve, reject) => {
            pool.connect((err, client, release) => {
                if (err) {
                    console.error('Ошибка в запросе к БД (1)', err.stack);
                    release();
                    reject(err);
                    return;
                }
    
                client.query('SELECT NOW()', (err, result) => {
                    release();
                    if (err) {
                        console.error('Ошибка в запросе к БД (2)', err.stack);
                        reject(err);
                        return;
                    }
    
                    console.log('\x1b[34m%s\x1b[0m', `PostgreSQL is running (${result.rows[0].now})`);
                    resolve(pool);
                });
            });
        });
    }

    Ну и пул объявить не забыть. Хз, с обычным промисом который в первом примере, работает окей, почему с подключением к бд будет иначе? Для эксперимента ставить pg неохота. Вполне возможно что я что-то проглядел, поправьте, с серверами на ноде давно не имел дела.
    Ответ написан
    Комментировать
  • Как хранить файлы в связке react -express mongo?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Собственно в бд и хранить. На момент написания вопроса не понимал основ БД.
    Ответ написан
    Комментировать
  • Как заставить реакт правильно обновить компоненты?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    вытяжка из комментария -
    Best practice - спрятать токен в httpOnly куке, чтоб js не мог его прочесть и авторизовываться просто через куку в хеадере запроса.
    Можно вот тут почитать, к примеру https://habr.com/ru/company/ruvds/blog/512866/ (обратите внимание на комментарии)
    В любом случае Вам необходимо завести через реакт контекст (к примеру) стор, доступный в любом месте приложения. Оборачиваете всё приложение в контекст провайдер, на первой странице (или при загрузке приложения) запрашиваете какие-либо данные с бэка (данные пользователя например, если авторизация через куку, либо получаете jwt-токен в ответ на ввод логина) сохраняете в переменную в контексте (isAuth например), а в целевом компоненте навигации используете эту переменную как условие выводить одно или другое. Можно вызывать useEffect(() => {какой-то код},[имя переменной]), который будет дергаться только когда "имя переменной" обновится...
    Ответ написан
    Комментировать
  • Как перерендерить компонент при добавлении токена в localStorage?

    Kentavr16
    @Kentavr16 Автор вопроса
    long cold winter
    Отвечу сам себе - используя параметры УРЛ, контекст или редакс.
    Ответ написан
    Комментировать