Задать вопрос
  • Материал розовый, при universal render pipeline, исправить?

    SkyLight9, у вас слетели текстуры.
    А вообще материал, который использовался изначально, видимо не поддерживается вашим пайплайном. Попробуйте создать новый URP проект или загуглите видео как перевести проект на URP и загрузите перса туда заново.
    Написано
  • Как войти в Unity Hub?

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

    Также проверьте антивирус и нет ли случаем сообщений от самой винды.
  • Есть ли у геймобжетков в юнити идинтификатор, который не меняется при перезапуске игры?

    Amir228, и да и нет
    То приватное поле, которое вы описываете, есть fileID (Local Identifier In File, в инспекторе), например, 280494721. Прямого доступа к нему Unity не даёт. Но можно использовать InstanceID - это почти то же самое и к нему даже можно получить доступ:
    int instanceID = gameObject.GetInstanceID();

    И это действительно можно использовать. Вот пример от ChatGPT
    сохранение

    [System.Serializable]
    public class WorldData
    {
        public List<SerializableObjectData> objectDataList = new List<SerializableObjectData>();
    }
    
    [System.Serializable]
    public class SerializableObjectData
    {
        public int instanceID;
        public Vector3 position;
        public Quaternion rotation;
        // Другие данные об объекте...
    }
    
    // Ваш код сохранения данных мира
    WorldData worldData = new WorldData();
    foreach (GameObject gameObject in yourGameObjects)
    {
        SerializableObjectData objectData = new SerializableObjectData();
        objectData.instanceID = gameObject.GetInstanceID();
        objectData.position = gameObject.transform.position;
        objectData.rotation = gameObject.transform.rotation;
        // Заполните другие данные об объекте...
        worldData.objectDataList.Add(objectData);
    }
    // Сохраните worldData в файл или другое хранилище.


    загрузка

    // Ваш код загрузки данных мира
    // Загрузите worldData из файла или хранилища.
    
    foreach (SerializableObjectData objectData in worldData.objectDataList)
    {
        GameObject gameObject = GameObject.FindObjectOfInstanceID(objectData.instanceID);
        if (gameObject != null)
        {
            // Установите позицию и вращение объекта на основе сохраненных данных.
            gameObject.transform.position = objectData.position;
            gameObject.transform.rotation = objectData.rotation;
            // Восстановите другие данные об объекте...
        }
    }



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

    То, о чём писал я, ещё более конкретный способ идентификации, который, к тому же, позволяет инкапсулировать дополнительную логику. Например, можно повесить сразу несколько идентификаторов (банально лист значений enum).

    Это просто другой способ делать то же самое, но немного иначе.
  • Как включить анимацию на фоне?

    Правильно ли я понял ваш вопрос, что задача в том, чтобы запустить анимацию объекта Б в определённый момент анимации объекта А?
  • Ошибка Gradle Build Failed. И как её решить?

    Все три сообщения являются сопутствующими информационными сообщениями с данными запуска и конфигурации, среди них нет ошибки. Прокрутите консоль в самый верх и посмотрите текст самой верхней ошибки.
  • Как сделать картинку (панель) на весь экран?

    Евгений Иванов,
    Первое объясняется просто - дело не в конкретных размерах, а в соотношении экрана. У вас изначально стоит 1920:1080, что есть соотношение 16:9, а новое 1152:864 это соотношение 4:3 (ну или 12:9), поэтому у вас либо ширина либо высота в итоге не совпала бы в любом случае.

    Второе, распишу по шагам, чтобы вам было удобнее.

    1. Создайте объект-пустышку внутри канваса. На него киньте ваш скрипт. Теперь для вызова обращайтесь не к gameObject.SetActive(), а к скрипту.
    650a9f7c76b94461606071.png

    2. Вот так примерно должен будет выглядеть скрипт. В данном примере это окно выхода
    using UnityEngine;
    
    public class YesNoDialog : MonoBehaviour {
    
    	[SerializeField] private GameObject _panel;
    
    	public void SetShown(bool isShown) {
    		_panel.SetActive(isShown);
    	}
    
    	public void OnExit() {
    		Application.Quit();
    	}
    }


    Вызов будет выглядеть следующим образом:
    public class ExampleScript : MonoBehaviour {
    
    	[SerializeField] private YesNoDialog _yesNoDialog; // ссылка на окно
    
    	private void SomeFunc1() {
    		// много чего разного и в процессе нужно показать окно
    		_yesNoDialog.SetShown(true);
    	}
    }

    На кнопку назад и закрыть можно привязать в Button.OnClick событие YesNoDialog/SetShown/false.

    3. Помещаем объект пустышку в дочерние, тоже растягиваем. Растяжение нужно чтобы размер экрана никак не влиял на геометрию видимой панельки.
    650aa15106acb093922975.png

    4. Перетащите панель, чтобы потом скрипт мог с ней взаимодействовать.
    650aa1e897626933166780.png

    5. Добавьте растянутый дочерний к панели объект с прозрачным Image. Именно он блокирует фоновые клики. Вы кстати на него можете повесить невидимую кнопку закрытия окна.
    650aa2dfea5a4402508035.png

    6. И добавляете саму панель с кнопками. Вот её растягивать уже не нужно.
    650aa313d8811903114898.png

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


    Третье, да. Скажу вам более, вы можете так передать заранее ссылки на что угодно в рамках контекста.
  • Почему триггер не всегда работает?

    На Rigidbody пули попробуйте поменять Collision Detection на "Continuous".
  • Хочу забилдить свою андроид игру, но выдает ошибку, что делать?

    ElezthemDev, в классе Input нет метода "GETTOUCH", есть "GetTouch", в C# регистр имеет значение
  • Как сделать механику удара об что то?

    Amir228, не, всё будет ок. Они реагируют только в момент касания, остальное время просто существуют.
  • Хочу сделать типо босс файта, чтобы анимации которые я добавлю в список были рандомными, но у меня куча ошибок, что делать?

    vitek22, пришлите 2 скриншота:
    1) Вкладка Inspector при выделенном объекте с анимацией
    2) Вкладка Animator для того же объекта
  • Почему Instantiate иногда создаёт объект не в том месте?

    Cheezy_one, попробуйте создать новую пустую сцену, поместить туда оружие и затестить его работу там с выключенным скриптом Bullet на пуле. Если и так будут проблемы, нужно переписать код. Если всё ок, попробовать снова пострелять, но включив Bullet на пуле. Проблемы - смотрите там. Нет проблем - значит есть что-то на сцене, что может мешать.

    PS. Мне сложно сказать по вашему коду что не так (явной причины быть пуле не там я не вижу), потому что там есть вещь, которая в принципе не должна давать возможность код запускать. Например, вот тут:
    BulletObj.GetComponent().hit = hit;
    Проблема в том, что такой вызов GetComponent() вообще не поддерживается.
    Там есть три варианта:
    // норм
    BulletObj.GetComponent<Bullet>().hit = hit;
    // в принципе тоже норм
    BulletObj.GetComponent(typeof(Bullet)).hit = hit;
    // норм, но не очень
    BulletObj.GetComponent("Bullet").hit = hit;


    Я просто оставлю это здесь в надежде, что вам это пригодится:
    [SerializeField] Bullet bulletPrefab;
    // ...
    Bullet bullet = Instantiate(bulletPrefab, BulletSpawnPoint.position, Quaternion.identity);
  • Почему нельзя выбрать continuous dynamic в collision detection?

    Jrtq, сама задача по отслеживанию взаимодействия объектов довольно нетивиальна, потому адекватных алгоритмов не так много. В Unity выбрали и реализовали принципиально разные, чтобы покрыть как можно больше различных случаев - Discrete, Continous, Continous Dynamic и Continous Speculative. Как они работают можно почитать в официальной документации, а области применения следующие:
    1) Discrete (2D и 3D) - как самый простой и потому быстрый, хорошо подходит для игр с простой графикой и заранее известным набором объектов, которые практически не меняются во время игры. Например, для пошаговых настольных игр или простых аркад.
    2) Continous (2D и 3D) - подходит для всех остальных случаев.
    3) Continous Dynamic (3D) - это тот же самый алгоритм Continous, но не просто учитывающий возможность того, что объект будет трёхмерным, а на это опирающийся, что даёт больше профита в ситуациях, когда второй объект тоже движется в 3D.
    4) Continous Speculative (3D) - это принципиально другой алгоритм. Основой первого является упрощённая геометрия мира, второго и третьего - то же в реалтайме, а у этого - предсказание на основе направления и скорости, отчего алгоритм показывает себя лучше всех прочих на объектах, что движутся медленно. В основном его берут на вооружение в стратегиях и разных симуляторах градостроев.

    В 2D выбор у вас между первыми двумя. Тут всё просто. Если траектория простая, а скорость предсказуемая, как, например, катящийся шар-убийца, то Discrete ваш выбор. А если объект контролируется более сложной системой или быстро движется, то ставьте Continous.
  • Хочу сделать типо босс файта, чтобы анимации которые я добавлю в список были рандомными, но у меня куча ошибок, что делать?

    vitek22,
    Сюда мы прикрепляем ссылку на компонент аниматор нужного объекта:
    [SerializeField] Animator anim;

    А здесь не анимации, а названия триггеров переходов
    [SerializeField] string[] triggers;

    Если вы не понимаете принцип переходов, настоятельно рекомендую посмотреть на ютубе про работу с Animator.
  • Что делать если крашится юнити?

    Было бы здорово узнать версию редактора и глянуть логи редактора (и на всякий случай unity hub тоже). Также не помешает узнать, были ли проблемы во время установки редактора. Ничего личного, просто причин может быть слишком много, а входной информации слишком мало.
  • При создании нового проекта в Unity вылазит Enter Safe Mode, что делать?

    Oleksandr08, а что у вас с Unity Hub? Какая там версия стоит? Редактор 2020.1.17f1 он не должен рекомендовать, типа сейчас 2020.3.47f1 в рекомендациях висит уже пару недель. Не уверен, что это как-то связано, но может попробуете версию поновее поставить?

    И ещё, сколько у вашего компа оперативной памяти?

    И заодно гляньте-ка журнал ошибок:
    C:\users\[ваше имя пользователя]\AppData\Local\Unity\Editor\Editor.log
    Там может быть что-то полезное. Также, просто на всякий случай, можете ещё чекнуть эти журналы:
    C:\users\[ваше имя пользователя]\AppData\Roaming\UnityHub\logs\info-log.json
    C:\users\[ваше имя пользователя]\AppData\Local\Unity\Unity.Licensing.Client.log

    В любом случае, обратитесь также в техподдержку.
  • При создании нового проекта в Unity вылазит Enter Safe Mode, что делать?

    Oleksandr08, старую версию, это архивная 2021 или актуальная 2020?
    Если 2020, то там тоже просят войти в безопасный режим?

    И ещё, на скрине у вас ошибки, их число постепенно растёт до бесконечности (999+) или останавливается на, например, 7?

    *архивные версии, это те, что взяты отсюда
    https://unity.com/ru/releases/editor/archive
  • Как правильно отзеркалить спрайт объекта на 180 градусов при движении объекта за мышкой?

    Уточните, у вас вид сбоку (как, например, в марио) или сверху (как в гта 2)? Это разные случаи.
  • Как убрать синхронизацию скайбоксов при переходе между сценами?

    Alex_Schultz, логичнее всего было бы вместе с камерой вешать, но на самом деле всё равно куда, тем более камер может быть много.
  • Есть туториалы по ассету Emerald AI на русском языке?

    Нет, и появятся они очень нескоро по простой причине - среднестатистический потребитель подобных гайдов - джун или любитель, который не будет выкладывать 45 баксов за то, что ему ещё несколько месяцев надо будет осваивать.
    Но я вас порадую, даже англоязычные гайды не раскрывают этот проект во всей его полноте. Освоить его придётся старым проверенным методом - руками, с оглядкой на какую-никакую документацию и немногочисленные примеры "Create (something) with Emerald AI".

    Непрошенный совет: если вы хотите делать игры без программирования, просто наймите программиста и не мучайте себя. Если всё же есть желание помучаться, начните с Bolt https://assetstore.unity.com/packages/tools/visual...