Varwin SDK предоставляет интерфейс для обработки коллизий с объектами

IColliderAwareLink to IColliderAware

IColliderAware реализуется для так называемых зон, которые можно использовать для того, чтобы определять нахождение игрока или предметов в какой-либо области. Следовательно, при использовании интерфейса необходимо, чтобы коллайдер объекта был триггером

public interface IColliderAware
{
    void OnObjectEnter(Wrapper[] wrappers);
    void OnObjectExit(Wrapper[] wrappers);
}

OnObjectEnter вызывается, когда Varwin объект сталкивается с данным объектом. Аналог Unity метода OnTriggerEnter для Varwin объектов

OnObjectExit вызывается, когда Varwin объекты перестают взаимодействовать. Аналог Unity метода OnTriggerExit для Varwin объектов

Как создать зонуLink to Как создать зону

В библиотеке объектов Varwin существует объект Custom zone, который виден в режиме редактирования и невидим в режиме просмотра. Custom zone предоставляет события на вход объектов в зону и выход объектов из зоны

Данный урок пошагово рассказывает о процессе создания объекта зоны, реагирующей на появление объектов. Для изменения видимости зоны в зависимости от режима работы GameMode достаточно реализовать интерфейс IGameModeSubscriber

Шаг 1. Создать куб, добавить его на слой Zones

Подробнее Varwin слои

Добавить Kinematic Rigidbody

Установить на коллайдере Is Trigger

Создать прозрачный материал и назначить на куб

Шаг 2. Создать Varwin объект

Подробнее Создание объектов

Теперь объект в сцене стал префабом, и на нем появились скрипты VarwinObjectDescriptor и TutorialZone

TutorialZone - основной скрипт объекта, наследник VarwinObject

Шаг 3. Реализация логики

Открыть класс TutorialZone, реализовать интерфейс IColliderAware

Создать делегат ZoneObjectHandler - обработчик событий

Создать события ObjectEnterEvent и ObjectExitEvent

Пометить события атрибутами, позволяющими использовать их в blockly. Ссылка: подробнее про атрибуты

Создать массив врапперов объектов, содержащихся в зоне в данный момент containedObjects

Реализовать методы OnObjectEnter и OnObjectExit (см. код). Данные методы получают массив врапперов объектов, которые находятся в зоне в данный момент. Перед тем, как обновлять локальный массив врапперов необходимо сравнить локальный и обновленный массивы и вызвать соответствующее событие в случае изменения

public class TutorialZone : VarwinObject, IColliderAware
{
    public delegate void ZoneObjectHandler(Wrapper wrapper);

    [EventGroup("collision events")]
    [Event(English: "object entered zone")]
    public event ZoneObjectHandler ObjectEnterEvent;

    [EventGroup("collision events")]
    [Event(English: "object exited zone")]
    public event ZoneObjectHandler ObjectExitEvent;

    private Wrapper[] containedObjects;

    public void OnObjectEnter(Wrapper[] wrappers)
    {
        foreach (Wrapper obj in wrappers)
        {
            if(containedObjects == null || !containedObjects.ToList().Contains(obj))
            {
                ObjectEnterEvent?.Invoke(obj);
            }
        }
        containedObjects = wrappers;
    }

    public void OnObjectExit(Wrapper[] wrappers)
    {
        foreach (Wrapper obj in containedObjects)
        {
            if (wrappers == null || !wrappers.ToList().Contains(obj))
            {
                ObjectExitEvent?.Invoke(obj);
            }
        }
        containedObjects = wrappers;
    }
}

Шаг 4. Сбилдить объект

Подробнее: Билд объектов

Шаг 5. Загрузить объект в Varwin XRMS

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

Подписаться в блокли на созданные события - при попадании в зону объекта лампочка включается, при выходе - выключается

Шаг 6. Тестирование

Запустить режим предпросмотра или просмотра

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