【UGUI】踩坑填坑——DropDown

本文探讨了在使用Unity UGUI DropDown组件时遇到的问题,当Canvas Render Mode设置为Screen Space--Camera,将组件移至屏幕边缘导致下拉列表坐标不合法并造成界面卡死。为了解决这个问题,作者决定自定义下拉组件,采用Toggle来控制点击,并实现了无限循环列表。同时,详细说明了如何配置下拉选项,包括文本、图片和选中状态的定制。文章还提及利用之前关于UGUI无限列表的技术来实现滚动效果。
摘要由CSDN通过智能技术生成

在使用UGUI的 DropDown 时, Canvas 的 Render Mode 选择了 Screen Space--Camera, 此时遇到一个小bug, 当我把这个下拉组件放到屏幕中间附近时, 下拉列表显示是正常的。当我把组件整体移到边缘,突然出现下拉列表的 Content 的坐标 不合法,由于 ugui 的点击关闭处理是在 Canvas 的子节点最下方又生成一个 全屏的 遮罩 来保证实现 "点击关闭",所以此时整个界面卡死..........翻遍源码断点我也没找到问题..

中间:边缘


另外,他的下拉列表实现, 不适合多个数据,假如有百十个就生成百十个下来的子菜单,这明显是不合理的,所以,把下拉改成 无限循环 列表是必须的。

于是,开始自己动手造轮子:

using System;
using System.Collections;
using System.Collections.Generic;
using Assets.UI;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// Introduction: GDropDown
/// Author: 	Cheng
/// Time: 
/// </summary>
[AddComponentMenu("UI/GDropdown", 100)]
[RequireComponent(typeof(RectTransform))]
public class GDropDown : MonoBehaviour
{

    [Tooltip("Button of Whole Component")]
    [SerializeField]
    private Toggle m_CaptionToggle;
    /// <summary>
    /// Button of Whole Component
    /// </summary>
    public Toggle CaptionToggle { get { return m_CaptionToggle; } set { SetCaptionButton(value);} }

    [Tooltip("Display Text of Selected Item")]
    [SerializeField]
    private Text m_CaptionText;
    /// <summary>
    /// Display Text of Selected Item
    /// </summary>
    public Text CaptionText { get { return m_CaptionText; } set { m_CaptionText = value; } }

    [Tooltip("Display Image of Selected Item")]
    [SerializeField]
    private Image m_CaptionImage;
    /// <summary>
    /// Display Image of Selected Item
    /// </summary>
    public Image CaptionImage { get { return m_CaptionImage; } set { m_CaptionImage = value; } }

    [Space]

    [Tooltip("Drop List")]
    [SerializeField]
    private ScrollRect m_ScrollRect;
    /// <summary>
    /// Drop List 
    /// </summary>
    public ScrollRec
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值