Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78

Переход между сценами [ пересечение с объектом ]

05.09.2017, 13:58. Показов 8420. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток
Прошу помощи, сломал всю голову
Есть персонаж, есть дверь (на двери бокс коллайдер)
Надо чтобы при достижении двери и нажатии клавиши E, открывалась другая сцена

пробовал так:

C#
1
2
3
4
5
6
7
private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.name == "Door" && Input.GetKey(KeyCode.E))
        {
            Application.LoadLevel(Application.loadedLevel + 1);
        }
    }
проблема в том, что нужно держать е и бежать в дверь, чтобы произошло пересечение (Collision)
а мне надо чтобы я либо стоял около объекта или в нём, но коллайдер не позволяет
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2017, 13:58
Ответы с готовыми решениями:

Переход между сценами
Как смягчить переход между сценами??

Переход между сценами и сокет
Ребят подскажите как реализовать переход со сцены авторизации на игровую сцену и сохранить подключенный сокет . скрипт весит на камере...

Не работает переход между сценами через триггер (с#)
пытался создать скрипт для перехода между сценами, но по какой-то причине он не работает. вот сам скрипт. этот скрипт тестовый,...

12
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 14:02
OnCollisionEnter2D
OnCollisionStay2D
0
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 14:06  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
OnCollisionStay2D
Опять же, если зажать Е и нагло намеренно упираться в колайдер двери, то переходит, а если просто рядом стоять, то нет
0
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 14:11
https://docs.unity3d.com/Scrip... tay2D.html

Вызов происходит каждый кадр. Возможно, у Вас не так настроена физика.
Попробуйте прописать в этой функции Debug.Log("") и посмотреть: когда она работает.

Добавлено через 43 секунды
Цитата Сообщение от CVBA Посмотреть сообщение
а если просто рядом стоять, то нет
Рядом != упираться в коллайдер?

Добавлено через 1 минуту
Сама функция вызывается только при столкновении коллайдеров. Вы можете использовать триггеры вместо коллайдеров.
0
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 14:18  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Вызов происходит каждый кадр
Это всё ясно, что каждый кадр и т.д., Вы меня не понимаете

В 1 случае, я постоянно иду в коллайдер (естественно метод вызывается т.к. я пересекаюсь с ним)




А во втором случае, я просто стою рядом, они не пересекаются -> метод не вызывается.
0
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 14:20  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Вы можете использовать триггеры
OnTriggerEnter2D?
0
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 14:21
Цитата Сообщение от CVBA Посмотреть сообщение
OnTriggerEnter2D?
OnTriggerStay2D
Соответственно, Вам так же нужно настроить триггер.
1
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 14:27  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
настроить триггер
Спасибо за то, что помогаете

Не очень понял формулировку "настроить", можно по подробнее, так?
C#
1
2
3
4
5
6
7
private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.name == "Door" && Input.GetKey(KeyCode.E))
        {
            Application.LoadLevel(Application.loadedLevel + 1);
        }
    }
Добавлено через 3 минуты
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
настроить триггер.
Всё, спасибо, я понял
0
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 14:28
Лучший ответ Сообщение было отмечено CVBA как решение

Решение

Физика на персонаже?
Тогда добавить к двери еще один BoxCollider2D, поставить галочку isTrigger и растянуть его на нужную зону.
0
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 16:05  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Физика на персонаже?
Тогда добавить к двери еще один BoxCollider2D, поставить галочку isTrigger и растянуть его на нужную зону
Да, на персонаже, так и сделал, спасибо!

Добавлено через 1 час 36 минут
Стал проверять ещё раз и понял, что вызов функции идёт только если я двигаюсь, а если стою и нажимаю E, ничего не происходит.
0
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 16:20
Уже точно не помню. Кажется, физические события (коллизия, триггеры) вызываются только во время обработки событий Rigidbody
То есть, если Rigidbody на персонаже, то обработка триггеров и коллизий происходит только тогда, когда происходит движение персонажа (Rigidbody).
Проверял, будет ли считаться статичный. Не считается.
Тогда лучше всего E сделать в Update. Добавить bool inTrigger
Переключать переменную в OnTriggerEnter и OnTriggerExit
Если допускается попадание в несколько триггеров (дверей), то int (+1/-1)

Все события и т. п. +2D

Добавлено через 1 минуту
C#
1
2
3
4
 if (collision.gameObject.name == "Door")
        {
inTrigger=true // или false в OnTriggerExit2D
}
0
1 / 1 / 4
Регистрация: 22.03.2016
Сообщений: 78
05.09.2017, 16:28  [ТС]
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Тогда лучше всего E сделать в Update
ну об этом я думал, просто думал, что есть способы попроще, без костылей
и ещё, если у меня на карте 20+ дверей, мне кажется это жёстко, проверять каждый раз вход и выход
Всё-равно, СПАСИБО!

Может кому ещё придет в голову, что-то

Добавлено через 1 минуту
Цитата Сообщение от Nikita_Nikita Посмотреть сообщение
Если допускается попадание в несколько триггеров (дверей), то int (+1/-1)
Все события и т. п. +2D
Не очень понял, о чём Вы. Можно немного поподробнее?
0
70 / 71 / 19
Регистрация: 01.05.2013
Сообщений: 279
05.09.2017, 16:38
Цитата Сообщение от CVBA Посмотреть сообщение
мне кажется это жёстко, проверять каждый раз вход и выход
Почему? В скрипте игрока прописали 2 события - вход и выход из триггера двери - и всё.

Цитата Сообщение от CVBA Посмотреть сообщение
Не очень понял, о чём Вы. Можно немного поподробнее?
Ко всем названиям, что я писал, допишите 2D (Rigidbody - Rigidbody2D)

Цитата Сообщение от CVBA Посмотреть сообщение
Если допускается попадание в несколько триггеров (дверей), то int (+1/-1)
Если у Вас есть рядом стоящие двери, то bool переменная не будет корректно работать. Однако, если такого нет, то лучше использовать bool
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2017, 16:38
Помогаю со студенческими работами здесь

Дистанция между колижн моделью и объектом
Мне нужно найти расстояние между объектами для отрисовки прицела у танка distanceToHitGun = (Vector3.Distance(Terrein.position...

Monogame переход между "сценами"
Здравствуйте. Клепаю игрушку в Monogame. Код заготовки меню и самой игры в разных файлах. Первоначально всё планировалось так: Начальный...

Переключение между сценами
Добрый день! Как написать код для переключения сцен (слайдов) ? AS3 чтобы на 1 слайде была кнопка, которая перебрасывает на другой слайд,...

Передача данных между сценами
На пример на Сцене 1 : log_it.text = "gfdfg"; Чтоб на сцене 2 : info.text = log_it.text;

При переходе между сценами возникает ошибка
есть 2 сцены: на одной карта, на другой фотография. На карте (сцена 1) есть персонаж, который передвигается и при столкновении с объектом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru