ScrollCircleMaker v1.0使用教程

前言

ScrollCircleMaker v1.0是博主近期开发的循环复用的插件,使用它可以很快速的为游戏添加上滑动功能,并且跳出物品数量的约束,比如游戏背包可能存在上千上万的道具,聊天模块的滑动等等,它可以解决一切滑动需求,有单行不规则长度辅助器、多行规则长度辅助器、自定义位置辅助器的存在,只需仅仅几行代码即可,接下来就阐述插件使用教程和注意事项。

1. 如何快速上手?

ScrollCircleMaker v1.0只需要关心数据装载和单个物品的更新逻辑,并且为了尽可能简化插件的使用过程,博主附带写了滑动解决方案脚本生成器,首先需要在ScrollView的Content下挂载上循环滑动组件ScrollCircleComponent,然后使用滑动解决方案脚本生成器选择需要的辅助器输入对应的参数生成滑动解决方案(挂载脚本可能存在问题,建议下图所示生成ScrollCircleView)。

之后ScrollCircleComponent组件的ScrollMaker选项就会出现刚刚生成的解决方案,然后选定这个滑动解决方案即可,把制作好的Item拖动到组件的BaseItem选项上,到这里就离成功还差10%了,大家可能会听的云里雾里的,所以请看下面截图:

 

可能各位会说是不是吹牛呢?啥也没有做就好了?这个博主是不是傻逼,咱们散了吧!嗯...这个当然是不可能就好了的,还需要写一点点代码,先来看看生成的滑动解决方案基本样子,MakerName填的是Demo,ItemName填的是Demo,TypeName填的是int,选择的CircleHelper是MultipleRectCircleHelper,然后生成的脚本如下所示:

//------------------------------------------------------------
// ScrollCircleMaker v1.0
// Copyright © 2020 DaveAnt. All rights reserved.
// Homepage: https://daveant.gitee.io/
// Github: https://github.com/DaveAnt/ScollCircleMaker
//------------------------------------------------------------
using UnityEngine;
using UnityEngine.UI;
namespace UIPlugs.ScrollCircleMaker
{
    [MakerHandle(MakerHandle.MultipleRectCircleHelper)]
    public class DemoMaker : BaseDirectMaker<int>
    {
        public override void OnStart(Transform transform)
        {
            baseHelper = new MultipleRectCircleHelper<int>(transform,()=> {
                return new DemoItem();
            });
            //How to load data?
        }
    }
    //How to update item?
    public class DemoItem : BaseItem<int>
    {
        public override void InitComponents()
        {
        
        }

        public override void InitEvents()
        {
			          
        }

        public override void OnDestroy()
        {
			         
        }

        public override void UpdateView(int data, int globalSeat)
        {
        	base.UpdateView(data, globalSeat);
        }
    }
}

上面展示的代码就是解决方案生成器生成的,TypeName正常来说应该填写的是结构体,这里写的是int方便测试,接下来需要添加模拟的数据,然后再把辅助器启动,可以通过调用AddItem接口,也可以直接在OnStart时传入数据列表,具体代码如下:

for (int i = 0; i < 1000; ++i)
    baseHelper.AddItem(i);
baseHelper.OnStart();

数据填充完毕以后,需要具体完善DemoItem类的更新逻辑,上面可以看到有四个函数等待被完善,下面给出表格来说明,每个函数应该完成的任务。

函数名函数作用
InitComponents找到对应孩子组件
InitEvents注册按钮事件
OnDestroy销毁函数
UpdateView刷新物品样式
OnUpdate持续更新物品样式

InitComponents、InitEvents在实例化时会调用一次,UpdateView是每次开始循环复用时调用,所以不要在UpdateView里找对应孩子组件或注册按钮事件,让函数各司其职保存良好的代码习惯。接下来展示完善的Item代码:

public class DemoItem : BaseItem<int>
{
    Text text;
    public override void InitComponents()
    {
        text = _transform.Find("Text").GetComponent<Text>();
    }

    public override void InitEvents()
    {
            
    }

    public override void OnDestroy()
    {
            
    }

    public override void UpdateView(int data, int globalSeat)
    {
        text.text = data.ToString();
    }
}

到这里就完成了所有的步骤,至于上下左右间距和Item之间的间距,是否支持循环成圈等等,只需要在ScrollCircleComponent可视面板下简单设置即可。

2.插件接口、属性说明


插件接口说明:

函数名函数作用参数说明
OnStart启动插件物品数据列表
OnDestroy释放插件
ResetItems重置插件
OnSlideLockout锁定滑动是否滑动
DelItem移除物品数据物品索引
DelItem移除物品数据匹配物品函数,移除物品数据
AddItem添加物品数据物品数据,物品索引
UpdateItem更新物品样式物品数据,物品索引
SwapItem交换物品位置被交换物品索引,交换物品索引
SwapItem交换物品位置匹配物品函数,被交换物品数据,交换物品数据
ToLocation真实位置定位真实位置值,是否存在定位动画过程
ToLocation数据索引定位数据索引,是否存在定位动画过程
ToLocation数据匹配定位匹配物品函数,是否存在定位动画过程
ToTop置顶定位是否存在定位动画过程
ToBottom置底定位是否存在定位动画过程

插件属性说明:   

属性名属性含义
toLocationEvent定位动画结束回调
sProperty插件的设置参数
itemCore物品中心索引
viewCore视图中心索引
dataCount物品数据数量
itemCount

物品实例数量 


以上是插件所有公开接口、属性,使用插件出现问题希望可以联系到博主,在插件工程里存在9大Demo场景,可以完美说明插件可实现出的滚动效果(并不是局限于这些Demo)。

Demo名字Demo的作用
01-Loadrunner-Demo性能测试场景
02-Simple-Demo简单的使用场景
03-Click-Demo按钮点击场景
04-IsCircleAndUpdate-Demo循环成圈并且每帧更新Item样式场景
05-CenterMin-Demo中间物品最小场景
06-CURD-Demo运行时增删改换场景
07-PageSlide-Demo翻页式滑动场景
08-Chat-Demo不规则长度聊天模块场景
09-Custom-Demo自定义位置场景

 3.使用注意事项

因为是循环复用Item,还是存在很多限制的,接下来讲述下博主可以预见到的问题和如何避免比较坑爹的地方:

  • 不存在很多Item,不建议使用此插件,因为完全没有必要,插件会按照视图情况和参数设置最优实例化出所需Item数量。
  • 使用循环成圈时(勾选了IsCircleEnable)小心使用删除接口,可能会出现问题。
  • 使用自定义位置辅助器时,尽量合理设置,用最少的ItemPos来表现出想要的排版。
  • 使用自定义位置时,Item位置不能横纵重叠,这样刷新的时候会出现异常表现,具体查看demo-09.
  • 单行不规则长度辅助器的BaseItem必须是最小高宽,什么意思呢?就是在UpdateView改变高宽时只能比它大,不能比它小,而且辅助器只判断根节点的高宽,UpdateView修改子组件高宽是无法识别的,具体查看demo-08。
  • 目前插件不支持滑动条,存在滑动条时插件会启动异常的。(可以自行实现滑动条,按照content高宽和位置)。

将工程导入后可能会因为Unity版本号不一样,会存在某些依插件包会报错(TextMeshPro报错,在下见过很多次了),基本上升级或移除相关插件包即可,实在不知道如何解决的小白,可以尝试将工程下的Packages文件夹下所有.json文件删除

开源地址:https://github.com/DaveAnt/ScrollCircleMaker

插件视频教程: https://www.bilibili.com/video/BV1i64y1F7b6/

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值