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

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 updateprivate ScrollRect scrollview;public void setScrollView(ScrollRect scrollview){this.scrollview = scrollview;}//子scrollview调用OnBeginDrag时,传递OnBeginDrag到外层的scrollview,也就是这里的scrollviewpublic  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.hqwc.cn/news/180395.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STM32的无线通信系统设计与实现

【引言】 随着物联网的迅速发展&#xff0c;无线通信技术逐渐成为现代通信领域的关键技术之一。STM32作为一款广受欢迎的微控制器&#xff0c;具有丰富的外设资源和强大的计算能力&#xff0c;在无线通信系统设计中具有广泛的应用。本文将介绍如何基于STM32实现一个简单的无线通…

【C++】泛型编程 ④ ( 函数模板 与 普通函数 调用规则 | 类型自动转换 | 类型自动转换 + 显式指定泛型类型 )

文章目录 一、普通函数 与 函数模板 的调用规则 - 类型自动转换1、函数模板和重载函数2、类型自动转换3、代码示例 - 类型自动转换 二、普通函数 与 函数模板 的调用规则 - 类型自动转换 显式指定泛型类型1、类型自动转换 显式指定泛型类型2、代码示例 - 类型自动转换 显式指…

软件开发之路——关于架构师的一些书籍

文章目录 &#x1f4cb;前言&#x1f3af;什么是架构师&#x1f525;文末送书《高并发架构实战&#xff1a;从需求分析到系统设计》《中台架构与实现&#xff1a;基于DDD和微服务》《架构师的自我修炼&#xff1a;技术、架构和未来》《分布式系统架构&#xff1a;架构策略与难题…

Postman实现接口的加密和解密

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 1、目前市面上的加密的方式 对称式加密&#xff1a;DES&#xff0c;AES&#xff0c;Base64加密算法 非对称加密&#xff1a…

入门后端开发得学什么?这份超详细的后端开发学习路线图值得推荐!

后端开发, 无疑是一个极为关键的领域&#xff0c;涉及到我们每日互联网生活的每个细节。每当你在网上浏览、搜索或进行购物等活动时&#xff0c;背后都有大量的后端技术作为支撑。而随着技术的日益进步&#xff0c;人们对于高效、稳定和安全的网络服务的需求也越来越高。 另一…

自己动手实现一个深度学习算法——六、与学习相关的技巧

文章目录 1.参数的更新1&#xff09;SGD2&#xff09;Momentum3&#xff09;AdaGrad4&#xff09;Adam5&#xff09;最优化方法的比较6&#xff09;基于MNIST数据集的更新方法的比较 2.权重的初始值1&#xff09;权重初始值不能为02&#xff09;隐藏层的激活值的分布3&#xff…

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

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

vagrant+virtualbox的踩坑记录

vagrant virtualbox 文章目录 vagrant virtualbox一、导入虚拟机ova文件失败二、修改虚拟机的保存位置三、无法使用xshell等软件用密码进行连接四、vagrant up失败 一、导入虚拟机ova文件失败 背景&#xff1a;手动删除了虚拟机文件导致无法重新导入相同名称虚拟机的ova文件…

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

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

linux 系统下文本编辑常用的命令

一、是什么 Vim是从 vi 发展出来的一个文本编辑器&#xff0c;代码补全、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 简单的来说&#xff0c; vi 是老式的字处理器&#xff0c;不过功能已经很齐全了&#xff0c;但是还是有可以进步的地方 而…

5. HTML中常用标签

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

基于STM32的LoRaWAN无线通信网络设计与实现

LoRaWAN (Long Range Wide Area Network) 是一种低功耗的无线通信技术&#xff0c;用于构建广域物联网。本篇文章将介绍基于STM32微控制器的LoRaWAN无线通信网络的设计与实现&#xff0c;并提供相应的代码示例。 概述 LoRaWAN的无线通信技术采用低功耗长距离传输&#xff0c;…