效果展示

介绍

在设备上通过列表、网格或表格有效地显示大量数据!通常我们在unity中使用UGUI自带的ScrollView,小量的元素显示是没问题的,但是量级一旦太大,ScrolView就会很卡。这个插件就是解决元素太多的列表问题。

使用方法

1.官方下载地址

2. 下载好之后是一个unity的扩展包

直接将资源包拖入unity项目中即可。

3.你会看到大量案例

4.multiple_prefabs 案例

1.以multiple_prefabs 这个案例为例,最核心的就是 主功能区的MultiplePrefabsExample脚本

2.脚本核心代码

3.使用该插件的几大核心点。

1.插件中最核心的脚本你是OSA,所有的无限列表的脚本都是继承自OSA,然后把脚本挂载到主功能对象上。
2.实现不同的附属功能需要自己重写OSA中的虚方法或抽象方法。
3.底层的基本思路是,用数据list装载数据,实体对象的状态显示样式是OSA底层逻辑判断的,会在滑动的时候自动回调回实体对象的函数中,并执行回调中接收到的数据并显示。这样就实现了少量实体对象展示大量的数据。

4.重要的脚本

1.MyParams 装载预制体的脚本,有几个就装几个预制体
2.BaseVH 这个是预制体视图层组件的展示区
3.SimpleDataHelper 数据操作层的脚本,包含各种数据操作

  • Models

    • BaseModel
    • BidirectionalModel
    • ExpandableModel
  • ViewHolders
    • BaseVH
    • BidirectionalVH
    • ExpandableVH
  • MultiplePrefabsExample
  • MultiplePrefabsSceneEntry
  • SliderItemBehaviour

5.创建过程

  1. 创建你自己的 BaseItemViewHolder 可以起名叫MyItemViewsHolder(基本项目视图持有人)
  2. 创建你自己的 BaseParams 可以起名叫 MyParams (基本参数)
  3. 创建你自己的 OSA 传入泛型实现 MyParams 和 MyItemViewsHolder 可以起名叫MyScrollViewAdapter(优化的滚动视图适配器)
  4. 实例化 MyScrollViewAdapter
  5. 被调用一次 MyScrollViewAdapter.ResetItems(int),当你的数据集发生改变 ,除此之外还会发生以下其它变化(重置元素)
    5.1 CollectItemsSizes(ItemCountChangeMode, int, int, ItemsDescriptor)和CollectItemsSizes(ItemCountChangeMode, int, int, ItemsDescriptor) 会被调用
    5.2 CreateViewsHolder(int) 将调用足够的条目来填充视口。一旦viewholder被创建,它将在关闭viewport时被重用。newOrRecycledViewsHolder.root会是空的,所以你需要实例化你的预制体分配它并调用newOrRecycledViewsHolder.CollectViews(). 或者你也可以调用AbstractViewsHolder.Init(GameObject, RectTransform, int, bool, bool),主要实例化预制体。在创建 之后只有UpdateViewsHolder(TItemViewsHolder) 会被调用,表示元素的改变,
    5.3 在项目要显示或仅仅需要更新时调用UpdateViewsHolder(TItemViewsHolder),使用AbstractViewsHolder.ItemIndex,为了获得项目索引,您可以从数据集中检索其关联的模型(最常见的做法是将数据列表存储在Params实现中),AbstractViewsHolder.root这里不是空(给定视图holder是在createviewholder(…)中正确创建的)。它被分配了一个有效的对象,它的UI元素只需要改变它们的值(通常的做法是在视图holder中实现辅助方法,接受模型并更新视图本身),ResetItems(int, bool, bool)也会在视口大小改变时调用(比如移动设备上的方向改变或sandalone平台上的窗口大小调整)
    提示:内容面板上不允许有LayoutGroup(垂直/水平/网格),因为所有的布局都委托给了这个适配器

6.运行流程

#mermaid-svg-9GBzkv5fOMPsfyok .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-9GBzkv5fOMPsfyok .label text{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .node rect,#mermaid-svg-9GBzkv5fOMPsfyok .node circle,#mermaid-svg-9GBzkv5fOMPsfyok .node ellipse,#mermaid-svg-9GBzkv5fOMPsfyok .node polygon,#mermaid-svg-9GBzkv5fOMPsfyok .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-9GBzkv5fOMPsfyok .node .label{text-align:center;fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .node.clickable{cursor:pointer}#mermaid-svg-9GBzkv5fOMPsfyok .arrowheadPath{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-9GBzkv5fOMPsfyok .flowchart-link{stroke:#333;fill:none}#mermaid-svg-9GBzkv5fOMPsfyok .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-9GBzkv5fOMPsfyok .edgeLabel rect{opacity:0.9}#mermaid-svg-9GBzkv5fOMPsfyok .edgeLabel span{color:#333}#mermaid-svg-9GBzkv5fOMPsfyok .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-9GBzkv5fOMPsfyok .cluster text{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-9GBzkv5fOMPsfyok .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-9GBzkv5fOMPsfyok text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-9GBzkv5fOMPsfyok .actor-line{stroke:grey}#mermaid-svg-9GBzkv5fOMPsfyok .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-9GBzkv5fOMPsfyok .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-9GBzkv5fOMPsfyok #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-9GBzkv5fOMPsfyok .sequenceNumber{fill:#fff}#mermaid-svg-9GBzkv5fOMPsfyok #sequencenumber{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok #crosshead path{fill:#333;stroke:#333}#mermaid-svg-9GBzkv5fOMPsfyok .messageText{fill:#333;stroke:#333}#mermaid-svg-9GBzkv5fOMPsfyok .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-9GBzkv5fOMPsfyok .labelText,#mermaid-svg-9GBzkv5fOMPsfyok .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-9GBzkv5fOMPsfyok .loopText,#mermaid-svg-9GBzkv5fOMPsfyok .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-9GBzkv5fOMPsfyok .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-9GBzkv5fOMPsfyok .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-9GBzkv5fOMPsfyok .noteText,#mermaid-svg-9GBzkv5fOMPsfyok .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-9GBzkv5fOMPsfyok .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-9GBzkv5fOMPsfyok .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-9GBzkv5fOMPsfyok .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-9GBzkv5fOMPsfyok .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .section{stroke:none;opacity:0.2}#mermaid-svg-9GBzkv5fOMPsfyok .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-9GBzkv5fOMPsfyok .section2{fill:#fff400}#mermaid-svg-9GBzkv5fOMPsfyok .section1,#mermaid-svg-9GBzkv5fOMPsfyok .section3{fill:#fff;opacity:0.2}#mermaid-svg-9GBzkv5fOMPsfyok .sectionTitle0{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .sectionTitle1{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .sectionTitle2{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .sectionTitle3{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-9GBzkv5fOMPsfyok .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .grid path{stroke-width:0}#mermaid-svg-9GBzkv5fOMPsfyok .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-9GBzkv5fOMPsfyok .task{stroke-width:2}#mermaid-svg-9GBzkv5fOMPsfyok .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .taskText:not([font-size]){font-size:11px}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-9GBzkv5fOMPsfyok .task.clickable{cursor:pointer}#mermaid-svg-9GBzkv5fOMPsfyok .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9GBzkv5fOMPsfyok .taskText0,#mermaid-svg-9GBzkv5fOMPsfyok .taskText1,#mermaid-svg-9GBzkv5fOMPsfyok .taskText2,#mermaid-svg-9GBzkv5fOMPsfyok .taskText3{fill:#fff}#mermaid-svg-9GBzkv5fOMPsfyok .task0,#mermaid-svg-9GBzkv5fOMPsfyok .task1,#mermaid-svg-9GBzkv5fOMPsfyok .task2,#mermaid-svg-9GBzkv5fOMPsfyok .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutside0,#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutside2{fill:#000}#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutside1,#mermaid-svg-9GBzkv5fOMPsfyok .taskTextOutside3{fill:#000}#mermaid-svg-9GBzkv5fOMPsfyok .active0,#mermaid-svg-9GBzkv5fOMPsfyok .active1,#mermaid-svg-9GBzkv5fOMPsfyok .active2,#mermaid-svg-9GBzkv5fOMPsfyok .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-9GBzkv5fOMPsfyok .activeText0,#mermaid-svg-9GBzkv5fOMPsfyok .activeText1,#mermaid-svg-9GBzkv5fOMPsfyok .activeText2,#mermaid-svg-9GBzkv5fOMPsfyok .activeText3{fill:#000 !important}#mermaid-svg-9GBzkv5fOMPsfyok .done0,#mermaid-svg-9GBzkv5fOMPsfyok .done1,#mermaid-svg-9GBzkv5fOMPsfyok .done2,#mermaid-svg-9GBzkv5fOMPsfyok .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-9GBzkv5fOMPsfyok .doneText0,#mermaid-svg-9GBzkv5fOMPsfyok .doneText1,#mermaid-svg-9GBzkv5fOMPsfyok .doneText2,#mermaid-svg-9GBzkv5fOMPsfyok .doneText3{fill:#000 !important}#mermaid-svg-9GBzkv5fOMPsfyok .crit0,#mermaid-svg-9GBzkv5fOMPsfyok .crit1,#mermaid-svg-9GBzkv5fOMPsfyok .crit2,#mermaid-svg-9GBzkv5fOMPsfyok .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-9GBzkv5fOMPsfyok .activeCrit0,#mermaid-svg-9GBzkv5fOMPsfyok .activeCrit1,#mermaid-svg-9GBzkv5fOMPsfyok .activeCrit2,#mermaid-svg-9GBzkv5fOMPsfyok .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-9GBzkv5fOMPsfyok .doneCrit0,#mermaid-svg-9GBzkv5fOMPsfyok .doneCrit1,#mermaid-svg-9GBzkv5fOMPsfyok .doneCrit2,#mermaid-svg-9GBzkv5fOMPsfyok .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-9GBzkv5fOMPsfyok .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-9GBzkv5fOMPsfyok .milestoneText{font-style:italic}#mermaid-svg-9GBzkv5fOMPsfyok .doneCritText0,#mermaid-svg-9GBzkv5fOMPsfyok .doneCritText1,#mermaid-svg-9GBzkv5fOMPsfyok .doneCritText2,#mermaid-svg-9GBzkv5fOMPsfyok .doneCritText3{fill:#000 !important}#mermaid-svg-9GBzkv5fOMPsfyok .activeCritText0,#mermaid-svg-9GBzkv5fOMPsfyok .activeCritText1,#mermaid-svg-9GBzkv5fOMPsfyok .activeCritText2,#mermaid-svg-9GBzkv5fOMPsfyok .activeCritText3{fill:#000 !important}#mermaid-svg-9GBzkv5fOMPsfyok .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-9GBzkv5fOMPsfyok g.classGroup text .title{font-weight:bolder}#mermaid-svg-9GBzkv5fOMPsfyok g.clickable{cursor:pointer}#mermaid-svg-9GBzkv5fOMPsfyok g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-9GBzkv5fOMPsfyok g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-9GBzkv5fOMPsfyok .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-9GBzkv5fOMPsfyok .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-9GBzkv5fOMPsfyok .dashed-line{stroke-dasharray:3}#mermaid-svg-9GBzkv5fOMPsfyok #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok .commit-id,#mermaid-svg-9GBzkv5fOMPsfyok .commit-msg,#mermaid-svg-9GBzkv5fOMPsfyok .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-9GBzkv5fOMPsfyok g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-9GBzkv5fOMPsfyok g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-9GBzkv5fOMPsfyok g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-9GBzkv5fOMPsfyok .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-9GBzkv5fOMPsfyok .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-9GBzkv5fOMPsfyok .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-9GBzkv5fOMPsfyok .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-9GBzkv5fOMPsfyok .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-9GBzkv5fOMPsfyok .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-9GBzkv5fOMPsfyok .edgeLabel text{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9GBzkv5fOMPsfyok .node circle.state-start{fill:black;stroke:black}#mermaid-svg-9GBzkv5fOMPsfyok .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-9GBzkv5fOMPsfyok #statediagram-barbEnd{fill:#9370db}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-state .divider{stroke:#9370db}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-9GBzkv5fOMPsfyok .note-edge{stroke-dasharray:5}#mermaid-svg-9GBzkv5fOMPsfyok .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-9GBzkv5fOMPsfyok .error-icon{fill:#522}#mermaid-svg-9GBzkv5fOMPsfyok .error-text{fill:#522;stroke:#522}#mermaid-svg-9GBzkv5fOMPsfyok .edge-thickness-normal{stroke-width:2px}#mermaid-svg-9GBzkv5fOMPsfyok .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-9GBzkv5fOMPsfyok .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-9GBzkv5fOMPsfyok .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-9GBzkv5fOMPsfyok .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-9GBzkv5fOMPsfyok .marker{fill:#333}#mermaid-svg-9GBzkv5fOMPsfyok .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-9GBzkv5fOMPsfyok {color: rgba(0, 0, 0, 0.75);font: ;}

SimpleSceneEntry.OnItemCountChangeRequested(SimpleExample,int)//请求更改项目计数
SimpleSceneEntry/_Adapters[0].Data.ResetItems()//收到新数据进行复位
SimpleDataHelper.ResetItems(IList<T>)//重置添加数据,先清除再添加
OSA.ResetItems()
OSA.ChangeItemsCount(ItemCountChangeMode)
SimpleExample.ChangeItemsCount(ItemCountChangeMode)//改变元素数量
OSA.ChangeItemsCount(ItemCountChangeMode)
OSA.ChangeItemsCountInternal(ItemCountChangeMode)
OSA.ComputeVisibilityForCurrentPositionRawParams()//计算当前位置原始参数的可见性
ComputeVisibilityManager.ComputeVisibility(abstractDelta)//计算核心
OSA.ExtractRecyclableViewsHolderOrCreateNew(int)//提取可回收视图持有人或创建新的
SimpleExample.CreateViewsHolder(int)//让元素初始化
AbstractViewsHolder.Init(RectTransform)//真正的创建出元素

7.核心方法

 _Adapters[0].Data.ResetItems(newModels, _Drawer.freezeContentEndEdgeToggle.isOn);//创建重置元素protected override BaseVH CreateViewsHolder(int itemIndex);//创建实体对象protected override void UpdateViewsHolder(BaseVH newOrRecycled);//实体对象根据数据做刷新

8.MultiplePrefabsExample

  1. 继承OSA,确认两个泛型,一个是基本参数,比如需要展示的图片集合,预制体元素,还一个是元素持有器做所有元素的父类抽象。
  2. 继承滚轴动画变化器接口ISizeChangesHandler,动画运行时处理大小变化
  3. 声明一个数据助手,这就是这个滚轴视图的总数据管理器SimpleDataHelper Data
  4. 一个滚轴视图中只可展开一个子元素_IndexOfCurrentlyExpandedItem,展开的元素索引值
  5. 来一个缓冲池存放一些图片资源
  6. 初始化数据和滚轴视图,初始化缓冲池
  7. 构建好一系列的方法,
  8. ChangeItemsCount(ItemCountChangeMode),
  9. CreateViewsHolder() 创建一个元素持有器BidirectionalVH或者ExpandableVH,根据索引数据的类型来生成实例
  10. UpdateViewsHolder()更新展示
  11. OnItemIndexChangedDueInsertOrRemove()这只是为了在插入/删除的情况下,条目的标题将被更新,以反映它的新索引,因为索引没有存储在模型中
  12. IsRecyclable()覆盖始终返回true的基实现。在这种情况下,一个视图持有人只有当它在索引处的模型返回true时才是可回收的
  13. 处理动画处理大小的更改请求HandleSizeChangeRequest,OnExpandedStateChanged 展开状态的改变
  14. 重写一下销毁函数,销毁缓冲池,销毁自身
  15. 图像销毁器ImageDestroyer(object)
  16. 预写参数MyParams,放入需要展示的元素。

外界调用的核心方法:
ScenEntry.OnAddItemRequested(adapter,index)
ScenEntry.OnRemoveItemRequested(adapter,index)
ScenEntry.OnItemCountChangeRequested(adapter,count)

是否使用插件的思考

自学插件的心得和方法:
一定一定要少用插件,能自己搞一份代码,读懂的都行,能不用插件就不用。不得不用的情况下,一定要用成熟的人气足的插件,不然有问题问都没地方问。

  1. 先浏览一遍整体的展示,看看这个插件都能做些什么demo,看的时候预先在脑海里想象它可能编写的逻辑,着重关注我如果要学会这一份demo的功能我需要自己编写哪部分的代码,心里先有个底。
  2. 阅读介绍文档,整体通读一遍,尽可能翻译理解清除文档要表达的意思,如果有操作指南,跟着操一遍。
  3. 回头对应最迫切要掌握的功能demo,对照文档进一步理解,调用使用操作功能的代码模块。
  4. 使用debug在最高层脚本的每一个方法里写debug,看看执行流程,比起断点来,会便捷直观一些.
  5. 尝试用自定义的脚本来达成demo中操作使用的那些功能,需要掌握的内容全部尝试一下。
  6. 脑海中预演搬迁插件需要处理的代码和项目中该如何使用的流程。

Unity插件-OSA(Optimized ScrollView Adapter)相关推荐

  1. 谷歌移动广告Unity插件

    谷歌移动广告Unity插件帮助谷歌移动广告提供了一种方法在Unity项目部署为原生的Android和iOS应用程序.插件功能包括: • 一个包和交叉平台(Android / iOS)支持 • 模拟广告 ...

  2. Unity插件之NGUI学习(4)—— 创建UI2DSprite动画

    创建一个新的Scene.并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Crea ...

  3. Unity插件-NGUI使用教程

    Unity插件-NGUI使用教程 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 NGUI 一款强大 ...

  4. Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸

    依据 Unity插件之NGUI学习(2),创建一个UI Root,在UI Root下创建一个Texture作为背景图,并设置图片,在Wiget下调整大小:然后在UI Root下再创建一个Panel. ...

  5. UNITY插件信息收集

    UNITY插件信息收集 2018.8.7 UNITY超级优化神器 : Amplify Impostors posted on 2018-08-07 20:53 时空观察者9号 阅读(...) 评论(. ...

  6. AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK

    AR+LBS街景实景红包PokemonGo游戏捉妖夺宝营销解决方案定制开发暨百度高德地图Unity插件SDK 作者 komstone https://blog.csdn.net/komstone/ar ...

  7. Unity接入穿山甲广告(使用unity插件SDK接入)看这一篇就够了

    自己做的小游戏需要接广告,之前尝试过UnityAds和AdMob,但是都有点小问题.UnityAds对国内本土支持不好,Banner广告经常没有内容.Admob基本上都要对接到googlePlay,国 ...

  8. unityar自动识别人脸_三款Unity插件带您玩转人脸识别与模拟

    原标题:三款Unity插件带您玩转人脸识别与模拟 若想让游戏或电影中的虚拟角色表现得更加真实,面部表情是至关重要的.人脸识别技术则借助真人表演来为虚拟角色赋予丰富的表情与面部动作,小至皱眉带动眼部肌肉 ...

  9. 利用Unity插件Anima2D创建2D骨骼动画

    利用Unity插件Anima2D创建2D骨骼动画 创建步骤 导入Anima2D插件 准备2D素材 配置2D骨骼 对2D角色应用IK(反向动力学) 利用Animation创建2D人物动画 创建步骤 导入 ...

最新文章

  1. 此问题可能是由配置更改或安装另一个扩展导致的
  2. Android面试题目之(13) ListView的设计原理
  3. Docker_容器数据卷
  4. BZOJ3133[Baltic2013]ballmachine
  5. Leecode02-两数相加——Leecode热题100道系列
  6. QT学习笔记(九):遍历容器-迭代器(iterators)
  7. 英特尔助力完善AI人才培养,携手微软共促地球可持续发展
  8. Latex的空格 转载
  9. html 自动完成,如何指定 form或 input元素是否应在HTML中启用自动完成功能?
  10. Linux IPC POSIX 共享内存
  11. 第六章 面向对象的程序设计
  12. 3D呈现transform-style(CSS3)
  13. 334个地级市名单_中国各级行政区划数量,统计到乡镇一级
  14. 逻辑左移、算术左移、逻辑右移、算术右移
  15. 医学遗传学词汇英语术语英文(Glossary) 3
  16. 有哪些值得推荐的找电子书的网站?
  17. 北漂生活-租房那些事
  18. java ncso发送电邮_如何在Windows中从命令行发送电子邮件(无需额外的软件)
  19. Py之scikit-sos:scikit-sos的简介、安装、使用方法之详细攻略
  20. 小红有5本新书,借给3位小朋友

热门文章

  1. 梦龙_C语言作业10
  2. python-pandas基本数据操作
  3. 2013中国互联网安全大会---关于季昕华老师的分享(不喜请勿入!)
  4. CPU电源状态(C-States )
  5. 第5篇:K8S功能架构图 以及全景工作流程图 (初识K8S)
  6. 聊天记录误删了有办法找回吗?微信聊天记录误删怎么恢复
  7. 一阶导数/微分和二阶导数/微分算子在图像锐化处理方面的区别
  8. 测试脸的大小用哪个软件,测脸型的app哪个好 可以检测脸型的app排行
  9. 需求:缔造伟大商业传奇的根本力量
  10. 有一种爱叫诱惑,有一种爱叫背叛