Не знаю, писали тут или нет, но на всякий случай: Если шейдеры не отображаются или они розовые, то вы скорее всего не в проекте 3D URP. Чтобы исправить проблему, нужно догрузить пакеты URP и выставить одну настройку. Как скачать: заходим в Window/Package Manager/выбираем вверху Unity Registry, находим внизу строчку пакеты Universal RP и качаем. Там гиг вроде с чем-то. Как выставить настройку: создаём в Ассетах простую папку и называем её URP Settings(можете назвать как угодно), затем нажимаем на папку правой кнопкой мыши, Create, Rendering, URP Asset(with Universal Renderer). В папке создадутся два файлика. Идём в Edit/ Project Settings/Graphics. В самой верхней строчке Scriptable Render Pipeline Settings будет пусто, нажимаем справа на кружок и выбираем файлик New Universal Render Pipeline…блаблабла. Готово. Шейдеры должны стать адекватными. Если же ещё нет, то выберите их и жмакните по ним Edit/ Rendering /Materials /Convert All Built-In Materials to URP.
Спасибо за подсказку, дополнительно может помочь, если выше не сработало, двойным кликом по файлику, например Push, если он розовым идет, откройте шейдер. У меня при первом входе, в названии на вкладке, была звездочка, якобы я его отредактировал, ничего не меняем, правой кнопкой по вкладке, с названием шейдера, жмем и выбираем Close tab или закрыть вкладку. Должно предложить Save или просто закрыть. Я нажал Save и шейдер наконец применился. Походу система дораспознала после всех бубнов. (возможно, понадобится что-то отредактировать, в таком случае, меняйте такое значение, которое можно быстро вернуть, при повторном редактировании)
@@nikolayjiganin7638 Кучу времени отдал, но нашел. Нужно сменить рендер материалов на Universal Render Pipeline / Lit. Если не дает - создать новые материалы, они будут уже нормально отображаться.
Я делал всё по твоей инструкции и шейдер заработал, это хорошо, но только освещение пропало, всё стало чёрным кроме объектов у которых были материалы. Это как исправить?
Если у кого-то, как у меня, персонаж не деформировался в момент прохождения ворот, посмотрите не висит ли у вас в Player`e в ColliderCenter на Capsule лишний Rigidbody. Долго с этим возился. Посмотрел урок Ильи "Физика в Unity - 2. Collider" на его канале и сходу обнаружил у себя лишний Rigidbody. В предыдущем уроке "Программирование сбора монет", когда создаём ColliderCenter и Capsule, он про это говорит и НЕ вешает лишний Rigidbody на Capsule. Я хз откуда он в этом случае у меня взялся, но после удаления всё заработало.
Очень хороший подробный урок. Я внес небольшую поправку в свой проект. Когда рос мой персонаж, камера оставалась внизу и персонаж не помещался в кадр. Я использовал в качестве Target для камеры голову персонажа из иерархии и метод Vector3.Lerp для плавного сближения камеры.
Вроде получилось всё, но у меня есть отличие. В моменте столкновения с воротами width персонаж расширялся, а с воротами height - не срабатывал. Изменил в скрипте else if на просто if и всё заработало как надо. Не могу понять почему у вас сработало, а у меня только так. Вот ваш вариант скрипта, где у меня срабатывали только изменения по ширине: private void OnTriggerEnter(Collider other) // Метод обнаружения столкновения. { PlayerModifire playerModifire = other.attachedRigidbody.GetComponent(); // Создаём переменную. if (playerModifire) // Если столкновение с объектом, на котором есть компонент с названием PlayerModifier не равно 0, то есть проверяем есть ли он. { if (deformationType == DeformationType.Width) // Если деформация по типу ширины. playerModifire.AddWidth(value); // Деформация по ширине произойдёт исходя из значений на воротах. } else if (deformationType == DeformationType.Height) // в противном случае, если тип деформации по высоте. { playerModifire.AddHeight(value); // Деформация по высоте произойдёт исходя из значений на воротах. } } а если вот так, то и по высота тоже заработала: private void OnTriggerEnter(Collider other) // Метод обнаружения столкновения. { PlayerModifire playerModifire = other.attachedRigidbody.GetComponent(); // Создаём переменную ,чтобы не писать длинный код, а просто использовать переменную для проверки компонента на объекте. if (playerModifire) // Если столкновение с бъектом, на котором есть компонент с названием PlayerModifier не равно 0, то есть проверяем есть ли он. { if (deformationType == DeformationType.Width) // Если деформацию по типу ширины. playerModifire.AddWidth(value); // Деформация по ширине произойдёт исходя из начений на воротах. } if (deformationType == DeformationType.Height) // в противном случае, если тип деформации по высоте. { playerModifire.AddHeight(value); // Деформация по высоте произойдёт исходя из значений на воротах. } }
Ребяяяятааа!!! Уже прочитал все ваши комменты ,и все попробовал Но все равно есть проблема 1. При создание материала создаётся только розовый цвет и потом никак не меняется 2.когда перекидываю на персонажа и изменяю его,то человечек остаётся прежнем но появляется аура изменения Она то есть просто прозрачная с границей Все перепробовал ,кроме установки новой версии ,если ее ставлю ,проект не открывается
Здравствуйте. В этом случае рекомендуем установить новую версию Unity. А также создать проект заново и загрузить ассет нового проекта из прошлой папки.
так и не понял почему у вас работает код, когда висит на родителе. У меня получилось только так other.GetComponentInParent если other.GetComponent , то возвращает null. минут 15 не понимал почему не работает.
Здравствуйте. Метод «GetComponent» получает компонент от любого объекта, а «GetComponentInParent» - от родительского. Поэтому конфликт может возникнуть, если компонент «RigidBody» применяется на нескольких объектах. В этом случае необходимо использовать «attachedrigidbody» в коде для определения нужного компонента, а также удалить лишний компонент.
Подскажите....я для этой игры использую вместо человечка - динозавра. У него при ходьбе анимируется шея и голова. Он какбы покачивает и махает головой в процессе ходьбы. Вопрос в следующем: вместо деформации роста, я хотела увеличивать размер шеи от туловища до головы и использовать соответственно 2 его кости (joint). Как итог: не получается это сделать вашим способом через transform. position. Визуальный эфект получается только при использовании local.Scale, но увеличение размера головы- это не совсем то, что мне было надо ))) Хотела бы уточнить , связано ли такое явление с тем, что на нужных мне костях динозавра уже итак есть анимация fbx? Или всё-таки есть способ увеличить высоту шеи? Заранее спасибо 🙏
@@Defis_22 Не нашла нигде ответ 😔, пришлось отказаться от первоначальной идеи, чтоб не тормозить этим обучение))) Игру по этому курсу уже опубликовала как есть и учусь дальше....🙂 Но буду очень рада, если вы проясните мой вопрос, чтоб не было пробелов в этой теме ...
@@Defis_22 Да, на Яндексе. Материалов с чужими авторскими правами я не использовала, а о своих пока не думала, т.к. игра первая...и не блещет супер механиками. Так сказать опытный образец ) Из авторских прав пока только с плагиатом разобралась. В общем, самой за всем следить надо и сообщать в Яндекс о нарушениях своих прав.
Что-то мне не понятно про масштабирование коллайдера. Мы прибавляем к Scale(множителю!) ту же величину, что и к координате кости. Это ведь не одно и то же. Как это корректно может работать? У меня коллайдер увеличивается значительно быстрее чем персонаж.
@@avalonex2971 комп не под рукой, иду по приборам. У тебя сейчас должно быть что-то типа: на сцене есть Игрок, в нем Коллайдер, в нем Капсула. В настройках Капсулы установи Scale Y и Height равными 1. В настройках Коллайдера подгони его высот под высоту игрока с помощью Scale Y Коллайдера. Последнюю величину используй в скрипте при добавлении к ней _высота * _мультиплаерВысоты. Надеюсь понятно.
Здравствуйте. Я взяла другого персонажа, у которого много материалов (т.е. у него есть цветная одежда). Теперь у меня не получается сделать его толстым в ширину полностью. Делаются шире только штаны, потому что они являются главным материалом у Player. _Рендер.material.SetFloat("_PushValue", _Ширина * _ИзменениеШирины) Эта строчка выбирает только главный материал у Player для изменения ширины. Как мне прописать в коде, чтобы и остальные материалы, лежащие на Player, тоже меняли значение PushValue???????????
Здравствуйте. В этом случае нужно заменить все материалы на подобные тому, что были у Player'а из туториала. Чтобы для каждого из материалов изменить значение, можно взять их из нашего GameObject и пройтись циклом по ним: GetComponent().materials.Length.
Здравствуйте, возможно я нечего не понимаю, но почему мы изменяем только толщину объекта персонажа, а размер капсулы (которая отвечает за взаимодействие с триггерами (_colliderTransform) и высоту которой мы меняли вместе с высотой персонажа) мы не меняем?
Здравствуйте. Дело в том, что если изменить капсулу или персонажа, к которым привязан коллайдер, то значения размеров триггера также будут автоматически переработаны.
17 минута вызвала у меня вопрос: Как так у вас получается тестировать изменение высоты персонажа по нажатию клавиши, если в коде она еще не несет за собой этот функционал, а изменение происходит каждый кадр в update? Магия не иначе!
Здравствуйте. В Update происходит проверка при нажатии клавиши «H». При положительном значении вызывается метод «AddHeight», который увеличивает высоту персонажа.
Здравствуйте, а если я сделал изменение высоты коллайдера персонажа не через обычное присваивание, а через оператор присваивания с сложением, то производительность от этого станет чуть хуже или разницы нет?
Здравствуйте. Создание новых векторов - это весьма трудоёмкая задача. Поэтому реализация, которую вы описываете, действительно может улучшить производительность. Дополнительно рекомендуем обратить внимание на тред на форуме Unity, который посвящён оптимизации векторов. Он доступен по ссылке: clck.ru/396iYk. Отметим, что данные из него необходимо проверять с помощью профайлера, чтобы убедиться в их актуальности.
Здравствуйте. Чтобы настроить качество графики, необходимо нажать «Edit» - «Project Settings» - «Quality» и выбрать пункт «Render Pipeline Asset». Тогда откроются настройки визуализации. Среди них можно установить «Shadows» и «Cascade Count», например, на 2 или 3 - это сделает тени более чёткими.
Не знаю, что сделал не так, но когда в функции Update повторил вычисления offsetY и задал _topSpine.position, у меня при каждом Update увеличивается до бесконечности. На видосе только после нажатия кнопки. Может я что то не понимаю? Вычисления так же до if как и на видосе
Здравствуйте. Такое может происходить, если в строчке с «offsetY» вы прописали «float offsetY += …» вместо «float offsetY = …». Если дело не в этом, можно точечно определить причину с помощью «Debug.Log(“Увеличиваем высоту“)» в функции «“AddHeight()». Это поможет понять, вызывается ли «AddHeight» на постоянной основе или причина в другой строчке кода. Также отметим, что если обнаружить и устранить причину не получится - в описании видеоурока можно найти ссылку на готовый проект и сверить код.
Здравствуйте, у меня возник вопрос, почему высоту мы высчитываем в Update? Не правильней ли было сделать, чтобы высота считалась как и ширина в методе, который увеличивает значение _height? Но самая большая проблема в том, что почему-то при переносе строчек из Update в AddHeight у меня перестает адекватно меняться высота(он начинает делать смещение по игрику не в глобальных координатах, а в локальных). Из-за этого смещение получается вверх и в сторону камеры. Долго пытался это пофиксить или разобраться почему именно так это работает, но так и не нашел ответа
Здравствуйте. Обновление высоты можно действительно перенести в отдельный метод. Расскажем подробнее, как это сделать: 1. Для начала нужно прописать Update: void Update() { if (Input.GetKeyDown(KeyCode.W)) { AddWidth(20); } if (Input.GetKeyDown(KeyCode.H)) { AddHeight(20); } } 2. Далее добавьте метод для изменения высоты: void UpdateHeight() { float offsetY = _height * _heightMultiplier + 0.17f; _topSpine.position = _bottomSpine.position + new Vector3(0, offsetY, 0); _colliderTransform.localScale = new Vector3(1, 1.84f + _height * _heightMultiplier, 1); } 3. Изменять значение можно с помощью методов SetHeight и AddHeight: public void AddHeight(int value) { _height += value; UpdateHeight(); if (value > 0) { _increaseSound.Play(); } }
public void SetHeight(int value) { _height = value; UpdateHeight(); }
Здравствуйте. Деформация может не происходить по нескольким причинам: 1. Если Rigidbody находится ещё на одном объекте Player, который является дочерним. Тогда вызов через attachedRigidBody возвращает Rigidbody, который используется для коллайдера. В этом случае необходимо проверить, к какому объекту привязан Rigidbody. 2. Триггер срабатывает некорректно. Нужно проверить имя объекта, к которому обращается attachedRigidBody, с помощью кода: Debug.Log(other.attachedRigidbody.gameObject.name); 3. Имеются неточности в скрипте изменения высоты. Рекомендуем просмотреть видео и повторить все шаги.
Здравствуйте. А если я взял другого персонажа, потратил несколько часов на раскраску его развёрток, вручную(. Теперь, чтобы работало со всеми объектами, нужно массив рендеров составлять или каждый отдельно перемножать? Я сделал 6 шейдер графов и на каждый повесил материал.
Я добавил другую модель из scetchfab, загрузил ей скелкт в миксамо и повесил новые анимации, все работает, но перестал двигаться трансформ точек спайн, даже когда в режиме сцены все меняю - возвращается обратно. Из за чего это?
Здравствуйте. Зайдите в объект с игроком и посмотрите, меняется ли его позиция? Если значения остаются прежними, то откройте скрипт «PlayerMove» и проверьте код на соответствие следующему: void Update() { if (Input.GetMouseButtonDown(0)) { _oldMousePositionX = Input.mousePosition.x; _animator.SetBool("Run", true); } if (Input.GetMouseButton(0)) { Vector3 newPosition = transform.position + transform.forward * Time.deltaTime * _speed; newPosition.x = Mathf.Clamp(newPosition.x, -2.5f, 2.5f); transform.position = newPosition; float deltaX = Input.mousePosition.x - _oldMousePositionX; _oldMousePositionX = Input.mousePosition.x; _eulerY += deltaX; _eulerY = Mathf.Clamp(_eulerY, -70f, 70f); transform.eulerAngles = new Vector3(0, _eulerY, 0); } if (Input.GetMouseButtonUp(0)) { _animator.SetBool("Run", false); } }
Почему не работают шейдеры? они отображаются как неизвестный файл, а когда создаешь материал на основе шейдера создается дефолтный материал без "свойства шейдеров"
Скорее всего проект создал в 3D, а не 3D (URP). Из за этого у тебя не установился шейдер эдитор и соответствующий рендер. Надо будет тебе проект переконвертировать в 3d (urp). В чате выкладывали инфу, как все это сделать.
Здравствуйте. Проект может не распознавать шейдеры, если версия Unity не совпадает с версией автора программы. Рекомендуем установить версию Unity 2022.1.12f1 и заново загрузить шейдеры - это должно помочь.
Здравствуйте. Рекомендуем задать вопрос в нашем чате по Unity: t.me/yagamesunity Возможно, что кто-то из разработчиков уже сталкивался с подобным и подскажет решение.
Буду рад, если кто-то подскажет. У меня другой персонаж, естественно, если я буду накладывать материал созданный на основе шейдера, то мой персонаж станет жёлтый. Как я могу сделать так, чтобы в инспектор этого материала также были бы Base Map, Normal Map и т.п., для того чтобы я мог положить текстуру на персонажа. Пытался шаманить в нодах шейдера, так ничего и не смог изменить. Если кто-то это решил, подскажите пожалуйста.
Здравствуйте. Для этого нужно внести правки в шейдер Push. Расскажем подробнее. Для изменения Base Map и Normal Map создайте 2 текстуры в данном шейдере и нод Sample Texture 2D. После поле Texture(T2) объедините с текстурой Base Map, а поле RGBA(4) с выходным нодом Fragment - Base Color(3). Тот же алгоритм действий нужно повторить с Normal Map. В этом случае вместо Base Color(3) нужно использовать Normal (Tangent Space)(3).
Здравствуйте. Чтобы исправить отображение цвета, рекомендуем установить новую версию Unity. А также создать проект заново и загрузить ассет нового проекта из прошлой папки.
Здравствуйте. Рекомендуем на ворота добавить коллайдер, далее через него настроить изменения характеристик. Также повторите все шаги из видео: clck.ru/34aPcn
При импортировании шейдеров сразу же вылазит ошибка: ArgumentException: JSON parse error: The document root must not follow by other values. Подскажите в чем проблема?
Максим, здравствуйте. Такое бывает, когда в файле шейдера или его метаданных присутствуют некорректные материалы, которые не соответствуют JSON-синтаксису. Чтобы убрать это уведомление, рекомендуем сделать следующее: 1. Проверьте, имеет ли файл шейдера расширение .shader и соответствует ли он требованиям Unity для такого формата. 2. Уберите сторонние файлы или метаданные из папки с шейдерами. 3. Перепишите файл шейдера с помощью текстового редактора. Это нужно, чтобы убедиться в том, что все символы и данные соответствуют JSON-синтаксису и отсутствуют ненужные пробелы или дополнительные значения. 4. Если ошибка продолжает воспроизводиться - может быть повреждён файл шейдера. Перезапустите Unity или переустановите шейдеры и используйте обновленные файлы.
Здравствуйте. Необходимо добавить коллайдер на ворота и через него настроить изменения характеристик. Дополнительно рекомендуем повторить все шаги из видео: clck.ru/34aPcn
@@Geralld ну можно и так) вообще все по разному можно) Ну например мой подход позволяет использовать переменную playerModifier за пределами if-а. Иногда это нужно. Но вообще TryGetComponent именно тут больше подходит. Хотя без разницы почти.
@@poshlhumorrr в следующем уроке сборка проекта после всех изменений в этом уроке. А хотелось бы именно шейдеры, как было в приложениях к предыдущим урокам(
почему-то модель игрока рассыпается на полигоны когда у материала увеличивается параметр PushValue(((( может кто знает причину уже несколько часов мучаюсь
Здравствуйте. Такое бывает, когда установка Unity прошла некорректно. Рекомендуем скачать версию 2021.1.11, которая используется в видеокурсе. Найти её можно по ссылке: clck.ru/34Xjfj
@@fayevalentine6070 Проблема в том, что создал просто 3D проект, без URP, советую создать новый, с URP и в него перенести ассеты, ну или по новой собрать
@@ЮлияАнтонова-х4д если хотите использовать шейдер, чтобы персонаж толстел, то нет, не выйдет, видимо. Может быть как то можно в пустой проект импортировать юрп, но я пересоздал проект просто
Александр, здравствуйте. Проект должен быть создан из шаблона URP: ruclips.net/video/nB2uymAe68I/видео.html Также рекомендуем использовать версию Unity не старше 2021 года.
У меня возникала такая ошибка при изменинии растояниями между спиной1 и спиной2 "error CS0104: 'Vector3' is an ambiguous reference between 'UnityEngine.Vector3' and 'System.Numerics.Vector3' " Я заменил Vector3(0,2,0) на UnityEngine.Vector3(0,2,0) и все заработало. ПОчему так? Может кому-то поможет мой коментарий.
Класс Vector3 встречается в нескольких пространствах имен (namespace) и компилятор не знает какой из них использовать. Поэтому тут либо отрубаешь ненужный неймспейс (в самом верху удалить/закомментировать строчку using System.Numerics;), либо если он нужен сделать как ты: указать более конкретное расположение класса через указание его нейспейса.
The .meta file Assets/Shaders/Push 2.shadergraph.meta does not have a valid GUID and its corresponding Asset file will be ignored. If this file is not malformed, please add a GUID, or delete the .meta file and it will be recreated correctly
У меня при нажатии на Play, в видео это 16.42 минута, в данном этапе рост персонажа резко улетает ввысь на бесконечность... Делаю как у него... Подскажите пожалуйста, у кого такая же ситуация была?
Не знаю, писали тут или нет, но на всякий случай:
Если шейдеры не отображаются или они розовые, то вы скорее всего не в проекте 3D URP. Чтобы исправить проблему, нужно догрузить пакеты URP и выставить одну настройку.
Как скачать: заходим в Window/Package Manager/выбираем вверху Unity Registry, находим внизу строчку пакеты Universal RP и качаем. Там гиг вроде с чем-то.
Как выставить настройку: создаём в Ассетах простую папку и называем её URP Settings(можете назвать как угодно), затем нажимаем на папку правой кнопкой мыши, Create, Rendering, URP Asset(with Universal Renderer).
В папке создадутся два файлика.
Идём в Edit/ Project Settings/Graphics. В самой верхней строчке Scriptable Render Pipeline Settings будет пусто, нажимаем справа на кружок и выбираем файлик New Universal Render Pipeline…блаблабла. Готово. Шейдеры должны стать адекватными. Если же ещё нет, то выберите их и жмакните по ним Edit/ Rendering /Materials /Convert All Built-In Materials to URP.
Благодарю за инфу, коммент в топ выводите, жмите лайк) Все стало розовым после правда.
Спасибо за подсказку, дополнительно может помочь, если выше не сработало, двойным кликом по файлику, например Push, если он розовым идет, откройте шейдер. У меня при первом входе, в названии на вкладке, была звездочка, якобы я его отредактировал, ничего не меняем, правой кнопкой по вкладке, с названием шейдера, жмем и выбираем Close tab или закрыть вкладку. Должно предложить Save или просто закрыть. Я нажал Save и шейдер наконец применился. Походу система дораспознала после всех бубнов. (возможно, понадобится что-то отредактировать, в таком случае, меняйте такое значение, которое можно быстро вернуть, при повторном редактировании)
Подскажите, делаю все по инструкции, работает, но пропадают все остальные материалы, что в этом случаи делать?
@@nikolayjiganin7638 Кучу времени отдал, но нашел. Нужно сменить рендер материалов на Universal Render Pipeline / Lit. Если не дает - создать новые материалы, они будут уже нормально отображаться.
Я делал всё по твоей инструкции и шейдер заработал, это хорошо, но только освещение пропало, всё стало чёрным кроме объектов у которых были материалы. Это как исправить?
Если у кого-то, как у меня, персонаж не деформировался в момент прохождения ворот, посмотрите не висит ли у вас в Player`e в ColliderCenter на Capsule лишний Rigidbody. Долго с этим возился. Посмотрел урок Ильи "Физика в Unity - 2. Collider" на его канале и сходу обнаружил у себя лишний Rigidbody. В предыдущем уроке "Программирование сбора монет", когда создаём ColliderCenter и Capsule, он про это говорит и НЕ вешает лишний Rigidbody на Capsule. Я хз откуда он в этом случае у меня взялся, но после удаления всё заработало.
спасибо, тоже мучилась!
у меня та же проблема, но лишних Rigidbody нет
Спасибо тебе большое❤! После удаления сразу заработало!)
Очень хороший подробный урок. Я внес небольшую поправку в свой проект. Когда рос мой персонаж, камера оставалась внизу и персонаж не помещался в кадр. Я использовал в качестве Target для камеры голову персонажа из иерархии и метод Vector3.Lerp для плавного сближения камеры.
Здравствуйте. Спасибо, что поделились советом по разработке 🙂 Рады, что видео-урок вам понравился.
Вроде получилось всё, но у меня есть отличие.
В моменте столкновения с воротами width персонаж расширялся, а с воротами height - не срабатывал.
Изменил в скрипте else if на просто if и всё заработало как надо.
Не могу понять почему у вас сработало, а у меня только так.
Вот ваш вариант скрипта, где у меня срабатывали только изменения по ширине:
private void OnTriggerEnter(Collider other) // Метод обнаружения столкновения.
{
PlayerModifire playerModifire = other.attachedRigidbody.GetComponent(); // Создаём переменную.
if (playerModifire) // Если столкновение с объектом, на котором есть компонент с названием PlayerModifier не равно 0, то есть проверяем есть ли он.
{
if (deformationType == DeformationType.Width) // Если деформация по типу ширины.
playerModifire.AddWidth(value); // Деформация по ширине произойдёт исходя из значений на воротах.
}
else if (deformationType == DeformationType.Height) // в противном случае, если тип деформации по высоте.
{
playerModifire.AddHeight(value); // Деформация по высоте произойдёт исходя из значений на воротах.
}
}
а если вот так, то и по высота тоже заработала:
private void OnTriggerEnter(Collider other) // Метод обнаружения столкновения.
{
PlayerModifire playerModifire = other.attachedRigidbody.GetComponent(); // Создаём переменную ,чтобы не писать длинный код, а просто использовать переменную для проверки компонента на объекте.
if (playerModifire) // Если столкновение с бъектом, на котором есть компонент с названием PlayerModifier не равно 0, то есть проверяем есть ли он.
{
if (deformationType == DeformationType.Width) // Если деформацию по типу ширины.
playerModifire.AddWidth(value); // Деформация по ширине произойдёт исходя из начений на воротах.
}
if (deformationType == DeformationType.Height) // в противном случае, если тип деформации по высоте.
{
playerModifire.AddHeight(value); // Деформация по высоте произойдёт исходя из значений на воротах.
}
}
Ребяяяятааа!!!
Уже прочитал все ваши комменты ,и все попробовал
Но все равно есть проблема
1. При создание материала создаётся только розовый цвет и потом никак не меняется
2.когда перекидываю на персонажа и изменяю его,то человечек остаётся прежнем но появляется аура изменения
Она то есть просто прозрачная с границей
Все перепробовал ,кроме установки новой версии ,если ее ставлю ,проект не открывается
Здравствуйте. В этом случае рекомендуем установить новую версию Unity. А также создать проект заново и загрузить ассет нового проекта из прошлой папки.
Материал создается кликая правой кнопкой по шейдеру, а не по пустому полю.
Ожидание: сквозные отверстия, различные мутации конечностей
Реальность: scale x2
Отверстия, мутации и прочее делаются шейдерами
так и не понял почему у вас работает код, когда висит на родителе. У меня получилось только так other.GetComponentInParent если other.GetComponent , то возвращает null. минут 15 не понимал почему не работает.
Здравствуйте. Метод «GetComponent» получает компонент от любого объекта, а «GetComponentInParent» - от родительского. Поэтому конфликт может возникнуть, если компонент «RigidBody» применяется на нескольких объектах. В этом случае необходимо использовать «attachedrigidbody» в коде для определения нужного компонента, а также удалить лишний компонент.
Подскажите....я для этой игры использую вместо человечка - динозавра. У него при ходьбе анимируется шея и голова. Он какбы покачивает и махает головой в процессе ходьбы. Вопрос в следующем: вместо деформации роста, я хотела увеличивать размер шеи от туловища до головы и использовать соответственно 2 его кости (joint). Как итог: не получается это сделать вашим способом через transform. position. Визуальный эфект получается только при использовании local.Scale, но увеличение размера головы- это не совсем то, что мне было надо ))) Хотела бы уточнить , связано ли такое явление с тем, что на нужных мне костях динозавра уже итак есть анимация fbx? Или всё-таки есть способ увеличить высоту шеи? Заранее спасибо 🙏
Разобралась???)))
@@Defis_22 Не нашла нигде ответ 😔, пришлось отказаться от первоначальной идеи, чтоб не тормозить этим обучение))) Игру по этому курсу уже опубликовала как есть и учусь дальше....🙂
Но буду очень рада, если вы проясните мой вопрос, чтоб не было пробелов в этой теме ...
@@kroshka_vseznayka_tv Не смогу прояснить... А куда опубликовала?! На Яндекс Игры? А авторские права?
@@Defis_22 Да, на Яндексе. Материалов с чужими авторскими правами я не использовала, а о своих пока не думала, т.к. игра первая...и не блещет супер механиками. Так сказать опытный образец ) Из авторских прав пока только с плагиатом разобралась. В общем, самой за всем следить надо и сообщать в Яндекс о нарушениях своих прав.
@@kroshka_vseznayka_tv Классно, молодец! Доход наверно перестал капать за столько времени?
Что-то мне не понятно про масштабирование коллайдера. Мы прибавляем к Scale(множителю!) ту же величину, что и к координате кости. Это ведь не одно и то же. Как это корректно может работать? У меня коллайдер увеличивается значительно быстрее чем персонаж.
Вопрос снят, сделал высоту и scale капсулы в 1, чтобы только scale коллайдера отвечал за высоту.
@@coyotewld можешь помочь мне .та-же проблема
@@avalonex2971 комп не под рукой, иду по приборам. У тебя сейчас должно быть что-то типа: на сцене есть Игрок, в нем Коллайдер, в нем Капсула. В настройках Капсулы установи Scale Y и Height равными 1. В настройках Коллайдера подгони его высот под высоту игрока с помощью Scale Y Коллайдера. Последнюю величину используй в скрипте при добавлении к ней _высота * _мультиплаерВысоты. Надеюсь понятно.
Та же проблема возникла. Пересмотрел "Программирование сбора монет", понял что ошибся на стадии создания коллайдераю
Тоже возникла та же проблема. Пересмотрел "Программирование сбора монет", понял что ошибся на стадии создания коллайдера
Здравствуйте. Я взяла другого персонажа, у которого много материалов (т.е. у него есть цветная одежда). Теперь у меня не получается сделать его толстым в ширину полностью. Делаются шире только штаны, потому что они являются главным материалом у Player.
_Рендер.material.SetFloat("_PushValue", _Ширина * _ИзменениеШирины)
Эта строчка выбирает только главный материал у Player для изменения ширины. Как мне прописать в коде, чтобы и остальные материалы, лежащие на Player, тоже меняли значение PushValue???????????
Здравствуйте. В этом случае нужно заменить все материалы на подобные тому, что были у Player'а из туториала.
Чтобы для каждого из материалов изменить значение, можно взять их из нашего GameObject и пройтись циклом по ним:
GetComponent().materials.Length.
Прописываю скрипт на увеличение ширины, запускаю: показатели меняются, а сам персонаж не меняется. Как быть?
Здравствуйте, возможно я нечего не понимаю, но почему мы изменяем только толщину объекта персонажа, а размер капсулы (которая отвечает за взаимодействие с триггерами (_colliderTransform) и высоту которой мы меняли вместе с высотой персонажа) мы не меняем?
Здравствуйте. Дело в том, что если изменить капсулу или персонажа, к которым привязан коллайдер, то значения размеров триггера также будут автоматически переработаны.
17 минута вызвала у меня вопрос: Как так у вас получается тестировать изменение высоты персонажа по нажатию клавиши, если в коде она еще не несет за собой этот функционал, а изменение происходит каждый кадр в update? Магия не иначе!
Здравствуйте. В Update происходит проверка при нажатии клавиши «H». При положительном значении вызывается метод «AddHeight», который увеличивает высоту персонажа.
Тот же вопрос ибо я запускаю игру и человек начинает каждый отрезок времени вырастать на 2 метра то есть летит вверх без стопов.
Здраствуйте,списал скрипт при нажатии на W не толстеет персонаж,показатель Widht в скрипте меняется а в шейдере"_PushValue" нет.Где я допустил ошибку?
нашел ошибку :\
А что у тебя было?
@@moony3613 допустил ошибку в коде
@@alexgrov7096 понятно, а у тебя не было проблемы с тем, что персонаж не деформируется при прохождении через ворота?
@@moony3613 нет,больше никаких проблем я не встречал
Здравствуйте, а если я сделал изменение высоты коллайдера персонажа не через обычное присваивание, а через оператор присваивания с сложением, то производительность от этого станет чуть хуже или разницы нет?
Здравствуйте. Создание новых векторов - это весьма трудоёмкая задача. Поэтому реализация, которую вы описываете, действительно может улучшить производительность. Дополнительно рекомендуем обратить внимание на тред на форуме Unity, который посвящён оптимизации векторов. Он доступен по ссылке: clck.ru/396iYk.
Отметим, что данные из него необходимо проверять с помощью профайлера, чтобы убедиться в их актуальности.
Кто подскажет - поменял проект с 3D на 3D URP и тени стали нечеткие, как будто пиксельные...как исправить?)
Здравствуйте. Чтобы настроить качество графики, необходимо нажать «Edit» - «Project Settings» - «Quality» и выбрать пункт «Render Pipeline Asset». Тогда откроются настройки визуализации. Среди них можно установить «Shadows» и «Cascade Count», например, на 2 или 3 - это сделает тени более чёткими.
Здравствуйте, не получается привязать материал к шейдеру и шейдер вообще не открывается.
Здравствуйте. Рекомендуем убедиться, что у вас установлен пакет «Shader Graph», с помощью которого шейдер работает в видео.
Не знаю, что сделал не так, но когда в функции Update повторил вычисления offsetY и задал _topSpine.position, у меня при каждом Update увеличивается до бесконечности. На видосе только после нажатия кнопки. Может я что то не понимаю? Вычисления так же до if как и на видосе
Здравствуйте. Такое может происходить, если в строчке с «offsetY» вы прописали «float offsetY += …» вместо «float offsetY = …».
Если дело не в этом, можно точечно определить причину с помощью «Debug.Log(“Увеличиваем высоту“)» в функции «“AddHeight()». Это поможет понять, вызывается ли «AddHeight» на постоянной основе или причина в другой строчке кода.
Также отметим, что если обнаружить и устранить причину не получится - в описании видеоурока можно найти ссылку на готовый проект и сверить код.
Здравствуйте, у меня возник вопрос, почему высоту мы высчитываем в Update? Не правильней ли было сделать, чтобы высота считалась как и ширина в методе, который увеличивает значение _height? Но самая большая проблема в том, что почему-то при переносе строчек из Update в AddHeight у меня перестает адекватно меняться высота(он начинает делать смещение по игрику не в глобальных координатах, а в локальных). Из-за этого смещение получается вверх и в сторону камеры. Долго пытался это пофиксить или разобраться почему именно так это работает, но так и не нашел ответа
Здравствуйте. Обновление высоты можно действительно перенести в отдельный метод. Расскажем подробнее, как это сделать:
1. Для начала нужно прописать Update:
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
AddWidth(20);
}
if (Input.GetKeyDown(KeyCode.H))
{
AddHeight(20);
}
}
2. Далее добавьте метод для изменения высоты:
void UpdateHeight()
{
float offsetY = _height * _heightMultiplier + 0.17f;
_topSpine.position = _bottomSpine.position + new Vector3(0, offsetY, 0);
_colliderTransform.localScale = new Vector3(1, 1.84f + _height * _heightMultiplier, 1);
}
3. Изменять значение можно с помощью методов SetHeight и AddHeight:
public void AddHeight(int value)
{
_height += value;
UpdateHeight();
if (value > 0)
{
_increaseSound.Play();
}
}
public void SetHeight(int value)
{
_height = value;
UpdateHeight();
}
Все равно не деформируется персонаж когда проходит через ворота
Здравствуйте. Деформация может не происходить по нескольким причинам:
1. Если Rigidbody находится ещё на одном объекте Player, который является дочерним. Тогда вызов через attachedRigidBody возвращает Rigidbody, который используется для коллайдера. В этом случае необходимо проверить, к какому объекту привязан Rigidbody.
2. Триггер срабатывает некорректно. Нужно проверить имя объекта, к которому обращается attachedRigidBody, с помощью кода:
Debug.Log(other.attachedRigidbody.gameObject.name);
3. Имеются неточности в скрипте изменения высоты. Рекомендуем просмотреть видео и повторить все шаги.
Здравствуйте. А если я взял другого персонажа, потратил несколько часов на раскраску его развёрток, вручную(.
Теперь, чтобы работало со всеми объектами, нужно массив рендеров составлять или каждый отдельно перемножать?
Я сделал 6 шейдер графов и на каждый повесил материал.
Тоже самое(((
+
Пришлось возвращаться к модельке как в уроке.
Здравствуйте. Если правильно вас поняли, можно создать новый материал - сделать копию старого. Затем для нового персонажа заменить старый на новый.
Я добавил другую модель из scetchfab, загрузил ей скелкт в миксамо и повесил новые анимации, все работает, но перестал двигаться трансформ точек спайн, даже когда в режиме сцены все меняю - возвращается обратно. Из за чего это?
Здравствуйте. Зайдите в объект с игроком и посмотрите, меняется ли его позиция? Если значения остаются прежними, то откройте скрипт «PlayerMove» и проверьте код на соответствие следующему:
void Update()
{
if (Input.GetMouseButtonDown(0))
{
_oldMousePositionX = Input.mousePosition.x;
_animator.SetBool("Run", true);
}
if (Input.GetMouseButton(0))
{
Vector3 newPosition = transform.position + transform.forward * Time.deltaTime * _speed;
newPosition.x = Mathf.Clamp(newPosition.x, -2.5f, 2.5f);
transform.position = newPosition;
float deltaX = Input.mousePosition.x - _oldMousePositionX;
_oldMousePositionX = Input.mousePosition.x;
_eulerY += deltaX;
_eulerY = Mathf.Clamp(_eulerY, -70f, 70f);
transform.eulerAngles = new Vector3(0, _eulerY, 0);
}
if (Input.GetMouseButtonUp(0))
{
_animator.SetBool("Run", false);
}
}
23:30 начал что то жестить) Как начинающему вообще непонятно
Что делать,если нет пункта push value
Здравствуйте. Чтобы пункт «Push Value» появился в Unity, нужно установить бесплатный пакет «Shader Graph» в «Package Manager».
Почему не работают шейдеры? они отображаются как неизвестный файл, а когда создаешь материал на основе шейдера создается дефолтный материал без "свойства шейдеров"
Скорее всего проект создал в 3D, а не 3D (URP). Из за этого у тебя не установился шейдер эдитор и соответствующий рендер.
Надо будет тебе проект переконвертировать в 3d (urp).
В чате выкладывали инфу, как все это сделать.
Здравствуйте. Проект может не распознавать шейдеры, если версия Unity не совпадает с версией автора программы. Рекомендуем установить версию Unity 2022.1.12f1 и заново загрузить шейдеры - это должно помочь.
@@yagamesdevнельзя как-то иначе это сделать ведь говорилось что можно использованить версии unity начиная с 2019
когда я создаю или переношу проект на 3д URP в консоли выскакивают ошибки CS0103 и CS0246. Как фиксить?
Здравствуйте. Рекомендуем задать вопрос в нашем чате по Unity: t.me/yagamesunity Возможно, что кто-то из разработчиков уже сталкивался с подобным и подскажет решение.
Буду рад, если кто-то подскажет. У меня другой персонаж, естественно, если я буду накладывать материал созданный на основе шейдера, то мой персонаж станет жёлтый. Как я могу сделать так, чтобы в инспектор этого материала также были бы Base Map, Normal Map и т.п., для того чтобы я мог положить текстуру на персонажа. Пытался шаманить в нодах шейдера, так ничего и не смог изменить. Если кто-то это решил, подскажите пожалуйста.
Здравствуйте. Для этого нужно внести правки в шейдер Push. Расскажем подробнее.
Для изменения Base Map и Normal Map создайте 2 текстуры в данном шейдере и нод Sample Texture 2D. После поле Texture(T2) объедините с текстурой Base Map, а поле RGBA(4) с выходным нодом Fragment - Base Color(3). Тот же алгоритм действий нужно повторить с Normal Map. В этом случае вместо Base Color(3) нужно использовать Normal (Tangent Space)(3).
@@yagamesdev огромное спасибо, что отвечаете и поддерживаете до сих пор!
@@yagamesdev Огромное спасибо, не сразу понял что да как, но как разобрался - стало все ясно! Помогли очень
Что делать если я не могу устоновить Universal RP в готовый проект.
Роман, здравствуйте. Рекомендуем создать новый проект на Universal RP и загрузить в него все материалы из старого. Это должно помочь.
А что делать если игровой объект стал просто розовым
можно как то сделать чтобы вернуть цвет отбратно
Здравствуйте. Чтобы исправить отображение цвета, рекомендуем установить новую версию Unity. А также создать проект заново и загрузить ассет нового проекта из прошлой папки.
Мне кажется, что для enum'ов лучше switch использовать.
удобнее использовать перечисления, т.к там хотя-бы легко ориентироваться в коде чем в том же самом switch
У меня не деформируется персонаж после входа в ворота
У меня тоже :/
Здравствуйте. Рекомендуем на ворота добавить коллайдер, далее через него настроить изменения характеристик. Также повторите все шаги из видео: clck.ru/34aPcn
При импортировании шейдеров сразу же вылазит ошибка:
ArgumentException: JSON parse error: The document root must not follow by other values.
Подскажите в чем проблема?
Привет, решил как-то эту проблему?
Максим, здравствуйте. Такое бывает, когда в файле шейдера или его метаданных присутствуют некорректные материалы, которые не соответствуют JSON-синтаксису. Чтобы убрать это уведомление, рекомендуем сделать следующее:
1. Проверьте, имеет ли файл шейдера расширение .shader и соответствует ли он требованиям Unity для такого формата.
2. Уберите сторонние файлы или метаданные из папки с шейдерами.
3. Перепишите файл шейдера с помощью текстового редактора. Это нужно, чтобы убедиться в том, что все символы и данные соответствуют JSON-синтаксису и отсутствуют ненужные пробелы или дополнительные значения.
4. Если ошибка продолжает воспроизводиться - может быть повреждён файл шейдера. Перезапустите Unity или переустановите шейдеры и используйте обновленные файлы.
Игрок не деформируется проходя через ворота
то же самое
Не забудьте поставить на объект Player материал Push, и у вас должно заработать.
Здравствуйте. Необходимо добавить коллайдер на ворота и через него настроить изменения характеристик. Дополнительно рекомендуем повторить все шаги из видео: clck.ru/34aPcn
Почему не TryGetComponent?
тоже об этом подумал:
private void OnTriggerEnter(Collider other)
{
if (other.attachedRigidbody.TryGetComponent(out PlayerModifier playerModifier))
{
if (_deformationType == DeformationType.Height)
{
playerModifier.AddHeight(_value);
}
else if (_deformationType == DeformationType.Width)
{
playerModifier.AddWidth(_value);
}
}
}
@@Geralld ну можно и так) вообще все по разному можно)
Ну например мой подход позволяет использовать переменную playerModifier за пределами if-а.
Иногда это нужно.
Но вообще TryGetComponent именно тут больше подходит. Хотя без разницы почти.
Здравствуйте. Да, можно использовать «TryGetComponent».
А где ссылка на скачивание шейдеров?
В следующем уроке.
@@poshlhumorrr в следующем уроке сборка проекта после всех изменений в этом уроке. А хотелось бы именно шейдеры, как было в приложениях к предыдущим урокам(
Подстава. Пришлось перейти на следующий урок и скачать весь проект. А потом вытянуть папку с шейдерами ...
@@Geralld заливай на обменник 😀
@@ibi-san Да с этим согласен, в первых уроках было удобнее, но лично для меня не составило труда скачать архив и взять от туда только то что нужно.
почему-то модель игрока рассыпается на полигоны когда у материала увеличивается параметр PushValue(((( может кто знает причину уже несколько часов мучаюсь
Здравствуйте. Такое бывает, когда установка Unity прошла некорректно. Рекомендуем скачать версию 2021.1.11, которая используется в видеокурсе. Найти её можно по ссылке: clck.ru/34Xjfj
Я потерял папку с скриптами, все скрипты исчезли
У меня у одного шейдеры выглядят не так же? Собственно так же как и не работает? Просто розовый материал.
Такая же проблема
@@fayevalentine6070 Проблема в том, что создал просто 3D проект, без URP, советую создать новый, с URP и в него перенести ассеты, ну или по новой собрать
@@odmv А без URP не выйдет? У меня UNITY со всем не хочет создавать проект такого типа, все время ошибку пишет(
@@ЮлияАнтонова-х4д если хотите использовать шейдер, чтобы персонаж толстел, то нет, не выйдет, видимо.
Может быть как то можно в пустой проект импортировать юрп, но я пересоздал проект просто
Александр, здравствуйте. Проект должен быть создан из шаблона URP: ruclips.net/video/nB2uymAe68I/видео.html
Также рекомендуем использовать версию Unity не старше 2021 года.
У меня возникала такая ошибка при изменинии растояниями между спиной1 и спиной2
"error CS0104: 'Vector3' is an ambiguous reference between 'UnityEngine.Vector3' and 'System.Numerics.Vector3' "
Я заменил Vector3(0,2,0) на UnityEngine.Vector3(0,2,0) и все заработало.
ПОчему так?
Может кому-то поможет мой коментарий.
Класс Vector3 встречается в нескольких пространствах имен (namespace) и компилятор не знает какой из них использовать. Поэтому тут либо отрубаешь ненужный неймспейс (в самом верху удалить/закомментировать строчку using System.Numerics;), либо если он нужен сделать как ты: указать более конкретное расположение класса через указание его нейспейса.
Отсутствует ссылка на скачивание шейдеров
Здравствуйте. Добавили в описание под видео. Посмотрите, пожалуйста.
The .meta file Assets/Shaders/Push 2.shadergraph.meta does not have a valid GUID and its corresponding Asset file will be ignored. If this file is not malformed, please add a GUID, or delete the .meta file and it will be recreated correctly
У меня при нажатии на Play, в видео это 16.42 минута, в данном этапе рост персонажа резко улетает ввысь на бесконечность... Делаю как у него... Подскажите пожалуйста, у кого такая же ситуация была?
А нет, всё норм. Местами оказывается перепутал Top и Bottom, когда в инспектор перекидывал ссылки
то что вы помните что высота 1.84м это очень хорошо, а как нам это посмотреть ?
В 13ом уроке когда настраивали высоту коллайдера по scale Y в инспекторе выставляли эту величину. От туда и значение.