关于Unity中NGUI的背包实现之Scrollview(基于Camera)

基于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.解析图

 

转载于:https://www.cnblogs.com/HangZhe/p/7472880.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YUV422/420 format

(在本文中,U 一词相当于 Cb,V 一词相当于 Cr。) YUV422 format as shown below 4:2:2 表示 2:1 的水平取样,没有垂直下采样 YUV420 format as shown below4:2:0 表示 2:1 的水平取样,2:1 的垂直下采样. YUV4:2:0并不是说只有U&…

vue部署问题

history模式配置后刷新404的解决办法! 第一种 nginx配置 在usr/local/nginx/conf/vhost 下 域名.conf配置文件修改或添加 第一种方案server {##在server下添加或在location里面添加以下代码location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.html?s$1 last…

位域

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构&a…

数字后端——ECO

目录 一、概述 二、ECO分类 1、按时间节点 1)流片前的ECO 2)流片过程的ECO 3)流片后的ECO 2、按网表是否改变 1)功能ECO 2)时序ECO 三、ECO处理内容 1、设计规则违例 1)提升标准单元驱动力 2…

Uncaught TypeError: Cannot read property 'length' of null错误怎么处理?

Uncaught TypeError: Cannot read property length of null 错误怎么处理? 1.可能是返回的datagrid数据格式有问题,比如{"total":0,"rows":null},改为{"total":0,"rows":"[]"}就可以了 if…

电视百科常识 九大视频接口全接触

1 射频 天线和模拟闭路连接电视机就是采用射频(RF)接口。作为最常见的视频连接方式,它可同时传输模拟视频以及音频信号。RF接口传输的是视频和音频混合编码后的信号,显示设备的电路将混合编码信号进行一系列分离、解码在输出成像。…

tracert路由检测命令使用方法

很多客户网站无法访问的时候都会第一时间怀疑是虚拟主机有问题了,其实大多时候网站无法访问和很多因素相关,包括自己的网络、计算机设置、省际路由等等; 那么这里我就简单讲下如何利用DOS下的命令检测你的计算机到服务器之间的路由是否通畅&a…

数字后端——物理单元介绍

物理单元( physical cell)指没有逻辑功能但是具有物理实现功能的标准单元, 用于抑制芯片生产过程中的各类物理效应, 保证芯片生产后能够正常工作 。硬核位置确 定后,需要插入物理单元消除影响芯片工作的物 效应&#x…

vue双向数据绑定的原理

有关双向数据绑定的原理 最近两次面试的时候,被问到了vue中双向数据绑定的原理,因为初学不精,只是使用而没有深入研究,所以答不出来。之后就在网上查找了别人写的博客,学习一下。 下面是博客园一篇博客,以及…

求职网站总结

最近忙着要找份工作。毕业半年多就辞职,也是尴尬。 这里记录一些求职网站和找工作的一些经验。主要参考了三个知乎问题:怎么在互联网上找工作?,招聘网站,哪个靠谱?和哪个求职网站(app&#xff0…

FTP命令解析

FTP命令详解FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。   FTP的命令行格式为&…

深入Java内存模型

你可以在网上找到一大堆资料让你了解JMM是什么东西,但大多在你看完后仍然会有很多疑问。happen-before是怎么工作的呢?用volatile会导致缓存的丢弃吗?为什么我们从一开始就需要内存模型? 通过这篇文章,读者可以学习到足…

Matlab 使用GPU加速 转载

在matlab中使用GPU加速,来加速矩阵运算。 首先如前面所说,并不是所有GPU都能在maltab中进行加速的,貌似只有NVDIA的显卡可以吧。 硬件:GeForce GTX 980 软件:Matlab 2015a (Matlab 2012以后的版本才带有GP…

数字后端——可制造性设计

随着集成电路制造工艺技术的迅速发展,集成电路集成度迅速攀升,制造流程及工艺步骤日趋复杂,工艺尺寸也在不断缩小。集成电路可制造性设计(Design For Manufacturability,DFM) 以直接提升集成电路芯片的良品率及降低芯片…

Cloudstack安装(二)

Cloudstack安装 官方文档参考: http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.9/qig.html#environment Cloudstack主要分Management和Agent两部分。 系统版本:CentOS 6.8 Management: cpu1,ram 2048M…

Pycharm 输出中文或打印中文乱码现象的解决办法

转载地址:https://www.cnblogs.com/Bro-Young/p/5920884.html 1. 确保文件开头加上以下代码: 1 # -*- coding:utf-8 -*- 还可以加上 1 import sys 2 reload(sys) 3 sys.setdefaultencoding(utf-8) 确保以下。 如果还是没有解决中文乱码,那么进…

计算机系统结构——概述

计算机的实现包括两个方面:组成和硬件。组成一词包含了计算机设计的高阶内容,例如存储器系统,存储器互连,设计内部处理器 CPU (中央处理器——算术、逻辑、分支和数据传送功能都在内部实现)。有时也用微体系…

BestCoder Round #91 1001 Lotus and Characters

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid6011 题意: Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串。 定义串的价值为:第1位字母的价值*1第2位字母的价值*2第3位字…

Calendar的那些神坑

参考我的博客:http://www.isedwardtang.com/2017/08/31/java-calendar-bug/转载于:https://www.cnblogs.com/EdwardTang/p/7476781.html

mkyaffs2image的用法

在Ubuntu中第一次使用mkyaffs2image命令时,会提示 mkyaffs2image:找不到命令 还需要安装mkyaffs2image http://code.google.com/p/fatplus/downloads/detail?nameyaffs2-source.tar&can2&q 下载yaffs2-source.tar 解压后,进入util…