Как проверить соприкосновение объектов в unity
Перейти к содержимому

Как проверить соприкосновение объектов в unity

  • автор:

Скрипт соприкосновения двух объектов. Unity 2D.

Здравствуйте, есть player, и объект. У игрока только есть коллайдер. Можно наверное порыться в настройках коллайдера у объекта, и отключить штуку прикосновения с другими коллайдерами, и чтоб только в скрипте виделось что они соприкоснулись. И нужно когда они соприкоснутся выводить Text (создать объект: UI: Text). Я не знаю как это сделать. Заранее спасибо за ответ.

Лучший ответ

создаешь у обьекта коллаидер делаешь его тригером. используешь OnTriggerEnter
https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html
manual

Andrew KotovskiyУченик (170) 4 года назад

Спасибо, сейчас попробую

Остальные ответы

Как проверить соприкосновение объектов в unity

Текущее время: 15 фев 2024, 12:05

Соприкосновение объекта с другим объектом

Общие вопросы о Unity3D
Сообщений: 10 • Страница 1 из 1

Соприкосновение объекта с другим объектом

iorin 01 апр 2019, 16:49

Приветствую ,не подскажите как сделать так,что-бы бы когда объект сталкивался с определенным объектом,происходили разные операции.
К примеру я знаю про OnCollisonEnter(и др.), но как сделать проверку на то,с каким объектом он столкнулся.

iorin UNец Сообщения: 10 Зарегистрирован: 31 мар 2019, 21:52

Re: Соприкосновение объекта с другим объектом

VladikDEV 01 апр 2019, 16:59

так вот параметр этого метода и есть другой объект, проверяй
VladikDEV UNIт Сообщения: 88 Зарегистрирован: 24 май 2016, 13:45 Откуда: Минск

Re: Соприкосновение объекта с другим объектом

iorin 01 апр 2019, 17:19

VladikDEV писал(а): так вот параметр этого метода и есть другой объект, проверяй

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

iorin UNец Сообщения: 10 Зарегистрирован: 31 мар 2019, 21:52

Re: Соприкосновение объекта с другим объектом

1max1 01 апр 2019, 17:21

Для этого есть теги и имена:
gameObject.tag
gameObject.name

1max1 Адепт Сообщения: 5503 Зарегистрирован: 28 июн 2017, 10:51

Re: Соприкосновение объекта с другим объектом

Valerich 01 апр 2019, 17:22

Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D coll ) //если 2D
{

if ( coll. gameObject . tag == «yourTag» ) //тег на том объекте с которым идет соприкосновение(вход)

{
// код, что происходит при соприкосновении
}
}

Valerich UNITрон Сообщения: 328 Зарегистрирован: 07 сен 2016, 11:24

Re: Соприкосновение объекта с другим объектом

Saltant 01 апр 2019, 20:38

Valerich писал(а): iorin
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D coll ) //если 2D
{

if ( coll. gameObject . tag == «yourTag» ) //тег на том объекте с которым идет соприкосновение(вход)

{
// код, что происходит при соприкосновении
}
}

Лучше использовать специальный метод для проверки тегов CompareTag
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D other ) {
if ( other. gameObject . CompareTag ( «Player» ) ) //где Player это таг который должен быть присвоен объекту который соприкасается с объектом на котором висит данный скрипт
//делаем нужное действие
}

Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant

  • Сайт

Re: Соприкосновение объекта с другим объектом

iorin 01 апр 2019, 20:55

Saltant писал(а):
Valerich писал(а): iorin
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D coll ) //если 2D
{

if ( coll. gameObject . tag == «yourTag» ) //тег на том объекте с которым идет соприкосновение(вход)

{
// код, что происходит при соприкосновении
}
}

Лучше использовать специальный метод для проверки тегов CompareTag
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D other ) {
if ( other. gameObject . CompareTag ( «Player» ) ) //где Player это таг который должен быть присвоен объекту который соприкасается с объектом на котором висит данный скрипт
//делаем нужное действие
}

а почему это ? С tag тоже все работает,и в документации я вроде не находил такого.
iorin UNец Сообщения: 10 Зарегистрирован: 31 мар 2019, 21:52

Re: Соприкосновение объекта с другим объектом

1max1 01 апр 2019, 21:06

а почему это ? С tag тоже все работает,и в документации я вроде не находил такого.

Скорей всего это будет немного быстрее https://answers.unity.com/questions/200 . rmanc.html

1max1 Адепт Сообщения: 5503 Зарегистрирован: 28 июн 2017, 10:51

Re: Соприкосновение объекта с другим объектом

Saltant 01 апр 2019, 21:08

iorin писал(а):
Saltant писал(а):
Valerich писал(а): iorin
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D coll ) //если 2D
{

if ( coll. gameObject . tag == «yourTag» ) //тег на том объекте с которым идет соприкосновение(вход)

{
// код, что происходит при соприкосновении
}
}

Лучше использовать специальный метод для проверки тегов CompareTag
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

void OnCollisionEnter2D ( Collision2D other ) {
if ( other. gameObject . CompareTag ( «Player» ) ) //где Player это таг который должен быть присвоен объекту который соприкасается с объектом на котором висит данный скрипт
//делаем нужное действие
}

а почему это ? С tag тоже все работает,и в документации я вроде не находил такого.

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

Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant

  • Сайт

Re: Соприкосновение объекта с другим объектом

Valerich 02 апр 2019, 00:55

Как сделать проверку на соприкосновение объектов?

Author24 — интернет-сервис помощи студентам

К примеру есть условие есть предмет находиться в тригери то что то происходит:

1 2 3 4
void OnTriggerStay (Collider dveri) { if (dveri.tag == "Player") // Двери открлись }

А как тут можно сделать проверку, находиться ли сейчас предмет с тегом Player в тригере dveri ?
Или как тут можно отменить действие если предмет не в тригере?(не покинул, а именно не находиться.)

Теперь подробнее: Если игрок попадает в тригер двери открываются, если сделать условие OnTriggerExit что бы двери закрывались, то тут проблема, если два игрока заходят в тригер, а один выходит из него — выполняется условие OnTriggerExit и двери закрываются, по условию. Вот и вопрос, как теперь сделать проверку есть ли объект(с тегом) в тригере, что бы оставить двери открытыми?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Соприкосновение объектов из библиотеки
Такая ситуация: я вызываю несколько объектов из библиотеки, моя задача — вызвать какое-то действие.

Реакция на соприкосновение объектов (Label)
Я тут короче маленькую игрушку пишу, смысл такой: Надо пройти лабиринт обьектом не касаясь стенок.

Проверка положения объектов относительно друг друга (соприкосновение)
пыф-пыф, жарко. Скажите, а вот возможно или нет: "Проверка положения обЪектов", я хочу.

Регистрация: 04.12.2013
Сообщений: 323

Мне кажется в OnTriggerExit сделать ещё одно условие: есть ли ещё один игрок. Если есть то не закрываем а если нет то закрываем

Эксперт .NETАвтор FAQ

10393 / 5124 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34

Лучший ответ

Сообщение было отмечено xxxlio как решение

Решение

xxxlio,
Нужно сделать так:
1) У скрипта двери должен быть флажок:

bool IsOpened;

Он должен принимать значение true если двери открыты и false — если закрыты.
2) Также у скрипта должно быть поле

float LastTriggerStayTime;

Это поле хранит время последнего момента, когда какой либо объект находился в триггере.
3) Код триггера должен быть на двери и выглядеть примерно так:

1 2 3 4 5 6 7
void OnTriggerStay (Collider col) { if (col.tag == "Player") { LastTriggerStayTime = Time.time; } }

4) Сам код открытия и закрытия двери должен быть в Update:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
void Update() { if(LastTriggerStayTime > Time.time - 1)//если в коллайдере кто-то был в последнюю секунду { if(!IsOpened) //и двери закрыты => открываем дверь { //открываем дверь. IsOpened = true; } }else { if(IsOpened) //в коллайдере уже 1 сек никого нет и двери открыты => закрываем дверь { //закрываем дверь. IsOpened = false; } } }

Как правильно определить соприкосновение?

Author24 — интернет-сервис помощи студентам

Мне нужно определять есть ли что-то под объектом с помощью лучей, делаю так — на объекте бокс коллайдер, есть 4 точки которые крепятся к углам коллайдера (для того чтобы при поворотах они там оставались), далее из этих точек пускаю лучи вниз, вот так кодом это выглядит

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
private BoxCollider BotCollider; public Transform GroundTouchpoint1; public Transform GroundTouchpoint2; public Transform GroundTouchpoint3; public Transform GroundTouchpoint4; private bool RayDown(Transform t){ return Physics.Raycast(t.position, Vector3.down, 0.1f); } private void RayDownTest(Transform t){ Debug.DrawRay(t.position, Vector3.down * 0.1f, Color.red); } private bool isGrounded RayDown(GroundTouchpoint2) else{ return false; } }} private void Awake(){ RB = GetComponentRigidbody>(); BotCollider = GetComponentBoxCollider>(); GroundTouchpoint1.position = BotCollider.center + new Vector3(BotCollider.size.x, -BotCollider.size.y, BotCollider.size.z) * 0.5f; GroundTouchpoint2.position = BotCollider.center + new Vector3(-BotCollider.size.x, -BotCollider.size.y, BotCollider.size.z) * 0.5f; GroundTouchpoint3.position = BotCollider.center + new Vector3(-BotCollider.size.x, -BotCollider.size.y, -BotCollider.size.z) * 0.5f; GroundTouchpoint4.position = BotCollider.center + new Vector3(BotCollider.size.x, -BotCollider.size.y, -BotCollider.size.z) * 0.5f; }

Используя RayDownTest я вижу что лучи идут оттуда откуда нужно, даже при поворотах они всегда исходят из углов коллайдера.
Но вот isGrounded показывает не то что нужно, если стою то всегда False, а если поворачиваюсь или хожу то в разнобой False и True.
Подскажите в чём может быть проблема?
(дело происходит в 3D, объект движется по осям X и Z, по Y прыгает/падает)

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как сделать проверку на соприкосновение объектов?
К примеру есть условие есть предмет находиться в тригери то что то происходит: void.

Как вычислить соприкосновение объекта с камерой?
По сути камера тоже объект так что к нему был прикреплен 2D Collider (границы расставлены по.

Как проверить соприкосновение границ двух Image по всем осям?
Здравствуйте,я начинающий программист и пишу курсовую на делфи 7. Хотел бы обратиться за помощью. .

Соприкосновение obj
Мне нужно чтобы при соприкосновении персонажа(Boy) с объектом(puck). Объект(puck) становился.

2635 / 1563 / 853
Регистрация: 23.02.2019
Сообщений: 3,876

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

41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122

ЦитатаСообщение от samana Посмотреть сообщение

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

немного сместил и вроде как лучи ловятся, но при этом я падаю, использую следующий код

1 2 3 4 5 6 7 8 9 10 11 12
void Update(){ if(Input.GetKeyDown(KeyCode.Space)){ velocity = jumpForce; } } void FixedUpdate(){ float vPos = rb.position.y + velocity * Time.fixedDeltaTime; rb.MovePosition(new Vector3(rb.position.x, vPos, rb.position.z)); if(!isGrounded){ velocity += (gravity * gravityScale) * Time.fixedDeltaTime; } }

тело не кинематическое, потому что с кинематикой не передвигается

MoveDir = new Vector3(InputGetAxisHorizontal, velocity , InputGetAxisVertical); rb.MovePosition(transform.position + MoveDir * Time.fixedDeltaTime * Speed);

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *