Нужна ваша помощь со скриптом под Unity

139
17 марта 2019, 04:00

На форуме Unity нашёл решение для ранее появившейся у меня проблемы, связанной с пересечение двух ScrollRect'ов(горизонтально и вертикально). Однако, сам что-то сообразить не могу, быть может, что-то делаю не так.

    using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
using UnityEngine.EventSystems;
public class ScrollRectEx : ScrollRect
{
    private bool routeToParent = false;

    /// <summary>
    /// Do action for all parents
    /// </summary>
    private void DoForParents<T>(Action<T> action) where T : IEventSystemHandler
    {
        Transform parent = transform.parent;
        while (parent != null)
        {
            foreach (var component in parent.GetComponents<Component>())
            {
                if (component is T)
                    action((T)(IEventSystemHandler)component);
            }
            parent = parent.parent;
        }
    }
    /// <summary>
    /// Always route initialize potential drag event to parents
    /// </summary>
    public override void OnInitializePotentialDrag(PointerEventData eventData)
    {
        DoForParents<IInitializePotentialDragHandler>((parent) => { parent.OnInitializePotentialDrag(eventData); });
        base.OnInitializePotentialDrag(eventData);
    }
    /// <summary>
    /// Drag event
    /// </summary>
    public override void OnDrag(UnityEngine.EventSystems.PointerEventData eventData)
    {
        if (routeToParent)
            DoForParents<IDragHandler>((parent) => { parent.OnDrag(eventData); });
        else
            base.OnDrag(eventData);
    }
    /// <summary>
    /// Begin drag event
    /// </summary>
    public override void OnBeginDrag(UnityEngine.EventSystems.PointerEventData eventData)
    {
        if (!horizontal && Math.Abs(eventData.delta.x) > Math.Abs(eventData.delta.y))
            routeToParent = true;
        else if (!vertical && Math.Abs(eventData.delta.x) < Math.Abs(eventData.delta.y))
            routeToParent = true;
        else
            routeToParent = false;
        if (routeToParent)
            DoForParents<IBeginDragHandler>((parent) => { parent.OnBeginDrag(eventData); });
        else
            base.OnBeginDrag(eventData);
    }
    /// <summary>
    /// End drag event
    /// </summary>
    public override void OnEndDrag(UnityEngine.EventSystems.PointerEventData eventData)
    {
        if (routeToParent)
            DoForParents<IEndDragHandler>((parent) => { parent.OnEndDrag(eventData); });
        else
            base.OnEndDrag(eventData);
        routeToParent = false;
    }
}

Чуть выше мой проект, в котором у меня два скролла, которые на Page 2 пересекаются. При попадании тача на кнопки, срабатывает вертикальный скролл. Попадая на маленькую область между блоками этих кнопок, работает горизонтальный скролл. Приведенный выше скрипт, как я понял, решает эту проблему. Однако, его размещение на Page 2, как было указано на форуме, не помогает. (На Content Page 2 так же не работает)

Будьте добры, подскажите, пожалуйста, что не так. Наверняка, что-то упустил, что-то очень банальное :)

READ ALSO
Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Отображение видео по URL в Unity3D с помощью компонента VideoPlayer с указанием логина и пароля

Пытаюсь в Unity3D с помощью компонента VideoPlayer отобразить видео по URL (с IP-камеры)При подключении требуется указать логин и пароль

318
AspNetCore2.1. Не работает mapping через Automapper для объекта IdentityUser (ApplicationUser-&gt;ApplicationUserDto)

AspNetCore2.1. Не работает mapping через Automapper для объекта IdentityUser (ApplicationUser->ApplicationUserDto)

Нужно предоставить WebApi доступ к UserManager<ApplicationUser> (AspNetCoreIdentity)

148
Несколько OnTriggerExit за кадр

Несколько OnTriggerExit за кадр

За один кадр триггер должны покидать несколько объектов и удаляться из пула, но OnTriggerExit отрабатывает один объект из десятка

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

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

Я написал парсер с использованием AngleSharpСайт для парсинга взят условно для теста

139