Unity笔记之下拉刷新列表

这篇具有很好参考价值的文章主要介绍了Unity笔记之下拉刷新列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Unity笔记之下拉刷新列表,Unity笔记之UGUI,unity,笔记,游戏引擎
这样的效果;

代码:

using System;
using System.Collections;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ScrollRectUpdateView : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler
{
    private ScrollRect scrollRect;
    [SerializeField] private RectTransform contentTransform;

    [SerializeField] private ScrollRefreshInfo upRefreshInfo;
    [SerializeField] private ScrollRefreshInfo downRefreshInfo;

    private bool isUpRefresh;
    private bool isDownRefresh;
    private bool isRefreshing;

    [SerializeField] [ReadOnly] float refreshNumber = 100;
    [SerializeField] [ReadOnly] float canRefreshNumber = 50;
    private Action upAction;
    private Action downAction;

    private void Awake()
    {
        this.scrollRect = this.GetComponent<ScrollRect>();
        if (scrollRect == null) throw new NullReferenceException();

        upRefreshInfo.ShowAndHideSelf(false);
        downRefreshInfo.ShowAndHideSelf(false);
        this.isUpRefresh = false;
        this.isDownRefresh = false;
        isRefreshing = false;
    }

    public void OnBeginDrag(PointerEventData eventData)
    {
        if (this.isRefreshing) return;
    }

    public void OnDrag(PointerEventData eventData)
    {
        if (this.isRefreshing) return;

        var rectTransform = this.transform.GetComponent<RectTransform>();
        float height = 0f;
        var childCount = this.contentTransform.childCount;
        var child = this.contentTransform.GetChild(1).GetComponent<RectTransform>();
        if (this.contentTransform.TryGetComponent(out VerticalLayoutGroup group))
        {
            height = child.rect.height * (childCount - 2) + group.spacing * (childCount - 3) - rectTransform.rect.height;
        }
        else
            height = child.rect.height * (childCount - 2) - rectTransform.rect.height;

        var he = this.contentTransform.anchoredPosition.y - height;
        Debug.Log($"one : {he}, two : {height}");

        // Up
        if (this.contentTransform.anchoredPosition.y < 0)
        {
            this.upRefreshInfo.ShowAndHideSelf(true);
            if (contentTransform.anchoredPosition.y - child.rect.height >= -this.canRefreshNumber)
            {
                this.upRefreshInfo.SetContent("下拉可刷新");
                this.isUpRefresh = false;
            }
            else if (contentTransform.anchoredPosition.y - child.rect.height <= -this.refreshNumber)
            {
                this.upRefreshInfo.SetContent("释放后刷新");
                this.isUpRefresh = true;
            }
        }
        else
        {
            this.isUpRefresh = false;
            this.upRefreshInfo.ShowAndHideSelf(false);
        }

        // down
        if (he > 0)
        {
            this.downRefreshInfo.ShowAndHideSelf(true);
            if (he <= this.canRefreshNumber)
            {
                this.downRefreshInfo.SetContent("上拉可刷新");
                this.isDownRefresh = false;
            }
            else if (he >= this.refreshNumber)
            {
                this.downRefreshInfo.SetContent("释放后刷新");
                this.isDownRefresh = true;
            }
        }
        else
        {
            this.isDownRefresh = false;
            this.downRefreshInfo.ShowAndHideSelf(false);
        }
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        if (this.isRefreshing) return;

        if (this.isUpRefresh)
        {
            Debug.Log("开始刷新 Up");
            StartCoroutine(RefreshData(this.upRefreshInfo));
        }
        else if (this.isDownRefresh)
        {
            Debug.Log("开始刷新 Down");
            StartCoroutine(RefreshData(this.downRefreshInfo));
        }
        else
        {
            this.upRefreshInfo.ShowAndHideSelf(false);
            this.downRefreshInfo.ShowAndHideSelf(false);
        }
    }

    private IEnumerator RefreshData(ScrollRefreshInfo info)
    {
        isRefreshing = true;
        info.SetContent("刷新中");
        yield return new WaitForSeconds(3);
        info.SetContent("刷新成功");
        yield return new WaitForSeconds(2);
        info.SetContent("释放后刷新");

        info.ShowAndHideSelf(false);
        this.isUpRefresh = false;
        this.isDownRefresh = false;
        isRefreshing = false;
    }
}

ScrollRefreshInfo.cs

using TMPro;
using UnityEngine;

public class ScrollRefreshInfo : MonoBehaviour
{
    private string oldStr;

    [SerializeField] private GameObject imgRefresh;
    [SerializeField] private TMP_Text txtContent;

    public void SetContent(string str)
    {
        if (this.oldStr == str) return;
        this.txtContent.text = str;
        this.oldStr = str;
        Debug.Log(str);
    }

    public void ShowAndHideSelf(bool isShow)
    {
        if (this.gameObject.activeSelf != isShow)
            this.gameObject.SetActive(isShow);
    }
}

场景:
Unity笔记之下拉刷新列表,Unity笔记之UGUI,unity,笔记,游戏引擎
Unity笔记之下拉刷新列表,Unity笔记之UGUI,unity,笔记,游戏引擎
就这些了。文章来源地址https://www.toymoban.com/news/detail-853829.html

到了这里,关于Unity笔记之下拉刷新列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity实现一个可扩展的UGUI无限滑动列表控件

    12月20日新增 增加一个可收缩的滑动列表,适用于游戏中的任务系统,成就等 使用说明 创建时需要两个模板slot,一个是button,另一个则是btn下显示的cell 配置如下图添加 ExpandableView 脚本,新增的IsDefaultExpand用来控制是否展开 11月28日新增 增加可调节的顶部间隙和左侧间隙 采

    2024年01月19日
    浏览(42)
  • unity刷新grid,列表

    2024年01月25日
    浏览(26)
  • 【游戏开发解答】Unity中对UGUI的Image进行倾斜变形(UGUI | 精灵图 | OnPopulateMesh | 顶点偏移 | 变形)

    本文最终效果 一、前言 嗨,大家好,我是新发。 前同事问了我一个问题,如何将 UGUI 的 Image 进行变形,变成斜斜的, 最直接的就是出图的时候直接就画成斜的,我们不讨论这种情况,这里我们单纯的从技术实现上去思考能不能在 Unity 中通过 UGUI 的 Image 对图片进行倾斜变形

    2024年02月04日
    浏览(56)
  • unity 如何设置一个未选择的(默认值为空)的下拉列表dropdown

         unity设置下拉列表时总是指定一个默认选择值,如何设置一个在启动时未被选择的dropdown,如下:      1.设置一个inputfield或者text覆盖住dropdown文字,inputfield      2.list添加一个默认项default,liststring temp=new liststring{\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"default\\\"};       3.初始化dropdown: dropdown.addopt

    2024年02月14日
    浏览(37)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(79)
  • 小程序列表下拉刷新和加载更多

    在小程序的app.json中,检查window项目中是否已经加入了\\\"enablePullDownRefresh\\\": true,这个用来开启下拉刷新 直接引入weui 上方两个查询条件和一个按钮,下方显示列表 data中定义几个参数,分别对应请求参数和返回结果。 定义一个公共的请求方法,用来调用接口,加载更多、下来刷

    2024年02月20日
    浏览(50)
  • 微信小程序 上列表拉加载下拉刷新

      上拉加载和下拉刷新是小程序开发的常见需求。本文将介绍如何在微信小程序中实现上拉加载和下拉刷新的功能,为用户带来更加流畅、便捷的使用体验。 微信小程序 上列表拉加载下拉刷新 (1) 首先需要在使用到的 json 文件下配置 “enablePullDownRefresh”: true (2) 在 js 文件

    2024年01月16日
    浏览(57)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(78)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(66)
  • 【学习笔记】Unity基础(七)【uGUI基础、利用render Texture实现小地图功能】

    转载请注明出处:🔗https://blog.csdn.net/weixin_44013533/article/details/130808689 本篇基本是大纲性质,参考价值不大,只有最后一小节“利用render Texture实现小地图功能”花了点时间,可以看看,不过也用到了上面的canvas、UI image等知识、以及input等脚本功能,也算一个小练手吧 倒是

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包