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

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Всё потому, что вы создали GameObject и ему же пытаетесь задать массу, хотя должны в Rigidbody. Как-то так:
    GameObject go = Instantiate(Resources.Load("Circle")) as GameObject;
    var rigidBody = go.AddComponent<Rigidbody>() as Rigidbody;
    rigidBody.mass = newMass;
    Ответ написан
    Комментировать
  • Как заставить камеру двигаться за игроком, но не вращаться с ним?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Если камера вращается вместе с игроком, вы добавили её в иерархию игрока. Если камера дёргается, то у вас либо рассинхрон с движением, либо само движение дёрганное.
    Ответ написан
    Комментировать
  • Unity: В игре не отображается заспавненый префаб. Как исправить?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Возможные проблемы:
    * Sprite Renderer / Order In Layer фона больше и/или равно земле, в таком случае рендер не будет понимать, в какой последовательности всё отображать правильно;
    * Камера физически находится впереди нужных спрайтов. Можете в режиме Play просто перейти в 3D и взглянуть на сцену сверху.

    Не помогло - пишите в комменты.
    Ответ написан
    Комментировать
  • Как изменить ambient light только для одной камеры?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Насколько мне известно - никак, т.к. это глобальные настройки. Если я правильно понял вашу задумку, вы можете выехать за счёт возможности источников освещения светить только на объекты выбранного типа. У компоненты Light самое нижнее свойство - Culling Mask - слои, на которые данный свет способен светить. Аналогичная настройка есть и у камеры.
    Вы можете создать набор слоёв, видимых разными камерами по-разному и также по-разному освещаемыми двумя разными источниками.
    Ответ написан
    Комментировать
  • Как убрать паузу в зацикленной анимации 3д объекта?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Самый лёгкий вариант - смените режим ключей. Делается это в таймлайне, путём выделения верхней ноды (соответственно и всех ниже), нажатием ПКМ и выбором мода во втором сверху разделе. Начните с "Auto", если не подходит - экспериментируйте.

    Способ погеморнее - вручную покрутить кривые анимаций. Во вкладке анимации снизу есть два раздела, включенный у вас DopeSheet и скрытый Curves. Выбираете нужную ноду и двигаете/крутите.

    Не поможет - пишите в коменты.
    Ответ написан
    1 комментарий
  • Как можно создать онлайн в игре на Unity с такими требованиями?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Всё есть в гайдах, вот несколько названий, которые вам помогут соориентироваться в теме:
    * Для мультиплеера: Photon Fusion, Photon Realtime или Mirror Networking
    * Для авторизации: Playfab или Google Play
    * Для хранения данных удалённо: Firebase
    * Для локальных данных: JSON-сериализация или SQLite

    Это не все варианты, но норм способы войти в тему без лишних нервов.

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

    Лучший способ сейчас сделать вашу игру практически не взламываемой - сделать приложение-вебплеер для браузерки, которая 100% валидаций будет проводить на сервере, а на клиенте будет чисто ловить ввод и показывать красивые анимации. Ну и, конечно, сделать прокси сервер на пути всех запросов к главному, чтобы усложнить всем жизнь.
    Ответ написан
    Комментировать
  • Как создать папку, файл и записать в файл данные на Android?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    На андроиде данные просто тупо не будут сохраняться, если вы неправильно настроили манифест, ну или пользователь не выдал разрешение на использование диска.
    Следующим на очереди проверки я бы предложил рассмотреть способ сохранения.
    Кэш сессии можно хранить по пути Application.temporaryCachePath, постоянный кэш в Application.persistentDataPath.
    Если нужно сохранить в галерею или на сд карту, в помощь нативный код (пример) или просто воспользоваться готовой либой/плагином (например)
    Ответ написан
  • Почему на RenderTexutre не отображается UI?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Я распишу весь процесс для тех, кто будет гуглить, вы просто проверьте у себя, всё ли правильно:

    1. Создать основной и дополнительный холст (Hierarchy >> Create >> UI >> Canvas) - на основном вы будете отображать текстуру, в которой будет виден целевой интерфейс;
    2. Создать Render Texture (вкладка Project >> Create >> Render Texture) - это контейнер для графической информации;
    3. В основном холсте создать Raw Image (Hierarchy >> Create >> UI >> Raw Image), в свойство RawImage.texture указать созданную в [2] текстуру - тут мы будем отображать данные текстуры;
    4. Создать дополнительную камеру, в свойство Camera.targetTexture установить текстуру из [2] - а отсюда мы будем данные в текстуру брать;
    5. У дополнительного хоста свойство Canvas.renderMode сменить на "Screen Space - Camera", а в появившемся ниже поле Canvas.renderCamera указать камеру из [4] - это нужно для того, чтобы в текстуру рисовался и UI.
    Ответ написан
    3 комментария
  • Как сохранить движение после заморозки объекта?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Создайте локальную переменную типа Vector3. Сохраните данные из rigidbody.velocity. Загружайте через метод rigidbody.addforce с установкой силы на ForceMode.VelocityChange. Не поможет - пишите в коменты
    Ответ написан
    3 комментария
  • Как исправить работу в скрипте unity?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Если данные теряются, то проблема может быть:
    * в сохранении, которое может как просто не сохранить, так и перезаписать мусорные данные;
    * в загрузке, которая может как загрузить не то, так и добавить своих мусорных данных через мутные валидации;
    * в интерфейсе доступа, который может иметь некорректные фильтры или вообще работать в другом потоке, из-за чего вы даже сообщение об ошибке не увидите;
    * в отображении - всякие Order in Layer у SpriteRenderer, ошибки настройки GridLayoutGroup, отсутствующие ссылки и т.п.

    В вашем конкретном случае рекомендую начать с построчной проверки Start - точно ли цикл отрабатывает все элементы, точно ли у всех нужных выполняются нужные условия. Затем проверьте работу GameManager и AdventureShop. В этом сильно помогает режим отладки, который имеется во всех нормальных IDE.
    Ответ написан
  • Как сделать так, чтобы анимация подстраивалась под точку?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Способ 1 (геморный):
    Объединить все анимации в группы, в зависимости от того, сколько и какие детали персонажа будут задействованы для её исполнения. На аниматоре персонажа выделить по одному слою для каждого фрагмента тела с дублирующими схожее действие анимациями через стейт машину, затем, имея простое число как ключ от стейт машины, вы просто считаете высоту препятствия. Или заранее проставляете точки для её просчёта.
    Например:
    6340b815c74c7939656683.png
    Это имеет смысл, если у вас реально большая игра. Примерно так и была реализована адаптивность анимаций в серии Assassin's Creed (точно Unity+, до неё хз), там более 800 фрагментов анимаций движения персонажа.

    Способ 2 (простой):
    Если у вас маленький или средний проект, не требующий идеального исполнения (хотя это тоже решаемо), воспользуйтесь возможностями дополнения Animation Rigging. Гайды по нему есть на всех языках в гугле.
    Ответ написан
    2 комментария
  • Почему игрок улетает при ударе с уголком?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Без скриншотов и кода могу лишь предположить, что вы перемещаете подчинённого физике персонажа либо телепортацией (модификация transform.position), либо управляете скоростью (Rigidbody.velocity). Оба способа рабочие, но порочные, так как первый вообще не работает на физику, а второй может сделать то, что случилось у вас.

    Если говорить о причине, я на 95% уверен, что произошла следующая ситуация:
    Ваш персонаж столкнулся с коллайдером и физика юнити начала отбрасывать его назад. Он же продолжает двигаться внутрь коллайдера, увеличивая силу, которая в итоге вырастет настолько, что персонажа буквально отшвырнёт. На ровной поверхности вы такой эффект не получите, а вот на углах легко просто потому, что точек сопротивления у коллайдера препятствия меньше.

    Рекомендую обратить внимание на Rigidbody.AddForce с установкой ForceMode (или ForceMode2D для 2D). Вот небольшая подсказка:
    6340b16fc6720621507048.jpeg

    Если мой ответ не помог, напишите и приложите скриншот настроек и вида персонажа, а также код движения (включающий полную последовательность вызова)
    Ответ написан
    Комментировать
  • Как передавать звук между сценами и сохранять их громкость?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    При открытии сцены всё её содержимое загружается в память, а при закрытии удаляется из неё. Вам же нужно пометить нужный объект как неудаляемый. Делается это в коде, примерно так:

    using UnityEngine;
    
    public class DontDestroyMe : MonoBehaviour {
    
    	private void Start() {
    		DontDestroyOnLoad(this.gameObject);
    	}
    }


    Почитать подробнее: https://docs.unity3d.com/ScriptReference/Object.Do...
    Ответ написан
    5 комментариев
  • Как сделать, чтобы персонажа отталкивало в обратную сторону при получении урона в unity?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Используете ли вы физику юнити или нет, у вас есть возможность в поля класса кешировать последний вектор движения, который вы к персонажу прикладывали. Умножьте этот вектор на -1 и это будет обратное направление. Затем толкните персонажа по направлению этого вектора с некоторой силой.
    Ну или просто сделайте коллайдер шипов непроходимым, создайте физический материал с изменённым параметром bounce и киньте на шипы. Таким образом персонаж будет отпрыгивать при коллизии.
    Ответ написан
    Комментировать
  • Как экспортировать текстуру из blender в unity?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Во вкладке Project найдите файл модели и нажмите на него. Во вкладке Inspector перейдите к разделу Materials. В нём будут опции Extract Textures/Extract Materials, с их помощью вы можете вытащить из модели текстуры и использующие их материалы.
    633f6a731a17e734420893.png
    Ответ написан
    Комментировать
  • Как исправить ошибку Object reference not set to an instance?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Попробуйте сразу после строк с получением ссылок на answer1Button и answer1ButtonText передать в консоль проверку на null.
    Ответ написан
    Комментировать
  • Как сделать привязку и отвязку объекта по клавише?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Если вас интересует чисто нажатие:
    private void Update() {
        if (Input.GetMouseButtonDown(0)) {
            // code
        }
    }

    Если нажатие на объект с коллайдером:
    private void OnMouseDown() {
        // your code
    }

    Привязка и освобождение происходит за счёт свойства иерархии компоненты Transform:
    // привязка
    transform.parent = otherTransform;
    // освобождение
    transform.parent = null;
    Ответ написан
    Комментировать
  • Почему не работает UI у персонажа с ассета?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Проверьте по порядку:
    1) Есть ли на сцене объект Event System или одноимённый компонент?
    2) Не перекрывает ли кнопку иное изображение/надпись, с включенным Raycast Target?
    3) Привязано ли к кнопке нужное событие?

    Если всё перечисленное в порядке, а ошибка осталась, пишите в комменты.
    Ответ написан
  • UnityWebRequest не скачивает изображение интернета юнити. Что делать?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Не видя кода, могу сделать лишь три предположения:
    1) Вы не разрешили приложению доступ в интернет на телефоне
    2) Вы используете протокол HTTP
    3) Вы используете протокол HTTPS, а на сервере нет действительного SSL сертификата (самоподписывающиеся тоже не подходят)
    Если ничего не подошло, напишите в комментариях
    Ответ написан
  • Как сделать цилиндр, который будет вращаться и скидывать игрока?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Добавьте цилиндру Rigidbody и скрипт, который будет его вращать. Как-то так:

    using UnityEngine;
    
    [RequireComponent(typeof(Rigidbody))]
    public class RotateRigidbody : MonoBehaviour {
    
    	[SerializeField] private Rigidbody m_Rigidbody;
    	[SerializeField] private Vector3 m_Speed;
    
    	private void Start() {
    		m_Rigidbody = GetComponent<Rigidbody>();
    	}
    
    	private void FixedUpdate() {
    		m_Rigidbody.MoveRotation(Quaternion.Euler(m_Speed));
    	}
    }


    PS. если не хотите, чтобы он двигался, а лишь вращался, в настройках Rigidbody цилиндра поставьте три галочки на constraints-position x/y/z
    Ответ написан
    Комментировать