Задать вопрос
Ответы пользователя по тегу Unity
  • Как загружать изображения/текст из папки с билдом игры?

    @SWA512
    Gamedev
    using System.IO;
    using UnityEngine;
    using UnityEngine.UI; // Если вы хотите отображать изображение на UI.
    
    public class ImageLoader : MonoBehaviour
    {
        public string folderName = "Sprites"; // Название вашей папки
        public string imageNamePrefix = "spr_"; // Префикс для названий изображений
        public int numberOfImagesToLoad = 2; // Сколько изображений вы хотите загрузить
    
        // Пример использования для отображения на Canvas
        public Image displayImage; // Присвойте это в инспекторе, если используете UI Image
    
        void Start()
        {
            LoadImagesFromFolder();
        }
    
        void LoadImagesFromFolder()
        {
            // Получаем путь к папке, где находится исполняемый файл игры
            string gamePath = Application.dataPath;
    
            // В билде Application.dataPath указывает на папку с данными (.exe_Data)
            // Нам нужно подняться на один уровень, чтобы найти папку рядом с .exe
            string parentFolder = Path.GetDirectoryName(gamePath);
    
            // Объединяем путь к родительской папке с названием вашей папки с картинками
            string fullPathToSpritesFolder = Path.Combine(parentFolder, folderName);
    
            if (!Directory.Exists(fullPathToSpritesFolder))
            {
                Debug.LogError("Папка '" + folderName + "' не найдена по пути: " + fullPathToSpritesFolder);
                return;
            }
    
            for (int i = 0; i < numberOfImagesToLoad; i++)
            {
                // Формируем полное имя файла (например, spr_0.png)
                string imageFileName = imageNamePrefix + i + ".png"; // или .jpg
                string fullImagePath = Path.Combine(fullPathToSpritesFolder, imageFileName);
    
                if (File.Exists(fullImagePath))
                {
                    byte[] imageData = File.ReadAllBytes(fullImagePath);
                    Texture2D texture = new Texture2D(2, 2); // Размеры будут скорректированы при загрузке
    
                    // Загружаем изображение в Texture2D
                    if (texture.LoadImage(imageData))
                    {
                        Debug.Log("Изображение " + imageFileName + " успешно загружено!");
    
                        // Пример: отображение первого загруженного изображения на UI Image
                        if (i == 0 && displayImage != null)
                        {
                            Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
                            displayImage.sprite = sprite;
                        }
                        // Можете сохранить texture в список или использовать по мере необходимости
                    }
                    else
                    {
                        Debug.LogError("Не удалось загрузить изображение: " + fullImagePath);
                    }
                }
                else
                {
                    Debug.LogWarning("Изображение не найдено: " + fullImagePath);
                }
            }
        }
    }
    Ответ написан
  • Проблема с unity?

    @SWA512
    Gamedev
    Создать пустой проект на свежей версии. В него влить свой старый проект.
    Ответ написан
    Комментировать
  • Есть ли годный чертеж для z координаты в vertices?

    @SWA512
    Gamedev
    683009c224567228605730.jpeg
    683009c62babc274781528.png
    Ответ написан
    Комментировать
  • Как сделать, чтобы камера не выходила за границу?

    @SWA512
    Gamedev
    private float movementSpeed = 2f;
    public Rect limits = new Rect(0,0,20,20);
    Vector2 newPosV2 = new Vector2();
    Vector3 newPosV3 = new Vector3();
    void Update1()
    {
    	float horizontalInput = Input.GetAxis("Horizontal");
    	float verticalInput = Input.GetAxis("Vertical");
    	newPosV3 = transform.position - new Vector3(horizontalInput * movementSpeed * Time.deltaTime, 0, 
                          verticalInput * movementSpeed * Time.deltaTime);
    	newPosV2.Set(newPosV3.x, newPosV3.z);
    	if (limits.Contains(newPosV2)) transform.position = newPosV3;
    }
    Ответ написан
    Комментировать
  • Почему Decals не отображаются в билде, но в редакторе отображаются?

    @SWA512
    Gamedev
    Когда отключил галку "Mobile", в Quality Levels (Project Settings) заработали декали в билде.
    67fb6d419248c741904996.jpeg
    67fb6d49450df524581069.jpeg
    Ответ написан
  • Почему когда я кидаю луч и нахожусь не внутри другого коллайдера, то все нормально, а когда изнутри, то он его не видит?

    @SWA512
    Gamedev
    Physics.Raycast не видит коллайдер если стартовая точка луча находится внутри него. Попробуй Physics.SphereCastAll(). Она не дает точек пересечения и дистанцию (Vector.zero), но этот коллайдер должен быть первым в массиве.
    Ответ написан
  • Как можно наложить 1 материал поверх других?

    @SWA512
    Gamedev
    В URP проекте делаем так:
    - добавляем пользовательский глобальный Layer (DECAL)
    - в Universal Renderer Data создаем Renderer Feature, назначаем там прозрачный материал (Red) и назначаем Layer "DECAL"
    - целевому объекту ставим Layer "DECAL"
    67f624dab5cda927193241.jpeg
    67f624e592923561280392.jpeg

    Второй простой вариант:
    - добавляем похожий материал, выставляем ему красное смещение цвета текстуры и/или красную подсветку
    - в момент когда нужно наложить, подменяем обычный материал на второй с красным (в MeshRenderer)
    Ответ написан
  • Как сделать чтобы Decal отображался только для определенного объекта?

    @SWA512
    Gamedev
    - В Render Feature Decal включить Use Rendering Layers.
    - у декали Rendering Layers выставить только Light Layer 1
    - у куба дополнительно включить Light Layer 1
    67f622166570a720890372.jpeg
    Ответ написан
    Комментировать
  • Как в 3D-моделях можно сделать кости для анимации?

    @SWA512
    Gamedev
    Для 3д модели анимации создавать не нужно. Создав на кости коллайдер и твердое тело, можно бросить их в физической симуляции на обычный бокс с коллайдером. Немного поскакав они выпадут случайными сторонами, естественно им нужно придать начальный импульс и случайное вращение. Останется узнать какая грань кости смотрит вверх и выдать число.
    Ответ написан
  • Можно ли исполнять функции вне скриптов?

    @SWA512
    Gamedev
    Можно создать кучу разных анимаций для действий. Единственный скрипт будет выбирать имя нужной анимации и соответственно запускать необходимое действие.

    В AnimationController доступно дерево управления действиями, можно из мелких анимаций создавать сложные последовательности и множество действий.
    Ответ написан
    Комментировать
  • Unity 3D как добавить текстуры с разных сторон?

    @SWA512
    Gamedev
    - дать треугольникам на меше разный ID материала (в редакторе) и назначить три разных материала в Unity
    - разделить 3 текстуры на 3 направления нормалей в ShaderGraph, XYZ. (сложно, сходу не нашел примеров, грубо говоря вес оси без знака в нормали это и есть вес текстуры в результирующем цвете.

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

    @SWA512
    Gamedev
    Есть у Photon-а бесплатный план разработчикам на 20 одновременных игроков.
    При запуске одного приложения, можно получить 100 одновременных игроков.
    Всё что выше по нагрузке надо платить.
    https://www.photonengine.com/fusion/pricing
    Ответ написан
    Комментировать
  • Как сделать, чтобы при смене сцены аудио продолжало проигрываться?

    @SWA512
    Gamedev
    Можно к сцене с музыкальным источником подгрузить игровую сцену:
    SceneManager.LoadScene("YourScene", LoadSceneMode.Additive);

    Затем по мере надобности, выгружать и загружать другие, не трогая музыкальную сцену.
    Ответ написан
    Комментировать
  • Unity как исправить баг с прыжком?

    @SWA512
    Gamedev
    rb.MovePosition() явно накладывается на импульс от прыжка. Убрать воздействие Move() во время прыжка. Или перевести Move() так же на добавление импульса rb.AddForce(Vector3.up * movement, ForceMode.Impulse); [естественно прыгать он будет выше]
    Ответ написан
  • Как добавлять нейросети в игры Unity/UE5/GODOT?

    @SWA512
    Gamedev
    В Unity сейчас активно развивается фреймворк Sentis, вот примеры с моделями.
    Для LLM моделей например есть LLamaSharp.
    Если вам нужны собственные решения с обучением, то у Майкрософт есть статья по созданию модели классификатора изображений.
    Ответ написан
    Комментировать
  • Unity shadr graph - как наложить на модельку текстуру?

    @SWA512
    Gamedev
    Не уверен что понял цель вопроса. Может так?6794e95ea9623643695185.jpeg
    Ответ написан
    Комментировать
  • Как заставить двигаться объект в сторону курсора?

    @SWA512
    Gamedev
    Код примерный, не рабочий:
    using UnityEngine;
    
    public class MoveTowardsCursorCoroutine : MonoBehaviour
    {
        public float speed = 5f;
        public float targetDistance = 1f;
    
        private Coroutine moveCoroutine;
    
        IEnumerator MoveToTarget(Vector3 target)
        {
            while (true)
            {
                Vector3 direction = (target - transform.position).normalized;
                float distance = Vector3.Distance(transform.position, target);
    
                // Если достигли цели, начинаем двигаться по инерции
                if (distance <= targetDistance)
                {
                    // Задаем новую цель немного впереди текущей позиции
                    target = transform.position + direction * 10f; // Примерная дистанция инерции
                }
    
                // Плавное перемещение
                transform.position += direction * speed * Time.deltaTime;
    
                yield return null;
            }
        }
    
        void Update()
        {
            // Получаем позицию курсора в мировых координатах
            Vector3 mousePosition = Input.mousePosition;
            mousePosition = Camera.main.ScreenToWorldPoint(mousePosition);
            mousePosition.z = transform.position.z;
    
            // Если корутина не запущена, запускаем новую
            if (moveCoroutine == null)
            {
                moveCoroutine = StartCoroutine(MoveToTarget(mousePosition));
            }
        }
    }
    Ответ написан
    Комментировать
  • Как в unity расположить несколько textmeshpro друг за другом так чтобы они автоматически сдвигались при изменении текста?

    @SWA512
    Gamedev
    1) Единый текст так и будет себя вести. Склеить строки в одну и присвоить свойству text.
    2) Расположить куски текста внутри Panel плюс компонент: VerticalLayout/HorizontalLayout. Управление шириной/высотой наследников отключить.
    Ответ написан
    Комментировать
  • Стоит ли настраивать освещение для 3д модельки персонажа в блендере, если я потом буду использовать его в игровом движке?

    @SWA512
    Gamedev
    Если в движке есть освещение, то ваша модель будет с темными и засвеченными зонами.

    Запекать в текстуру можно только GI и Ambience. И то если в движке оно есть, то будут артефакты.
    Ответ написан
    Комментировать
  • Как сделали свет от лампы?

    @SWA512
    Gamedev
    Полно бесплатных плугинов, например АУРА - https://github.com/Rockwall33/Aura

    Гугл
    Ответ написан
    Комментировать