NGUI的UIngui dragscrollvieww的cancel drag if fits怎么用代码判断这个

你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
就是如果填充满了就不能滑动,怎么用代码判断有没有fits?
去看看源码
1.根据Item能放几个,判断超过5Itme就是满了
2. 读取ScrollView的长度,减去 Item宽度*几个数
要回复问题请先或
浏览: 1276
关注: 3 人NGUI:UIScrollView
一個裁切過的並不完整,除非他能夠像滾動視窗一樣能夠被四處拖曳,是吧?是的!
要讓Panel能夠滾動檢視只要簡短的三步驟:
首先,選擇你想要改成滾動檢視的panel,然後再Scene視窗中的任何地方按下右鍵,帶出右鍵選單,然後選擇Attach -& Scroll View。
現在你有一個滾動視窗了,藉由拖曳紫色把手來改變四邊大小,就像是改變widget的大小一樣。
最後的步驟是新增一個UIDragScrollView&腳本到最少一個碰撞器。再來一次,選擇該碰撞器,在scene視窗中按下右鍵,Attach -& Drag Scroll View(它會在最上面,如果你又照著前面步驟走的話)
注意,假如你有多個碰撞器,那麼你需要將Drag Scroll View腳本加到每一個使用者可以按下的碰撞器中。所以,舉個例子來說,假如你有一個像是Scroll View範例中的滾動視窗,&裡面有一個背景區塊,還有一串物件在裡面,你要把UIDragScrollView加到背景,以及每個子物件中。這個想法其實很簡單:每個能夠獲得事件的碰撞器都應該能夠拖曳滾動視窗。
注意一點,基於右鍵選單的方式,是內容敏感的,所以說假如你在一個不含有碰撞器的widget上按下右鍵,是無法看到drag scroll view選項的。
在scroll view腳本中有幾個選項可以讓你調整。第一個選項是Movement&,這能讓你選擇是要建立一個水平或是垂直拖曳的panel。你也可以選擇Unrestricted,這個選項讓你可以自由的拖曳內容。假入你要自訂移動,你可以選擇Custom&來設定X與Y的值。
下一個選項是Drag Effect&,當你在拖曳時,這個選項能控制scroll view的行為,MomentumAndSpring&是預設的類似iOS的行為。
假如你像要讓滾動視窗能夠被滑鼠的滾動輪滾動,設定Scroll Wheel Factor的值。注意一點,你可以指定一個負值,像是-0.25,假如你像要滑鼠滾輪倒著捲動的話。
Momentum Amount控制當使用者拖曳丟出時滾動視窗的行為。調整這個值讓他更敏感或更不敏感,取決於你的意願。
Reset Positio當滾動視窗被程式重置位置時,滾動視窗的停止位置。這個值與內容的寬度與高度相關。當值是(0, 0)代表著左上角。假如你想要一個中間的重置點,你應該指定該值為(0.5,0.5)
在大部分的情況下,你會想要讓Restrict Within Panel&選項是開啟的。因為這樣可以避免你的滾動視窗內容離開了滾動視窗的範圍。如果你還沒猜到的話,滾動視窗內容的大小就是在scene視窗中以橘色畫出來的框框。
Cancel Drag If Fits選項可以避免內容離開邊界。假如這選項為off,這可能會讓拖曳時將內容拖到邊界外面,但這樣做會有可見的阻力。(維克:其實我不太知道這段在講啥,就我所知Cancel Drag If Fits這選項勾選時,如果內容大小不需要拖曳就能夠全部被顯示出來,那他就不能夠再被拖曳。)
Smooth Drag Start&與IOS Drag Emulation&選項更進一步的調整卷軸視窗的行為,在大部分的情況下,只要使用預設值就可以。
假如你有一個水平或是垂直的捲動條,你可以在適當的區域指定它們。一旦這樣做,你也可以藉由調整Show Scroll Bars選項來選擇當滾動條不在需要時,滾動條會發生的事。(維克:哪來的Show Scroll Bars 選項 ??)
滾動視窗只會裁切在它底下的widgets,假如你將scroll views變成巢狀,裁切部分並不會被巢狀,只有一個滾動視窗可以裁切其內容。
新手提示:
滾動條的Show Condition選項最好是使用預設的OnlyIfNeeded&,這樣你的滾動條就可以自動隱藏直到它們真的需要時才出現。
類別文件:
本頁面是翻譯官方網頁的文件:
教學影片:
老是忘記怎麼做 所以自己錄起來==",有個重點是 要注意碰撞器的大小,ALT+SHIFT+C 會自動加入並且大小會自動變更。
不是你喇叭壞掉,是我不好意思對著電腦說話 =="。
&&按個讚!~支持本站!~
FB推薦載入中&&Unity3D基础(205)
UIScrollView制作滑动列表,可横向,竖直展示一些列表在固定可视范围内
UIScrollVIew只是一个可滑动的UI组件
如果需要制作复杂的可视区域UI需要配合使用UIPanel与UIGrid
这样更方便UI的展示
a.创建一个2D UI Root,在NGUI菜单上创建一个Scroll View
b.在ScrollView上默认的为我们添加了一个UIPanel与UIScrollView
Alpha:面板的透明度
Depth:面板在所有UI上的层次等级
Clipping:面板剪切,分为None(无剪切效果),Soft Clip(软剪切,有边缘模糊效果),Alpha Clip(硬剪切,边缘锋利)
Constrain But&Don't Clip(显示所有内容,但是是剪切区域存在)
Advanced Options:高级选项
Render Q:面板里所有图片的渲染质量,Automatic(自动适应),Normal(正常),Explicit(用户指定)
Normals:法线贴图
Cull:如果用鼠标手动组件则剔除组件
Visible:面板是否在可视范围内
Offset:通过位置偏离锚点
Static:如果是没移动的组件,也进行代码检测,一般是用于ScrollView
Panel Tool:是否显示面板工具
Show Draw Calls:显示渲染的详细信息
Content Origin:滚动内容的起始点位置
Movement:移动方向
Drag Effect:内容拖动时候显示的效果
Scroll Wheel Factor:使用鼠标进行滚动时,滚动时候的比例
Momentum Amount:快速滑动时产生的冲力
Restrict Within Panel:在面板里进行约束
Cancel Drag if Fits:如果有组件适应了面板的大小,取消组件在面板里的拖动
Smooth Drag Start:平滑拖动
IOS Drag Emulation:在苹果上仿真滑动效果
Scroll Bars:在进行拖动时,可以加入一个Scroll Bars来控制或者显示进度
c.在NGUI菜单上添加一个Grid到ScrollView组下
d.设置UIGrid
Arrangement:表格的显示方向
Sorting:对表格内的内容进行排序,Alphabetic(以字母顺序排序),Horizontal(水平方向进行排序),
Vettical(垂直方向进行排序),Custom(自定义的排序)
Max Per Line:表格每行显示多少个元素
Cell Widht:单个显示的宽度
Cell Height:单个显示的高度
Animate Smoothly:使用平滑动画过度效果
Keep Within Panel:保持在一个面板里显示
e.添加一些元素到UIGrid组下,并设置好位置,配合UIPanel的Soft Clip可
以让元素在一定的可范围内显示
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:490056次
积分:9607
积分:9607
排名:第1312名
原创:406篇
转载:469篇
评论:74条
(2)(3)(26)(12)(6)(14)(5)(1)(14)(18)(26)(37)(24)(29)(19)(9)(14)(17)(54)(20)(53)(127)(93)(49)(31)(44)(28)(56)(21)(5)(9)(12)(3)(1)给我们留言
地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网
电话: 400-067-3919
(周一到周五, 周六周日休息)
查看: 1266|回复: 3
最后登录注册时间阅读权限90积分31444
资深设计师, 积分 31444, 距离下一级还需 18556 积分
纳金币32074 精华75
最近由于工作需要,就开始研究NGUI滑动。刚开始参考NGUI自带的循环滑动,利用隐藏和显示,提高GPU的渲染,但是效果依旧不是很理想。在同事提醒下,添加缓存列表,不断刷新当前裁剪区域里的数据,最总完成了需求。在网上也参考了很多资料,今天恰好闲下来,就拿出来大家分享下,哈哈。代码附上:
主要分为三部分
1.重写UIScrollView和UICustomDragScrollView两个脚本
2.核心脚本NGUIDynamicScrollBase ,计算滑动和播放位移动画using UnityE
using System.C
using System.Collections.G
/// &summary&
/// 扩展NGUIScroll滑动类,需要继承该类进行开发
/// &/summary&
public abstract&&class NGUIDynamicScrollBase : MonoBehaviour
{
& & //每个列表项数据初始化
& & abstract protected void ResetItemData(GameObject go, int index);
& & public UIP
& & public UIG
& & //目标prefab
& & public GameO
& & //宽度
& & public int cellHeight = 60;
& & //高度
& & public int cellWidth = 700;
& & //裁剪区的高度
& & private float m_
& & //裁剪区的宽度
& & private int m_maxL
& & //当前滑动的列表
& & protected GameObject[] m_cellL
& & //当前需要滑动的列表总数
& & private int m_dataListC
& & //自定义滑动
& & private UICustomScrollView mD
& & //最后一次的滑动位置
& & private float lastY = -1;
& & private Vector3 defaultV
& & // Use this for initialization
& & protected void BaseOnEnable()
& & {
& && &&&GetConfiguration();
& & }
& & // Update is called once per frame
& & protected void BaseUpdate()
& & {
& && &&&if (panel.transform.localPosition.y != lastY)
& && &&&{
& && && && &Validate();
& && && && &lastY = panel.transform.localPosition.y;
& && &&&}
& & }
& & //设置当前列表中的
& & protected int DataListCount
& & {
& && &&&get { return m_dataListC }
& && &&&set{
& && && && &m_dataListCount =
& && && && &
& && && && &AddItem(m_dataListCount);
& && && && &PlayMoveAnimation(m_cellList);
& && &&&}
& & }
& & #region private Functions
& & //初始化配置数据
& & private void GetConfiguration()
& & {
& && &&&//物体默认位置
& && &&&defaultVec = new Vector3(0, cellHeight, 0);
& && &&&//裁剪区域的高度
& && &&&m_height = panel.
& && &&&//裁剪区域中最多显示的cellItem数量
& && &&&m_maxLine = Mathf.CeilToInt(m_height / cellHeight) + 1;
& && &&&//初始化CellList
& && &&&m_cellList = new GameObject[m_maxLine];
& && &&&//创建Item,默认为不可显示状态
& && &&&CreateItem();
& & }
& & //创建Item
& & private void CreateItem()
& & {
& && &&&for (int i = 0; i & m_maxL i++)
& && &&&{
& && && && &GameObject go =
& && && && &go = (GameObject)Instantiate(prefab);
& && && && &go.gameObject.SetActive(false);
& && && && &go.GetComponent&UICustomDragScrollView&().scrollView = panel.GetComponent&UICustomScrollView&();
& && && && &AddChild(grid.gameObject, go);
& && && && &go.transform.localScale = Vector3.
& && && && &go.transform.localPosition = new Vector3(cellWidth * AllScale.ResolutionScale, -i * cellHeight, 0);
& && && && &m_cellList[i] =
& && && && &go.gameObject.SetActive(false);
& && &&&}
& & }
& & //验证当前区域中的需要显示的CellItem
& & private void Validate()
& & {
& && &&&Vector3 position = panel.transform.localP
& && &&&float _ver = Mathf.Max(position.y, 0);
& && &&&int startIndex = Mathf.FloorToInt(_ver / cellHeight);
& && &&&int endIndex = Mathf.Min(DataListCount, startIndex + m_maxLine);
& && &&&GameO
& && &&&int index = 0;
& && &&&for (int i = startI i & startIndex + m_maxL i++)
& && &&&{
& && && && &cell = m_cellList[index];
& && && && &if (i & endIndex)
& && && && &{
& && && && && & //开始渲染
& && && && && & cell.gameObject.SetActive(true);
& && && && && & //重新填充数据
& && && && && & ResetItemData(cell, i);
& && && && && & //改变位置
& && && && && & cell.transform.localPosition = new Vector3(cell.transform.localPosition.x, i * -cellHeight, 0);
& && && && && & cell.name = &Item_& +
& && && && &}
& && && && &else
& && && && &{
& && && && && & cell.transform.localPosition = defaultV
& && && && &&&//&&cell.gameObject.SetActive(false);
& && && && &}
& && && && &index++;
& && &&&}
& & }
& & //重新计算包围合的大小
& & private void UpdateBounds(int count)
& & {
& && &&&Vector3 vMin = new Vector3();
& && &&&vMin.x = -grid.transform.localPosition.x;
& && &&&vMin.y = grid.transform.localPosition.y - count * cellH
& && &&&vMin.z = grid.transform.localPosition.z;
& && &&&Bounds b = new Bounds(vMin, Vector3.one);
& && &&&b.Encaulate(grid.transform.localPosition);
& && &&&if (mDrag == null) mDrag = panel.GetComponent&UICustomScrollView&();
& && &&&mDrag.bounds =
& && &&&mDrag.UpdateScrollbars(true);
& && &&&mDrag.RestrictWithinBounds(true);
& & }
& & //根据新的数量来重新绘制
& & private void AddItem(int count)
& & {
& && &&&Validate();
& && &&&UpdateBounds(count);
& & }
& &
& & //增加孩子节点
& & void AddChild(GameObject parent, GameObject go)
& & {
& && &&&Transform t = go.
& && &&&t.parent = parent.
& && &&&t.localPosition = Vector3.
& && &&&t.localRotation = Quaternion.
& && &&&t.localScale = Vector3.
& && &&&go.layer = parent.
& & }
& & //播放开始加载的位移动画
& & void PlayMoveAnimation(GameObject[] list)
& & {
& && &&&Vector3
& && &&&Vector3
& && &&&for (int i = 0; i & list.L i++)
& && &&&{
& && && && &from = list[i].transform.localP
& && && && &from = new Vector3(cellWidth*AllScale.ResolutionScale, from.y, 0);
& && && && &to = new Vector3(0, from.y, 0);
& && && && &list[i].transform.localPosition =
& && && && &TweenPosition tp = TweenPosition.Begin(list[i], 0.8f, to);
& && && && &tp.delay = 0.1f;
& && && && &tp.from =
& && && && &tp.to =
& && && && &tp.duration = (i + 2) * 0.1f;
& && && && &tp.method = UITweener.Method.EaseIn;
& && &&&}
& & }
& & #endregion
复制代码3.将列表中的Prefab设置为向上对齐
最后登录注册时间阅读权限90积分5676
高级设计师, 积分 5676, 距离下一级还需 4324 积分
纳金币7264 精华0
Thanks for sharing this one !
最后登录注册时间阅读权限50积分1346
助理设计师, 积分 1346, 距离下一级还需 654 积分
纳金币505 精华0
感谢分享指导
最后登录注册时间阅读权限90积分6667
高级设计师, 积分 6667, 距离下一级还需 3333 积分
纳金币2715 精华0
Great code thanks for this !
站长推荐 /1
纳金名模第121期厨柜3d模型:数量60个,大小为1.72GB。完全免费下载哦!这样的福利我和我的小伙伴们都惊呆了!!下载地址:
400-067-3919
Powered by - X2.5
Narkii Inc.Unity3d NGUI的使用(九)(UIPanel&UIGrid&UIScrollView制作滑动列表) - 推酷
Unity3d NGUI的使用(九)(UIPanel&UIGrid&UIScrollView制作滑动列表)
UIScrollView制作滑动列表,可横向,竖直展示一些列表在固定可视范围内
UIScrollVIew只是一个可滑动的UI组件
如果需要制作复杂的可视区域UI需要配合使用UIPanel与UIGrid
这样更方便UI的展示
a.创建一个2D UI Root,在NGUI菜单上创建一个Scroll View
b.在ScrollView上默认的为我们添加了一个UIPanel与UIScrollView
Alpha:面板的透明度
Depth:面板在所有UI上的层次等级
Clipping:面板剪切,分为None(无剪切效果),Soft Clip(软剪切,有边缘模糊效果),Alpha Clip(硬剪切,边缘锋利)
Constrain But&Don't Clip(显示所有内容,但是是剪切区域存在)
Advanced Options:高级选项
Render Q:面板里所有图片的渲染质量,Automatic(自动适应),Normal(正常),Explicit(用户指定)
Normals:法线贴图
Cull:如果用鼠标手动组件则剔除组件
Visible:面板是否在可视范围内
Offset:通过位置偏离锚点
Static:如果是没移动的组件,也进行代码检测,一般是用于ScrollView
Panel Tool:是否显示面板工具
Show Draw Calls:显示渲染的详细信息
Content Origin:滚动内容的起始点位置
Movement:移动方向
Drag Effect:内容拖动时候显示的效果
Scroll Wheel Factor:使用鼠标进行滚动时,滚动时候的比例
Momentum Amount:快速滑动时产生的冲力
Restrict Within Panel:在面板里进行约束
Cancel Drag if Fits:如果有组件适应了面板的大小,取消组件在面板里的拖动
Smooth Drag Start:平滑拖动
IOS Drag Emulation:在苹果上仿真滑动效果
Scroll Bars:在进行拖动时,可以加入一个Scroll Bars来控制或者显示进度
c.在NGUI菜单上添加一个Grid到ScrollView组下
d.设置UIGrid
Arrangement:表格的显示方向
Sorting:对表格内的内容进行排序,Alphabetic(以字母顺序排序),Horizontal(水平方向进行排序),
Vettical(垂直方向进行排序),Custom(自定义的排序)
Max Per Line:表格每行显示多少个元素
Cell Widht:单个显示的宽度
Cell Height:单个显示的高度
Animate Smoothly:使用平滑动画过度效果
Keep Within Panel:保持在一个面板里显示
e.添加一些元素到UIGrid组下,并设置好位置,配合UIPanel的Soft Clip可
以让元素在一定的可范围内显示
这样一个简单的列表显示效果就做出来了
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 ngui drag and drop 的文章

 

随机推荐