Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体
最终效果如下:
实现ScrollView主要是NGUI的三个脚本“UIDraggable Panel”,“UIGrid”,“UIDrag Panel Contents”
1.首先创建一个UIRoot 2D
更改Anchor为Anchor-Left,并设置UIAnchor的Side属性为Left;
2.在Panel 添加一个Panel,并命名为ClippedPanel;添加脚本UIDragpanel
3.建立ScrollView表格:在ClippedPanel中新建子物体(快捷键:Shift+Alt+N),命名为Grid,并添加UIGrid脚本,Compoent>NGUI>INteraction>Grid
4.添加需要显示滚动的子物体,在UIGrid下新建子物体,Item,在Item下添加Sprite,并在Item添加Drag Panel Contentst脚本,Compoent>Ngui>Interation >Drag Panel contents
然后NGUI — Attach a Collider。这里是很重要的,如果不Attach a Collider,将不会收到拖动的事件。然后Ctrl+D 复制粘贴几个Item,点击运行,Grid就会自动把Item排列,如下图,然后选中所有Item,缩放他们的大小,然后更改UIGrid中Cell Height和Cell Width的大小,是他们互相适应,什么意思大家都懂得。
现在运行,就发现很简单的ScrollView就出来了。
5,更改UIGrid布局,因为是横向滑动,与我们的要求不符,更改UIGrid中Arrangment属性,为Vertical,点击Repostion Now ,你就发现图标全部纵向排列了,
再更改Max Per Line属性,该属性的意思是一行最多几个子对象(当你排列方式为横向时),或者一列最多几个子对象(当你排列方式为纵向时)。
我们输入6,点击Reposition Now ,就会发现排列方式如下:
显示的的确是6行,当到达6行时,另起一列。
6,更改滑动方向,当你运行时,你会发现,怎么我把排列方式设为纵向,它还是横向滑动,没错,这时我们需要修改UIDraggablePanel属性,选中ClippedPanel,修改Scale属性X=1,在X轴方向左右移动,Y=1,在Y轴方向上下移动,Z=1,呵呵,没效果,可能是因为我们建的是2DNGUI的缘故。把Scale值设为0,1,0,点击运行,此时就会发现Item跟着鼠标点击上下滑动。
7,修改ClippedPanel,设定滑动范围。我们会发现,Item会随着我们鼠标随意上下翻滚,没有界限,一直到所有Item全部消失,这种效果绝对不行。
选中ClippedPanel,修改Clipping属性为SoftClip,并修改其他位置,中心等属性,使之与Grid相适应,也适当修改UIGrid的位置
.Clipping就是对当前Panel进行裁剪,设置裁剪后显示的区域,使之滚动区域和滚动表格相符合。运行一下,就会看到基本雏形。
9,制作背景,和滚动条。完善一下这个滚动视图,在panel下新建一个Panel,命名为UIPanel,添加一个Sprite命名为Background
卧槽,不知道怎么回事,出现个好严重的BUG了,先写到这
。。。
SHIT不知道是我改了什么,NGUi全乱了,自带的Demo也显示的不正常,重新导入NGUI也不行,最后把Unity卸了,还不想你跟,把注册表删干净了,重装一遍才正常,无语啊!!!!!!!!!!!!
接着说
9,制作背景,和滚动条。完善一下这个滚动视图,在panel下新建一个Panel,命名为UIPanel,新建子物体为BackGround,在他下面再添加两个Sprite,制作背景图片和前景图片,随便选两张,效果如图
再在UIPanel下添加一个Scroll Bar,与Background同级,默认是横向的更改Direction为纵向,放到Grid右边,然后选择ClippedPanel让他与Scrollbar 关联。把Scroll Bar整个拖到UIDragglepanel的Vertical Scrollbar上,那么选择如图
,如果你绑定的是纵向滑杆,那选择Horizontal ScrollBar。
点击运行,查看效果。
或许你会发现,滑动鼠标滚轮时效果怎么不对,方向是反的,我是遇到这样情况,第一种方法把Scroll Wheel Factor改成1,第二种方法,找到NGUi自带脚本,UIDraggablePanel,找到Scroll函数
这是相应鼠标滚轮的函数,将mScroll +=改为-=,如图,即可
对了,如果想让鼠标滑过Item有效果的话,添加UIButton Scale脚本,点击运行。
好的,前期UI工作做完,接下来是后台代码了。
首先说说思路,点击Item,获取当前点击的Item是哪个,传给需要显示物体的方法,根据传来的参数,显示物体。
首先在每个Item上都添加UIButtonMessage脚本 Compoent>NGUI>Interation>ButtonMessage,用于发送传递信息
在场景中新建一个Cube,用于接收传递参数的对象。将Cube拖到UIButton Message中的Target上,functionname自定义,看你在Cube上接收函数是什么就是什么
说一下让鼠标显示当前Item图片的方法。
string showObjName;//接受UI传来的要显示物体的名字
UISprite sprite;//当前传递的Sprite:
GameObject lastSpriteObj=null;
/// <summary>
/// 接受点击的Sprite信息,显示对象
/// </summary>
/// <param name="obj">点击的按钮对象</param>
void showObject(GameObject obj)
{
if (obj.GetComponentInChildren<UISprite>().enabled)//如果当前点击的是已显示的Sprite按钮
{
if (lastSpriteObj != null)//如果不是第一次传值
{
if ((obj != lastSpriteObj)&&(sprite!=null))//如果本次传值与上次传值不同并且当前Sprite不等于空
{
lastSpriteObj.GetComponentInChildren<UISprite>().enabled = true;//显示上次点击的Sprite
}
}
sprite = obj.GetComponentInChildren<UISprite>();//获得传来的对象的子物体组件<UISprite>
UICursor.Set(sprite.atlas, sprite.spriteName);//设置鼠标图片
obj.GetComponentInChildren<UISprite>().enabled = false;//隐藏本次点击的sprite
readyCreate = true;
lastSpriteObj = obj;
}
else//如果当前点击的是不显示的Sprite
{
if (sprite == null)//如果当前Sprite为空,即已经实例化了物体
{
return;
}
else
{
if (obj == lastSpriteObj)
{
readyCreate = false;
obj.GetComponentInChildren<UISprite>().enabled = true;
UICursor.Clear();
return;
}
}
}
}
主要就是通过传来的GameObject信息,获得他的子控件中是UISprite名字的控件,通过NGUI自带的类UICursor.Set()来设置 ,还有判断当前鼠标点击对应Item的Sprite时,隐藏Item上的Sprite,当本次点击与上次点击不符时,隐藏本次Item上的Sprite,显示上次点击的Item上的Sprite。
Unity3D基础学习 NGUI Example 7-Scroll View(Panel)制作固定包裹栏,点击传递参数显示物体的更多相关文章
- Unity3D基础学习 NGUI自带Tooltip制作提示文字
简介 NGUI自带的的例子Character中含有一个Tooltip,可以鼠标悬浮到某对象时显示提示文字.非常方便. 创建UITooltip 首先你需要在场景NGUi相机下建立一个空物体我把它命名为T ...
- Unity3D基础学习 NGUI之Example 13 - Tabs简要概述
首先建一个2D相机,在Anchor下新建一个子物体,添加WindowDrag Tilt脚本,用作拖动窗口 然后新建一个Panel,包含两个content,两个Tab,设置两个Content用来显示切换 ...
- NGUI之scroll view的制作和踩坑总结
之前也看了不少童鞋谢了关于NGUI的scroll view的制作下面我写下自己的制作过程以及心得,希望对童鞋们有所帮助.1.首先建立一个960*640的背景参考http://game.ceeger.c ...
- Unity3D基础学习 利用NGUI的Texture播放视频
利用NGUI播放视频,首先你得导入你的视频 你的电脑中必须安装QuickTime软件,没有,去下一个,如果是Windows系统,安装完之后重启. 接下来转换你的视频格式,如果你的视频在QuickTim ...
- Unity3D基础学习之AssetBundle 资源包创建与加载
前几天做了AssentBundle的例子,遇到了问题,在论坛上问了三天都没人解答,最后在一个朋友的帮助下解决了.下面介绍AssentBundle. AssetBundles让你通过WWW类流式加载额外 ...
- Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体
隐藏物体有两种方法,一是设置Meshrender为False,即不渲染物体. 二是设置物体为False,禁用物体,我使用的第二种. 当场景中需要隐藏的物体很多时,我们可以添加一个层来表示需要隐藏的物体 ...
- unity3D基础学习 通过判断鼠标点击的是否是目标物体,物体旋转,滑动滚轮缩放拉近视角
贴代码: 摄像机的拉近视角代码: public Transform target; public float minFov = 15f; public float maxFov = 7 ...
- salesforce 零基础学习(二十)简单APP制作
本篇参考链接:https://developer.salesforce.com/trailhead/project/salesforce_developer_workshop 本篇讲述的是最简单的AP ...
- JAVA基础学习之 Map集合、集合框架工具类Collections,Arrays、可变参数、List和Set集合框架什么时候使用等(4)
package com.itcast.test20140113; import java.util.ArrayList; import java.util.Arrays; import java.ut ...
随机推荐
- css3响应式布局
响应式布局 分栏布局,-webkit-column-width(定义每栏的宽度,会根据每栏宽度自动分成若干栏) <style> .wrap {width: 900px; border: 1 ...
- C# 汉字的字符串截取指定字节的长度
int index = 0; int setCharCount = 74; string str1 = "三星 SCH-I829 电信3G手机(优 ...
- Linux下安装Android的adb驱动-解决不能识别的问题
Linux下安装Android的adb驱动-解决不能识别的问题 20141011更新: 老方法对我当时使用的一款设备一直都没有出现问题,最后遇到小米手机还有Android4.4版本的系统都会 ...
- python自学笔记
python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...
- java_log_02
配置 在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子.在第二部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran 一.Logback ...
- 跟我学android-android常用布局介绍
在上一章我们曾经谈到,Android平台的界面 是使用XML的方式设计的,然后在上一章我们只做了一个简单的界面,在这章,我们将介绍如何使用常用的控件设计实用的界面. Android中的视图都是继承Vi ...
- uvalive3026 Period (KMP+结论)
题目链接:http://vjudge.net/problem/viewProblem.action?id=29342 题目大意:给定字符串,找到每个前缀的最大循环节的个数. 首先当然是kmp预处理,接 ...
- 【USACO 2.2.3】循环数
[题目描述] 循环数是那些不包括0且没有重复数字的整数(比如81362)并且还应同时具有一个有趣的性质, 就像这个例子: 如果你从最左边的数字开始(在这个例子中是8)向右数最左边这个数(如果数到了最右 ...
- ubuntu用户及用户组文件信息
1.用户帐号文件 /etc/passwd中存放当前系统的用户列表及用户基本的设置信息: 文件中每一行对应一个用户信息,用户信息用":"来分隔,各项内容含义如下: 用户名:用户密码: ...
- arp断网攻击解决办法
局域网中有这个提示arp断网攻击是正常的,说明防火墙已经拦截了,是有人用P2P工具控制你的网速,或者是局域网有机器中病毒了也会有这样的提示,不过不用担心,今天给大家带来几个防止arp断网攻击的办法,希 ...