Как сделать триггер в юнити

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

на персонаже стоит тег Player, но при пересечении им триггера, не выполняется условие. тестировал с простым кубиком, котороый просто падает на триггер и имеет такой же тег, тоже не работает. подскажите пожалуйста в чем может быть проблема.

BeLiar

Знаток

Во-первых: эта строчка "collider.isTrigger = true;" соответствует галочке в эдиторе. Если она на момент запуска не будет установлена, то события этого триггера никогда и не будут вызваны.

Во-вторых: Когда галочка установлена изначально, компонент-коллайдер становиться "зоной реакции". Чтоб с ней взаимодействовать нужен объект с компонентами коллайдера и ригидБоди(. ). Скрипт с реакцией триггера должен быть на том же объекте, что и коллайдер-триггер.
Так же в настройках физики проекта, в матрице столкновений, между слоями этих объектов должны быть включены столкновения.

Вообще на сайте юнити есть обучающий видеоурок, как раз на тему триггеров, советую посмореть.

darkness.00

Знаток

Извиняюсь, что подробно не описал все настройки. На прикреплённом изображении видно как всё настроено. По сути делал всё как в видеоуроке, не могу найти почему не работает.


Это блог про аниме?

Intermedius — находящийся посередине. Думаю, что все, кто смотрел хотя бы одну серию аниме, замечали небольшую вставку в середине, которая обычно служит для перехода между сценами и рекламного блока (англ. - bumper, яп. - アイキャッチ aikyatchi). Картинка из заголовка статьи является таким переходом в одной из серий тайтла “New Game!!", про небольшую игровую студию. Ах да, раз это блог про Unity, то в данном посте мы рассмотрим оформление перехода между сценами именно в нём. =)

Сцены в Unity являются основной единицей деления игры на части и сам по себе переход между ними не является чем-то сложным. Переход реализуется через класс SceneManager, при помощи методов LoadScene() или LoadSceneAsync(), но без дополнительного оформления эти переходы будут резкими и это будет выглядеть странно. Попробуем сгладить этот переход, добавив проекту немного визуальной привлекательности.

Схема довольно проста: обе сцены, между которыми осуществляется переход, должны быть визуально идентичны на момент выгрузки предыдущей и загрузки следующей. Манипуляции для такого перехода обычно организуются через анимацию элементов сцены. Для примера в этом посте мы используем чёрный экран(элементом, отвечающим за данный эффект, будет картинка чёрного цвета). Выгружаемая сцена должна постепенно уйти в чёрный цвет, а следующая за ней плавно из него появиться.

Слово анимация как бы намекает нам на использование механизма в Unity под названием "Mecanim". Если вы не очень с ним знакомы, то можно прочитать(а ещё лучше использовать его в качестве упражнения) предыдущий пост "Шаблон Состояние", в котором, в целях тренировки, этот механизм использовался для создания машины состояний без анимации.

Задача

Оформить переход между тремя сценами через затемнение. Первая сцена появляется моментально и через 2 секунды переходит во вторую. Переходы между второй и третьей зациклены и осуществляется плавно по клику.

Подготовка

  1. Создадим три сцены:
    • BootScene - самая первая сцена, на которую попадает игра, покажем её сразу без затемнения
    • FirstScene и SecondScene - две сцены, переходы между которыми буду зациклены между друг другом
  2. Добавим сцены в Build Settings
  3. Создадим ещё один объект Canvas с именем SceneTransition . Выставим ему Render Mode - Screen Space - Camera и добавим Main Camera . Выставим Order in Layer равным 999 , чтобы он всегда был поверх всего остального
  4. Добавим к SceneTransition объект типа Image и назовём его Fade . Полностью чёрный, перекрывающий всю площадь экрана. Можно его отключить, чтобы он не загораживал экран

Анимация

  1. Создадим папку Animations
  2. Откроем панель Animation . Выделив элемент Fade нажмём кнопку Create и создадим анимацию FadeIn , также создадим анимацию FadeOut
  3. Настроим анимацию FadeIn . Выделяем ассет FadeIn . Убираем галочку Loop Time . Выделяем элемент Fade . В закладке Animation нажатием кнопки Enable/Disable keyframe recording mode включаем запись действий. Включаем компонент Image . Переходим в закладке Animation на отметку в 1 секунду. Выставляем в настройке цвета alpha = 0 . Выключаем компонент Image . В закладке Animation выключаем запись действий. Проверяем анимацию плавного появления UI из затемнения
  4. Настраиваем анимацию FadeOut , но в обратном порядке: включаем Image , альфа-канал от 0 до 100 . Этот пункт остаётся в качестве тренировки
  5. Настраиваем переход между анимациями. Во вкладке Animator добавляем триггер FadeOut . Добавляем переход между FadeIn и FadeOut . На переходе выключаем Has Exit Time , Transition duration выставляем в 0. В Conditions добавляем созданный триггер FadeOut
  6. Создадим скрипт TransitionHandler для переключения сцены после завершения анимации FadeOut

  1. Добавим созданный скрипт к объекту Fade . В конец анимации FadeOut добавим Event . Выберем функцию FadeOutFinished() из скрипта TransitionHandler

Настройка переходов

  1. Для BootScene создадим скрипт, который будет запускать переход на FirstScene через 2 секунды
  1. Настроим BootScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - FirstScene . Отключим анимацию появления сцены
  2. Добавим на сцену пустой объект назовём его BootHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. После запуска BootScene должна иметь затемнение перед переключением
  4. Создадим скрипт ClickHandler для остальных сцен, который будет запускать переход по клику
  1. Настроим FirstScene . Добавим префаб SceneTransition . Настроим камеру. Укажем следующую сцену - SecondScene
  2. Добавим на сцену пустой объект назовём его ClickHandler и добавим соответствующий скрипт. Настроим для нового объекта animator
  3. Настроим SecondScene . Проделываем те же самые шаги, что и для FirstScene , только указываем следующей сцену - FirstScene
  4. Наслаждаемся результатом

Заключение

После всех наших манипуляций мы получили префаб, который можно использовать для настройки переходов между сценами. Навряд ли вы будете его использовать для продакшена, так как используемая синхронная загрузка сцен не очень красивое решение, а также необходима тонкая настройка условий перехода, необходимо продумать остановку игры, в момент начала анимации. Да и сами анимации желательно сделать более интересными, например, в Homescapes(Playrix) переход между загрузкой ресурсов и запуском меню скрыт за опускающейся вдоль стены дома камерой. Однако, после повторения данных шагов собственными руками, у вас должно сложиться представление, как сделать переходы красиво. Пока! =)

Заранее спасибо, акума

3 ответа

enter image description here

Обратите внимание, что вы следуете плагиатной версии оригинального учебника "Roll-a-ball" , в котором упущено так много всего. Вы должны следовать оригинальному учебнику здесь. Посмотрите 10 секунд из этого видео, в котором описывается то, что вы пропустили, и это то, что я описал выше.

В качестве альтернативы (для тех, кому нужно или нужно гравитация включена для их кубов):

Two colliders, one box

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

Unity — это среда, которая позволит детям почувствовать себя настоящими разработчиками игр! На движке Unity 3D ребята могут создавать анимацию, запрограммировать игровую сцену и полноценные игры. А также познакомиться с языком программирования "Си шарп", на котором в Unity пишутся скрипты.

Школа программирования для детей "Пиксель" подготовила бесплатные уроки Unity 3D, которые познакомят детей с программой и научат создавать первые игры. Поддержите нас, ставьте палец вверх, если наш бесплатный курс по Юнити окажется полезным для ваших детей.

Как скачать Unity 3D на ПК

Для начала скачаем и установим программу на компьютер.

Урок 1. Как сделать анимации в Unity 3D

Начинаем уроки по Юнити. Первый шаг — анимирование персонажа. Мы добавим нашего дракона на сцену, изменим его размеры, научим его двигаться и бегать с заданной скоростью. Напишем наш первый скрипт.

Урок 2. Как сделать телепорт в Unity 3D

Мы узнаем, как сделать так, чтобы персонаж быстро перемещался с одной точки сцены в другую. Возьмем два куба и создадим для них скрипт: при касании одного куба наш персонаж будет мгновенно перемещаться к другому кубу.

Урок 3. Как сделать спавн объектов в Unity 3D

Мы изучим 2 способа создания спавна объектов: на канвасе (canvas) и в пределах камеры. А еще узнаем, как создавать префабы.

Урок 4. Триггеры в Unity 3D | Столкновение персонажей

Триггеры чаще всего нужны, чтобы собирать бонусы в игре или наносить урон персонажу. Поэтому в этом видео мы научимся программировать сбор бонусов и сталкивать персонажей.

Урок 5. Как создать таймер в Unity 3D

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

Урок 6. Перемещение объекта мышью в Unity 3D

Функция Mouse Drag или, по-другому, метод перетаскивания нужен для того, чтобы перетаскивать объекты в игре. Например, как мы показываем в видео, чтобы перемещать еду на персонажа и кормить его.

Урок 7. Как сделать полосу здоровья персонажа в Unity 3D

Health Bar или полоса здоровья тоже неотъемлемая часть любой игры. Мы научимся ее программировать, так чтобы полоса плавно увеличивалась и уменьшалась.

Урок 8. Как сохранить игру в Unity 3D

Если мы хотим сохранять очки или уровни в нашей игре, то нужно воспользоваться методом PlayerPrefs.

Урок 9. Создаем игру "Раннер" в Unity за 30 минут

Урок 10. Как экспортировать игру из Unity на ПК или Android (как настроить для Play Market)

В этом видео расскажем, как собрать игру под ПК или под Android: в каком порядке собрать сцены, какие им дать номера, а еще какие настройки нужны, чтобы загрузить игру Play Market.

Урок 11. Как загрузить игру в Play Market

Мы собираем игру и заполняем все настройки для Play Market. Теперь другие пользователи смогут сыграть в вашу игру, а вы будете на этом зарабатывать.

Урок 12. Как сделать прыжок в Unity 3D

В этом уроке мы разберем, как сделать прыжок персонажа в 2D- и в 3D-проекте. Для этого мы создадим две сцены, напишем скрипты на языке Си Шарп.

Урок 13. Как управлять персонажем в Unity 3D

Давайте научим нашего персонажа двигаться. Для этого мы зададим переменные типа float, они будут отвечать за скорость, поворот и перемещение по горизонтали и по вертикали. И, конечно, напишем скрипты для 2D- и 3D-версии игры.

Урок 14. LineRenderer в Unity 2D

LineRenderer позволяет упростить рисование линий. В этом видео мы напишем два скрипта: Line Point позволит проводить прямую линию между любыми двумя точками, а с помощью Draw Line мы сможем рисовать неотрывную линию.

Урок 15. Как сделать автосимулятор в Unity 3D | Как сделать гонки в Unity 3D

Пришло время сделать гоночную игру! Давайте построим небольшую трассу, настроим модель автомобиля и напишем код для коробки передач: наш автомобиль будет двигаться в разные стороны и менять скорость.

Наши плейлисты регулярно пополняются, подписывайтесь на наш YouTube-канал , чтобы следить за выходом новых видео и открывать для себя мир IT-технологий!

Если же вам нужен наставник, загляните в Школу программирования для детей “Пиксель”: запишитесь на полный курс по разработке игр на движке Unity 3D .

Здравствуйте, как можно через скрипт, повеить на колайдер параметр тригер, при определенных условиях. Вот например что если объект коснется какого то объекта с таким то именем или тегом. Я сделала скипт, но он почему то не работает, подскажите пожалуйста, как этоможно реализовать

private void Start()
gameObject.AddComponent();

private void Update()
void OnTriggerExit2D(Collider2D other)

if (other.tag == "okno")
gameObject.AddComponent().isTrigger = true;
else
gameObject.AddComponent().isTrigger = false;
>
>

У тебя if не в методе находиться. Он должен быть в void Start(), void Update, либо в void OnTriggerExit2D(Collider2D other). Взгляни на фигурные скобки, в них ошибка.


Только заметил, у тебя метод в одном методе. Это ошибка.

ну можно вот так, все равно почему то не работает, вроде по скобочкам щас нет проблем
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Perevoz : MonoBehaviour

private void Start()
gameObject.AddComponent();

void OnTriggerExit2D(Collider2D other)

if (other.tag == "okno")
gameObject.AddComponent().isTrigger = true;
else
gameObject.AddComponent().isTrigger = false;
>


Рыжий Кот Мастер (1354) Диана Франчук,

Мейл корёжит дженерик методы, и вот это вот ".AddComponent();" не даёт понять что там у тебя написано, но допустим там всё правильно - ".AddComponent ()" или типа того.
- OnTriggerExit - это не когда объект /коснётся/ триггера, а когда выйдет из него.
- Что бы OnTriggerExit / OnTriggerEnter работали, второй коллайдер НЕ должен быть триггером, и на одном из двух объектов должен висеть RigidBody.
Проверь, соблюдены ли эти условия.

Читайте также: