基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式。
因为UIPanel的scrollview实现方式要渲染很多的道具图,性能自然就降低了。
如果是用第二个摄像机camera的方式,物体并没有动,只是拖动第二个摄像机摄像机,这样会只渲染第二个摄像机内部能看到的区域,其他看不到的区域不会渲染,性能就比较高。

层级思路

UIRoot--Camera
  --空object(window)
    -----LU(UIAnchor或者UIWidget 内置的定位点)
    -----RD(UIAnchor或者UIWidget 内置的定位点)
    -----背景层(UISprite+BoxCollider + UIDragCamera)

UIRoot2--Camera2

  --Table(Panel+Table面板列表容器)

    -----Item0(Widget+BoxCollider +UIDragCamera+UIButtonScale..)

基于Camera的Scrollview实例

1.创建项目工程和文件目录

2.创建第一个摄像机,NGUI---->Create---->Sprite然后删除Sprite留下第一个摄像机,设置UI Root的Scalling Scale为Constrained

3.在UI Root下创建一个空节点Window,下面创建一个子节点Sprite当作背景图,再给这个背景Sprite添加一个碰撞器Attach---->Collider因为等下要拖动。

 再给这个背景Sprite添加Drag Camera组件,可移动的摄像机。

4.以左上角和右下角两个点为定位点,在UI Root下创建两个空节点LU和RD,都添加UI Anchor组件(用NGUI Widget也可以),两个Anchor组件的Container都是相对于背景Spriite,但是Side的话LU对应Top Left,RD对应Buttom Right。

 UIAnchor,做简单的定位用的,9个定位点

 UIWidget,内置的定位点,也可以达到同样的功能,但是定位点可以自己任意的设置

  

5.创建一个空节点放在第一个UI Root的区域外面,挂载一个UI Root的组件作为第二个UI Root,Scalling Scale设置为Constrained

6.在第二个UI Root下创建一个空节点CameraOutUI,挂载一个Camera的组件,投影模式Projection设置为Orthographic投成2D,Size设置为1,Clliping Planes---->near -10,far 10,Depth深度值一定要比第一个UIRoot的Camera大,越大越在上面

7.给空节点CameraOutUI再添加一个UI Camera和UI ViewPort组件,以及UI Draggable Camera组件可以拖动摄像机

8.设置第二个UI Root的层为Default层,然后设置CameraOutUI的Camera的组件的Culling mask为Default层,只看Default层,Clear Flags设置为Dont Clear可以看见背景

9.设置UI ViewPort组件Source Camera为第一个UI Root的摄像机,Top Left和Buttom Right分别对应刚才创建的LU和RD节点,这是一个对齐的过程,Full Size是控制缩放的。Camera组件里面的Size这时候的大小是计算出来的不能改变。

10.设置UI Draggable Camera组件的Root for Bounds为第二个UI Root节点,ScaleX和Y表示是水平拖还是竖直拖,这里设置Y为0就是水平拖,如果设置X为10就是10倍的水平拖动速度,Scroll Wheel Factor表示鼠标滚轴也可以滑动,值为2,值表示滚动速率

11.在第二个UI Root下创建一个空节点Table,给这个Table挂载一个Table的组件,里面打钩Hide Inactive隐藏未激活的点,这个很关键,Padding设置为x=8,y=8

12.给空节点Table再挂载一个Panel组件,然后在Table下创建一个Widget类型的子节点叫Item0,每一个Item0节点都要Attach---->Colllider,而且要挂载Drag Camera组件关联第二个UI Root的摄像机

13.设置第一个UI Root的背景节点的Drag Camera组件的Draggable Camera为第二个UI Root的摄像机,这个是为了在拖动背景的时候道具列表也会跟着拖动

14.在Item0下面创建一些Sprite子节点,小Label之类的,可以给Item0加一些特性组件,比如Button Scale按钮缩放和Play Sound播放声音组件,然后再复制许多的Item0出来

15.设置Table节点的Tabel组件的Colums列数设置为1,可以看到所有的Item0排成一列,再设置为0,可以看到所有的Item0排成一行。

16.选中第二个UI Root的摄像机,调整位置到刚好是看到这些Item0的最佳位置

17.解析图

关于Unity中NGUI的背包实现之Scrollview(基于Camera)的更多相关文章

  1. 关于Unity中NGUI的Tab商城、Scrollview和打字机效果的实现

    Tab商城实例 UIToggle 和 UIToggledObjects+ Box Collider(实现商城功能必备) 1.创建两个个UI Sprite,Sprite1和Sprite2 2.给Spri ...

  2. 关于Unity中NGUI图片精灵响应鼠标的方法

    我在Unity里做NGUI的时候发现一个问题. 在Unity2D场景当中,一个精灵图片只要加上了Box Collider或者Box Collider2D,就可以相应OnMouseEnter和OnMou ...

  3. 关于Unity中NGUI的3D角色血条的实现

    首先要到Unity的Assets Store里面去下载一个扩展的Package叫NGUI HUD Text v1.13(81),注意如果没有安装NGUI就必须先安装NGUI插件,否则会用不了,因为HU ...

  4. 关于Unity中NGUI的Checkbox复选框、Slider滑动条和Button的6种触发回调事件的方式

    Checkbox复选框 1.创建一个NGUI背景Sprite1节点 2.打开NGUI---->Open---->Prefab Toolbar---->选择一个复选框节点,拖拽到背景节 ...

  5. 关于Unity中NGUI的Pivot和锚点

    Pivot 1.创建一个Sprite类型的Sprite1节点,关联一个图集和一张贴图,用图中的六个按钮调整这个贴图的Pivot点,一共有八个点可以选择 2.再创建一个Sprite类型的Sprite2节 ...

  6. 关于Unity中NGUI的帧动画和Tween动画

    帧动画 1.把三张帧动画的贴图png制作成图集,NGUI---->Open---->Atlas Maker,生成一个预制体,一个材质球,一个大图 2.创建一个Sprite类型的Sprite ...

  7. NGUI研究院之在Unity中使用贝塞尔曲线(六)[转]

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天因为工作的原因需要将贝塞尔曲线加在工程中,那么MOMO迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的任意角度的曲线,这两个点一个是 ...

  8. NGUI研究之在Unity中使用贝塞尔曲线

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...

  9. 关于Unity中的NGUI字体

    NGUI字体类型 1: UIFont字体,UIFont类实现的2: TTF动态字体的使用3: BBCode的特殊字体的使用4: NGUI字体制作5: BMFont字体制作和艺术字体的制作6: UILa ...

随机推荐

  1. [CC-PERMUTE]Just Some Permutations 3

    [CC-PERMUTE]Just Some Permutations 3 题目大意: \(T(T\le10^5)\)次询问,每次询问有多少长度为\(n(n\le10^6)\)的排列,满足任意相邻两个数 ...

  2. 不让Editplus保存时java文件时生成.bak文件

    EditPlus是一个强大的编辑工具,不单单是编辑文字强大,很多的刚开始学习编程语言的初学者会选择它,例如 html,js,php,java.但是却遇到一个问题,就是每次编辑完后点保存就会出 现bak ...

  3. linux sendmail 发送缓慢的问题

    这个问题关键就是hosts里面对于本机host的设置有问题,你可以看下/var/log/mail.log retry 和 sleeping,再加上其他时间,用sendmail发送邮件等这么久,太累了吧 ...

  4. 数据结构笔记1_求第k个最大者

    参考的文章有: http://www.cnblogs.com/CCBB/archive/2009/06/01/1493971.html http://www.cnblogs.com/zhangchao ...

  5. Zookeeper学习笔记——1 单机版本环境搭建

    下载 首先去官网下载: http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/ 然后执行tar -zxvf解压 启动 进入conf目录, ...

  6. A - K进制下的大数

    https://vjudge.net/contest/218366#problem/A 中间溢出,注意求模. #include<iostream> #include<cstdio&g ...

  7. Scala:Method 小技巧,忽略result type之后的等号

    var x = 0 def IncreaseOne(): Int = { x += 1 x } def IncreaseOne() = { x += 1 x } def IncreaseOne = { ...

  8. centos清除dns cache.

    # /etc/init.d/nscd restart # service nscd restart # service nscd reload # nscd -i hosts https://www. ...

  9. UAC 实现原理及绕过方法-打洞专用

    首页 新随笔 订阅 管理 随笔 - 7  文章 - 0  评论 - 0 UAC 实现原理及绕过方法   目录 0x01 UAC 实现方法(用户登陆过程)0x02 UAC 架构0x03 触发UAC0x0 ...

  10. [转]oracle 常用的指令

    1.显示当前用户名 select user from dual; show user 2.显示当然用户有哪些表 select * from tab; 3.显示当所有用户的表 select * from ...