unity3D scrollview嵌套不能滑动的问题及其解决办法

news2024/11/25 22:27:45

unity3D scrollview嵌套不能滑动的问题

问题来源:

现在有这么一个需求,有一个页面,希望外面是一个水平方向滑动的scrollView A,A的子对象是一种能在垂直方向滑动的scrollview,此时,如果不做特殊处理,子对象的交互性会挡住外层scrollview的滑动性。

问题原因:

当我们点击子对象并且进行滑动时,外层的scrollview接收不到滑动事件。

解决办法:

在子对象滑动时,将拖拽事件传递给外层的scrollview,做法是给每一个子对象添加一个脚本Compoment,在这个脚本中做好拖拽事件的传递(当然,也可以在Unity的editor中,将写好的脚本拖拽到对应的scrollview对象上,只不过这样做很不灵活,本人不愿意这么操作),代码如下所示:


using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

//scrollViewItem 是子scrollview对象需要添加的component
public class scrollViewItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    // Start is called before the first frame update

    private ScrollRect scrollview;
    
    public void setScrollView(ScrollRect scrollview)
    {
        this.scrollview = scrollview;
    }

	//子scrollview调用OnBeginDrag时,传递OnBeginDrag到外层的scrollview,也就是这里的scrollview
    public  void OnBeginDrag(PointerEventData eventdata)
    {
        Debug.Log("aaaaaaaaaaaaaaaa");
        scrollview.OnBeginDrag(eventdata);
    }

    public  void OnDrag(PointerEventData eventdata)
    {
        Debug.Log("bbbbbbbbbbbbbbb");
        scrollview.OnDrag(eventdata);
    }

    public  void OnEndDrag(PointerEventData eventdata)
    {
        Debug.Log("ccccccc");
        scrollview.OnEndDrag(eventdata);
    }
}

//ListBigItem是对子scrollview对象的一个封装
public class ListBigItem
{
    public ListBigItem(GameObject obj, int idx, ScrollRect _parrentRect)
    {
    	//在子scrollview对象上添加上面的脚本
        obj.AddComponent<scrollViewItem>();
        //传递最外层scrollview到添加的脚本对象。
        obj.GetComponent<scrollViewItem>().setScrollView(_parrentRect);
        gameObject = obj;
        transform = obj.transform;
        curIdx = idx;
        parrentRect = _parrentRect;
        scrollview = gameObject.GetComponent<ScrollRect>();
        init(scrollview);

    }
    public GameObject gameObject;
    public Transform transform;
    public List<ListSmallItem> smalLitemList;
    ScrollRect parrentRect;
    ScrollRect scrollview;
    int curIdx;

    public void init(ScrollRect scroll)
    {
    //"Prefabs/NodeDateHead" 是子scrollview对象希望包含的子节点预制体
        GameObject prefabItem = Resources.Load<GameObject>("Prefabs/NodeDateHead");
        int itemTotalNum = 6;
        Vector3 initPos = prefabItem.transform.position;
        Vector2 itemSize = prefabItem.GetComponent<RectTransform>().sizeDelta;
        smalLitemList = new List<ListSmallItem>();
        scroll.content.sizeDelta = new Vector2(itemSize.x, itemSize.y * itemTotalNum);
        scroll.GetComponent<RectTransform>().sizeDelta = new Vector2(itemSize.x, itemSize.y * itemTotalNum);
        for (int i = 0; i < itemTotalNum; i++)
        {
            GameObject smallItem = UnityEngine.Object.Instantiate(prefabItem, scroll.content);
            smallItem.transform.localPosition = new Vector3(0, 0 - itemSize.y * i, initPos.z);
            ListSmallItem item = new ListSmallItem(smallItem);
            item.initData(i, curIdx);
            smalLitemList.Add(item);
            Debug.Log(smallItem.transform.position.y);
        }
    }
}

//类containt 是主类
public class containt : MonoBehaviour
{
    Button preButton;
    Button postButton;
    ScrollRect scroll;
    List<ListBigItem> bigItemList;

    void Awake()
    {
        int weekNum = 7;
        //"Prefabs/scrollViewNode" 是子scrollview预制体
        GameObject item = Resources.Load<GameObject>("Prefabs/scrollViewNode");
        Vector2 itemSize = item.GetComponent<RectTransform>().sizeDelta;
        Vector3 initPos = item.transform.position;
        bigItemList = new List<ListBigItem>();
        scroll.content.sizeDelta = new Vector2(itemSize.x * weekNum, itemSize.y);
        for (int i = 0; i < weekNum; i++)
        {
            GameObject scrollitem = Instantiate(item, scroll.content);
            scrollitem.transform.localPosition = new Vector3(0 + i * itemSize.x, 0, initPos.z);
            ListBigItem bigItem = new ListBigItem(scrollitem, i, scroll);
            bigItemList.Add(bigItem);
        }
    }
}

如果有疑问,欢迎评论区一起讨论! ^_^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1213767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL中全文索引和普通索引的区别

MySQL中的全文索引&#xff08;Full-Text Index&#xff09;和普通索引&#xff08;比如B-Tree索引&#xff09;是为了提高查询效率而设计的&#xff0c;但它们适用于不同的场景和查询类型。 普通索引&#xff08;如B-Tree索引&#xff09; 适用场景&#xff1a;普通索引适用于…

cleer的耳机怎么样?南卡和cleer哪个好?两款开放式耳机深度横评对比

随着开放式耳机的发展&#xff0c;成为许多用户的首选。开放式耳机因其更自然的音质表现和佩戴更舒适体验而备受欢迎。然而&#xff0c;市面上开放式耳机品牌和型号繁多&#xff0c;如何选择一款适合自己的耳机成为了许多用户的难题。 本期文章将为大家推荐两款市面上优秀的开…

【6】Spring Boot 3 集成组件:knift4j+springdoc+swagger3

目录 【6】Spring Boot 3 集成组件&#xff1a;knift4jspringdocswagger3OpenApi规范SpringFox Swagger3SpringFox工具&#xff08;不推荐&#xff09; Springdoc&#xff08;推荐&#xff09;从SpringFox迁移引入依赖配置jAVA Config 配置扩展配置&#xff1a;spring securit…

day26_css

今日内容 零、 复习昨日 一、CSS 零、 复习昨日 HTML - 页面基本骨架结构,内容展现 CSS - 美化页面,布局 JS - 动起来 一 、引言 1.1CSS概念 ​ 层叠样式表(英文全称&#xff1a;Cascading Style Sheets)是一种用来表现HTML&#xff08;标准通用标记语言的一个应用&#xff09;…

第十九章总结

Java绘图类 Graphics 类 Grapics 类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图像上进行绘制。Graphics 类封装了Java 支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔、文本、图像等。 Graphics 类提供了绘图常用的…

Linux系统编程——进程中vfork函数

函数原型 pid_t vfork(void);//pid_t是无符号整型 所需头文件 #include <sys/types.h> #include <unistd.h> 功能 vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程&#xff0c;但它们创建的子进程是有区别的。 返回值 成功子进程中返回 …

nginx基本配置-基于nuc980开发板的笔记

一、介绍 前面的文章<nginx交叉编译移植-基于nuc980开发板的笔记>,介绍了如何移植nginx到开发板&#xff0c;打开的网页面是默认的网页。下面介绍如何输入网址变为指定的网页。 二、配置 ①将编写的网页&#xff0c;放到html文件夹下&#xff0c;如下图&#xff1a; ②打…

双点重发布路由策略实验

任务&IP分配如下&#xff1a; 双点重发布实验 第一步&#xff1a;配置IP地址&环回地址 以R1为例&#xff0c;R2、R3、R4同理 interface GigabitEthernet 0/0/0 ip address 12.0.0.1 24 interface GigabitEthernet 0/0/1 ip address 13.0.0.1 24 interface LookBack …

docker 安装xxl-job

1.拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.0 2.docker镜像创建并运行 docker run -e PARAMS"--spring.datasource.urljdbc:mysql://xxxxx:3306/xxl_job?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTimezoneAsia/Shanghai&…

5. HTML中常用标签

5. html常用标签 5.1 标签语义 学习标签是有技巧的&#xff0c;重点是记住每个标签的语义。简单理解就是指标签的含义。即这个标签是用来干嘛的。 根据标签的语义&#xff0c;在合适的地方给一个最为合理的标签。可以让页面结构给清晰。 5.2 标题标签 <h1>-<h6>…

《算法通关村——位运算常用技巧》

《算法通关村——位运算常用技巧》 位运算的性质有很多&#xff0c;此处列举一些常见性质&#xff0c;假设以下出现的变量都是有符号整数。 ●幂等律&#xff1a;a &aa&#xff0c;a ∣ aa&#xff08;注意异或不满足幂等律&#xff09;&#xff1b; ●交换律&#xff1…

WPF xaml Command用法介绍

WPF (Windows Presentation Foundation) 中的命令设计模式是一种用于分离用户界面逻辑和业务逻辑的方法。在WPF中&#xff0c;这种模式通过命令接口&#xff08;如 ICommand&#xff09;实现&#xff0c;使得用户界面组件&#xff08;如按钮、菜单项等&#xff09;可以触发不直…

nodejs+vue电影在线预定与管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将电影在线预定与管理系统功能模块主要分为管理员模块。 我国各行各业的发展在信息化浪潮的推动下也在不断进步&#xff0c;尤其是电影产业&#xff0c;在人们生活水平提高的同时&#xff0c;从…

联盟 | Quick Creator X HelpLook ,AI助力打造出海企业内容营销

随着人工智能的快速发展&#xff0c;各行各业也加快了人工智能工具的探索&#xff0c;积极将AI融入到行业发展中&#xff0c;出海外贸也不例外。AI渐渐地融入到外贸的各个环节&#xff0c;为企业出海提速增效。 为此&#xff0c;「 Quick Creator 」与 「 HelpLook 」达成战略合…

Leadshop开源商城小程序源码 – 支持公众号H5

Leadshop是一款出色的开源电商系统&#xff0c;具备轻量级、高性能的特点&#xff0c;并提供持续更新和迭代服务。该系统采用前后端分离架构&#xff08;uniappyii2.0&#xff09;&#xff0c;以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、Vue Router、…

WordPress 媒体库文件夹管理插件 FileBird v5.5.4和谐版下载

FileBird是一款WordPress 按照文件夹管理方式的插件。 拖放界面 拖放功能现已成为现代软件和网站的标配。本机拖动事件&#xff08;包括仅在刀片中将文件移动到文件夹以及将文件夹移动到文件夹&#xff09;极大地减少了完成任务所需的点击次数。 一流设计的文件夹树展示 我们…

图解分布式事务实现原理(一)

参考 本文参考https://zhuanlan.zhihu.com/p/648556608&#xff0c;在小徐的基础上做了个人的笔记。 分布式事务场景 事务核心特性 在聊分布式事务之前&#xff0c;我们先理清楚有关于 “事务” 的定义. 事务 Transaction&#xff0c;是一段特殊的执行程序&#xff0c;其需…

STM32与ZigBee技术在智能家居无线通信中的应用研究

一、引言 智能家居系统是利用物联网技术将家庭各种设备进行互联互通&#xff0c;实现智能化控制和管理的系统。在智能家居系统中&#xff0c;无线通信技术起着至关重要的作用&#xff0c;而STM32微控制器和ZigBee技术则是实现智能家居无线通信的关键技术。本文将对STM32与ZigB…

C/C++最大质数 2021年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C比n小的最大质数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C比n小的最大质数 2021年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 对于给定的n&#xff0c;求比n小的质数中…

Spring-IoC与DI入门案例

IoC入门案例 IoC入门案例思路分析 管理什么&#xff1f;&#xff08;Service与Dao&#xff09;如何将被管理的对象告知IoC容器&#xff1f;&#xff08;配置&#xff09;被管理的对象交给IoC容器&#xff0c;如何获取到IoC容器&#xff1f;&#xff08;接口&#xff09;IoC容…