關于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.pswp.cn/news/253527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253527.shtml
英文地址,請注明出處:http://en.pswp.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…