unity 怎么用unity代码改变ui位置设置ngui位置

Unity3D教程:界面插件NGUI的使用(一) | Unity3D教程手册
当前位置 :
>> Unity3D教程:界面插件NGUI的使用(一)
Unity3D教程:界面插件NGUI的使用(一)
步骤1-Scene
1.创建一个新的场景(New Scene)。
2.选择并删除场景里的MainCamera。
3.在NGUI菜单下选择Create a New UI,会打开UI创建向导。
Unity3D教程:界面插件NGUI的使用
4.在创建向导中你能更改UI的基本参数。现在我们选Default layer,点击Create Your UI 按钮。
5.就这样,你的UI便创建好了。
Unity3D教程:界面插件NGUI的使用
注意: 如果在一个已存在NGUI的项目中你要跳过第二步,并且你要选择一个不同的UI层,你还要确保非GUI相机不渲染UI层。
在做具体UI控件之前,我们看看UI向导为我们做了什么。
1.在UI Root (2D)对象上有个UIRoot脚本。这个脚本会重新调整游戏对象符合你的屏幕高度,有自动和手动选择高度。让你制定小部件在像素中的坐标,并且和游戏世界中的剩余对象相比依旧相对来说较小。
2.Camera对象包含Camera和UICamera脚本。UICamera脚本包含NGUI的事件系统(event system)。
3.Anchor包含UIAnchor脚本。虽然这个脚本可以附加给控件,但在这里可以避免Windows机器上半个像素偏移的问题。
4.Panel对象有UIPanel脚本,UIPanel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合优化,以减少绘制命令的调用。
同时,你可能还注意Panel(仪表板)GameObject现在已经被选中了。也就是说下面添加的所有部件都将在作为它的子对象。对应的场景在插件中的Tutorial 1 - Scene中有:
Unity3D教程:界面插件NGUI的使用
步骤2-Spirit
现在让我们添加一些控件,在NGUI菜单中选择NGUI menu -& Create a Widget。
Unity3D教程:界面插件NGUI的使用
这个向导会指导你建立一些基本的控件。需要选择所使用的图片集Atlas和字体集Font。因为是新建的项目,所有按下Atlas和Font按钮没有效果,相反会自动展示最近使用的元素。你想要做的事情是拖拽你想用的Atlas和Font进入到按钮旁边的区域。我们这里先选择Atlas为SciFi Atlas,字体为SciFi Font-Normal。
接下来就是模板的问题。你通过在一堆模板中选择来挑选你想创建什么样的部件。
注意我说的是“模板”。这个的模板只是为了方便而帮助你开始创建,当你真正使用NGUI的时候,你会经常花很多的时间来复制粘贴整个的小部件而不仅仅是用这个向导。现在,让我们创建第一个控件。
1.假设我们Atlas选择的是SciFi Atlas,我们给Sprite选择Dark。
2.点击Add To按钮,(如果按钮是灰色的,那是因为你没有选择Atlas)。.如果你不知道怎么找到它:在项目窗口有一个搜索栏,输入scifi即可。
3.你的Sprite现在已经创建并选中了。不过它非常小,当你使用NGUI的时候,你总需要通过Transform来移动部件,放缩它们,旋转他们。
Unity3D教程:界面插件NGUI的使用
一个非常重要的事情是同一个atlas中的控件不会使用Z轴,不过,你可以调整Depth参数来做前后的调整,如果后面项目结束的时候你用了多个atlase(或者多个UI面板),那么你就可以去调整Z轴变换。原因很简单:这允许你创建完全平滑的窗口,你可以转向一侧,而且在绘制的时候部件的顺序也不会被搞乱。Unity3D教程手册
在前往下一章的学习之前,你可以尝试添加更多的控件,比如加入一个Sliced Sprite(一个含有9个切片的Sprite,创建固定边框的控件最佳选择),一个Tiled Sprite(一个Sprite缩放填充整个自定义区域)和Filled Sprite(每个Sprite都会有一个单独的参数来控制哪些是可见的,常被用来做进度条或者滚动条)。如果你找不到它们也没关系,后面的教程将讲解它们。
对应的场景在插件中的Tutorial2 - Spirit中有:
Unity3D教程:界面插件NGUI的使用
步骤3-Sliced Sprite
1.选择中Panel对象,用控件向导从atlas中添加一个“Dark”的Sliced Sprite。不知道什么叫9-slicing?查看这里
2.调整缩放为(500,500,1)。
3.添加另外一个Sliced Sprite并设置缩放为(500,40,1)。
4.更改第二个sprite的位置到(0,230,0)。
5.更改Sprite的Dark为Light。
6.向下图一样调整两个sprite的颜色直到你喜欢它们位置。
7.调整Depth,让彩色的sprite在 Sliced Sprite前面。Unity3D教程手册
现在看上去有点像是小窗口了。对应的场景在插件中的Tutorial 3 - Sliced Sprite中有:
Unity3D教程:界面插件NGUI的使用
步骤4-Tiled Sprite
1.选择Panel对象,添加Tiled Sprite,并选择Honeycomb sprite。
2.设置它的位置为(0,-19,0)和缩放为(494,457,1)。
3.需要设置深度调整前后次序,将它往后调直到刚好在背景的前面。同时不要忘了调整窗口背景的深度(往后调点)。
玩一玩这个spirit。试试看当你重新缩放它的时候会发生什么,也可以按照自己的意愿调整它的颜色使他看起来更好。你可以在任何时候通过选择Panel对象中的Debug Info的Geometry项然后在场景中点击你的部件来检验生成的几何网格。加了这么多东西,目前依旧仅调用了一次绘画指令。对应的场景在插件中的Tutorial 4 - Tiled Sprite中有:
Unity3D教程:界面插件NGUI的使用
步骤5-Label
1.像前面讲的一样方法,选择Panel对象并在部件导航模板中添加一个Label控件。
2.在点击Add To 按钮之后你的标签应该已经添加到了场景中并且已经被选中了,如果Add To按钮为灰色不可用,是因为你没有指定字体Font,可以从Project面板中给Font栏指定“SciFi Font-Normal”。
3.在Inpector面板给刚添加的UILabel的Text项添加一些文本。比如Hello World!
4.移动标签位置到(0,234,0),让它出现在标题栏上。
你也可以创建一个不同的Label并且使用不同的字体。花点时间研究植入颜色的功能,可以使用16进制的值描述不同颜色(直接从PS中粘贴)。以[FF0000]代表红色,插入[-]来还原到原来的颜色,在这之间的文本都会变为红色。因为使用了相同的字体相同的材质,所有整个场景依旧是一个DrawCall。对应的场景在插件中的Tutorial 5 - Label中有:
Unity3D教程:界面插件NGUI的使用
【上一篇】
【下一篇】
您可能还会对这些文章感兴趣!unity3d学习笔记(十一)NGUI结合Shader制作小地图
我的图书馆
unity3d学习笔记(十一)NGUI结合Shader制作小地图
本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢。http://blog.csdn.net/lzhq1982/article/details/在做这个demo的过程中,制作小地图着实刁难了我一把,百度了很多文章,花了好长的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,先声明一下,本篇文章将会是这个系列中最难的,不过如果成功做出来成就感也是大大的,其实按照我的步骤一步一步来也没那么复杂啦,接下来我把这个过程分享给大家,下面上一张截图:看右上角,那个就是小地图,也许有点不太好看,没办法,谁让我不是美术啊,需要的图素都是自己用Photoshop做的,记得有人说过,不会美术的程序不是好策划,所以自己来吧。先说一下原理,我们做小地图用的技术就是遮罩,玩过flash的对这个词应该不新鲜,何为遮罩呢,通俗一下讲,你有两张纸,一张纸上画了漂亮的山川河流,另一张纸就是张白纸,中间挖个圆洞,然后你把白纸盖在那张画满山川河流的纸上,只有中间圆洞的地方你能看到,其他地方都被盖住了,保持白纸不动,移动后面的画纸,你会看到连续的不同的地貌,我们的小地图原理就是这样的,时刻保持角色在中间,动的只是后面的背景罢了。只是这里需要多处理一下,就是除了那个圆洞,其他的部分我们要透明掉。相信这么解释应该没有不懂的了吧。如果还不清楚那要么是我的表达能力有问题,要么你的智商。。。咳咳,言归正传,按照上面的理论,我们都该准备些什么呢。最起码的得有一张完整的地图吧,得有个圆形的遮罩吧,再漂亮点圆形遮罩需要个圆框,地图上得有个小标志显示玩家的位置和方向。地图好搞,在unity中调到场景的顶视图,然后截个图就好了,缩放一下比例,我的地图是512*512的,取名map,如下图:丑是丑了点,谁让我的地形简单呢,再一次声明,我是个程序。遮罩就需要你自己画个了,要保证它和背景图一样大,我这里也是512*512的,中间是个白色的圆,其他地方alpha是透明的。如图:我这里并没有截全部512的图,不要以为只这么小啊,除了白圆,其他地方都是透明的,其实什么颜色的无所谓,只要是圆的就行。然后做个圆框,也是512的,圆框和白圆大小一致,中间和其他地方都是透明的。最后是角色的那个小标记资源就这些,准备好就可以开干了。关于NGUI我这里就不解释了,看过我前面文章的童鞋应该知道怎么用了,我们要把小地图放在右上角的锚点上,不是简单的放几个sprite的事情,那我们需要做些什么呢。来,我们倒着说,先看结果,我希望我的右上角先有个Panel,然后Panel下有个Textrue,而我的小地图就是绘制在这个Texture上;那小地图是以什么方式绘制到这个Texture上的呢,当然是靠material(材质),而且是一个能实现遮罩,透明,动态渲染的材质。那只能靠材质中的shader了;先不说遮罩和透明,先说动态渲染,我们以前用到的材质都是静态的,而现在我们要用到的是地图可以移动的动态材质,所以要用动态渲染,要说动态渲染,那最先想到的就是Render Texture,要说什么是Render Texture,看这里好了:。由果推因,我们就知道都该做些什么了,一个一个攻克吧,现在我们由因及果。1、绘制渲染纹理(Render Texture)a、先在MainCamera下创建一个UI,选择NGUI-&Open the UI Wizard,保持设置,点Create Your UI,然后Anchor下的Panel改名为MiniMapRenderPanel。b、创建一个Atlas,不知道什么是Atlas的可以看我前面的文章,选NGUI-&Open the Atlas Maker,新弹出的界面上修改你的atlas名称,点击那个完整的地图,就是我上面的那个map,然后点Create。c、在MiniMapRenderPanel下建一个sprite,NGUI-&Open the Widget Wizard,Atlas选刚建的那个Atlas,Template选sprite,Sprite选map,其他默认。最后建完了是这个结构。d、在资源里新建个Render Texture,Assets-&Create-&Render Texture,起名MiniMapRenderTexture。e、设置camera,那个NGUI的camera设置如下:Clear Flags设为Solid Color,Background设为黑色,这样当你走到地图的边缘时,没有地图的地方会绘制成黑色。Projection设为平行投影Orthographic,不了解平行投影和透视投影的话需要补一下3d基础了。Target Texture那里把之前做的那个Render Texture拖上去。这样摄像机投影的地方就会绘制在这个Render Texture上,也就是地图会绘制在它上面了,然后我们就可以做material了。f、有一点差点忘了,Anchor那里的Side一定要选择TopLeft,地图的原点是从左下角开始的。2、制作材质(material)这是本篇的难点,要用到shader语言,如果没有3d基础的可能理解起来有点费劲,不懂也没关系,按着操作也能做出来。a、创建一个Shader,Assets-&Create-&Shader。b、打开shader,把下面的代码覆盖过去。[csharp]&Shader&"Transparent/Mask"&&{&&&&&Properties&&&&&{&&&&&&&&_MainTex&("Base&(RGB)",&2D)&=&"white"&{}&&&&&&&&_Mask&("Culling&Mask",&2D)&=&"white"&{}&&&&&&&&_Cutoff&("Alpha&cutoff",&Range&(0,1))&=&0.1&&&&&}&&&&&SubShader&&&&&{&&&&&&&&Tags&{"Queue"="Transparent"}&&&&&&&&Lighting&Off&&&&&&&&ZWrite&Off&&&&&&&&Blend&Off&&&&&&&&AlphaTest&GEqual&[_Cutoff]&&&&&&&&Pass&&&&&&&&{&&&&&&&&&&&&&&&&&&&&SetTexture&[_Mask]&{combine&texture}&&&&&&&&&&&SetTexture&[_MainTex]&{combine&texture,&previous}&&&&&&&&}&&&&&}&&}&&你百度遮罩shader的话会有很多,但基本没有解释的,我这里解释一下,第一行是设置你的shader的路径和名称,比如上面的shader就建在了Transparent下,起名Mask,大括号里面有两个部分,第一个部分是属性Properties,第二部分是SubShader。Properties里是设置渲染的属性,比如这里设置了两张图片和一个滑动条,第一张图片用来加载背景图片,就是我们之前做的那个Render Texture,用来显示地图,第二张图片就是遮罩图片,用我们之前的那个白圆,滑动条范围从0到1,初始值0.1,再看一下语法。[csharp]&_MainTex&("Base&(RGB)",&2D)&=&"white"&{}&&_MainTex是属性名,会在SubShader中用到,Base (RGB)是在界面上显示的名称,你会在属性面板上看到,2D是图片维数,white是默认值。SubShader是处理渲染的主体,Tags是标签,Queue标签决定被渲染的次序,而Transparent是四个预定义的渲染队列之一,任何有关alpha混合的对象都应该在这里处理,看这里可以了解的更多:,关闭光照,关闭z缓冲器的写操作,关闭混合,Alpha测试是当Alpha大于等于你之前设定的_Cutoff时有效,也就是说这里当alpha大于等于0.1的图素会被渲染出来,其他的就透明了。Pass通道里处理混合,先设置第一张图片:SetTexture [_Mask] {combine texture},这里是遮罩图片,然后第二张图片和前一张混合:SetTexture [_MainTex] {combine texture, previous},而我们之前关闭了混合,所以第二张图片只是纯粹的显示,但大括号里第二个参数表示alpha,这里previous表示我们用之前那张图片的alpha,而第一张图片的alpha除了白圆部分,其余部分都是0,所以这张图片除了与白圆 重合的地方,其他地方alpha也是0,这样就透明了,只剩下了圆的地方,想了解Pass看这里:,想了解SetTexture看这里:。写了这么多,纯粹手打,觉得好的麻烦支持一下,哈哈。Shader有一定难度,但据说会shader的程序员薪水都在2万以上啊,望眼欲穿啊,所以大家努力学吧。如果上面的没看懂,你又不想学,那就跳过吧,反正把代码粘过去就可以了。c、创建一个material,Assets-&Create-&Material,然后Shader那里找到你建的那个shader,在Transparent下面。d、这时界面上会出现Base(RGB)和Culling Mask,Base(RGB)里把你之前那个Render Texture拖上去,Culling Mask把那个白圆的图片拖上去,如下图:这样你的材质就做完了。坚持到这步的为自己鼓个掌吧,你离成功不远了。3、在界面的右上角用NGUI建地图终于到了最后一步了,剩下的工作就简单多了,回到你的界面布局那里,有关NGUI界面布局不了解的看我前面的文章,在右上角的Anchor下建个Panel,起名MiniMapPanel,然后下面加两个sprite和一个Texture,一个sprite是圆框,一个sprite是小箭头,表示地图上的玩家,Texture用来接收之前的材质显示地图,如下图:Texture那里大小调成512*512的,Material那里把之前做的材质拖上去就ok了,如果显示顺序有问题别忘了调Depth或Z值。现在你应该可以看到东西了,但小箭头位置不对,当然,还没上代码呢。创建一个MiniMap的脚本,我把全部代码贴上来。[csharp]&public&class&MiniMap&:&MonoBehaviour&{&&&&&&&&//&Use&this&for&initialization&&&&&&public&GameObject&&&&&&&public&GameObject&&&&&&&private&GameObject&&&&&&&private&float&miniMapScaleR&&&&&&&&&&&&void&Start&()&{&&&&&&&&&&map.transform.localScale&=&new&Vector3(Screen.height,&Screen.height,&1);&&&&&&&&&&hero&=&GameObject.Find("/Blade_Girl_Prefab");&&&&&&&&&&GameObject&terrain&=&GameObject.Find("Terrain");&&&&&&&&&&Terrain&script&=&terrain.GetComponent&Terrain&();&&&&&&&&&&miniMapScaleRatio&=&(float)map.transform.localScale.x&/&script.terrainData.size.x;&&&&&&}&&&&&&&&&&&&//&Update&is&called&once&per&frame&&&&&&void&Update&()&{&&&&&&&&&&&&&&&&&&&&if&(hero&&&&point&&&&map)&{&&&&&&&&&&&&&&point.transform.rotation&=&Quaternion.Euler(0,&0,&-hero.transform.rotation.eulerAngles.y);&&&&&&&&&&&&&&map.transform.localPosition&=&new&Vector3()&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&x&=&-hero.transform.position.x&*&miniMapScaleRatio,&&&&&&&&&&&&&&&&&&y&=&-hero.transform.position.z&*&miniMapScaleRatio,&&&&&&&&&&&&&&&&&&z&=&0,&&&&&&&&&&&&&&};&&&&&&&&&&}&&&&&&}&&}&&代码不多吧,point是玩家标志小箭头,map是地图面板,就是1里面那个MiniMapRenderPanel,public属性的,自己拖上去吧。hero是我们的主角,miniMapScaleRatio是地图和真实地形尺寸比例,start里的第一句是在干吗呢,虽然我们的地图是512*512的,但经过实测,发现这个尺寸会随着屏幕的高度而有误差,需要设置成屏幕的高度这种尺寸,好吧,我也需要有人帮我解释下,Update里时刻获得主角的转向,主角在世界中是绕y轴旋转的,小标志是绕z轴旋转的,并且方向相反,这里要注意一下。然后按照角色在地形上的位置乘以地图与地形的比例获得小标志在地图上的位置,噢啦,大功告成,打完收工。
TA的最新馆藏
喜欢该文的人也喜欢今天看啥 热点:
[Unity3D]Unity3D游戏开发之让我凌乱的NGUI,unity3dngui
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------& & & &&& & & & 各位朋友,大家好, 我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei。& & & & 在上周五博主结束了这学期的最后一门同时是唯一一门考试,这意味着我的学生涯里再没有考试这件事情了。那天考试的时候,一个人静静地坐在座位上直到交卷的铃声响起。我开始不断地问自己,这四年的光阴可曾虚度?印象中我的大学生活和别人可能没有什么不同,可能唯一的不同的就是我在一个不喜欢的专业里停留了四年,一边坚决地反抗着现实,一边努力地追寻着梦想。我不知道如果再给我四年,我是不是还会这样选择?因为四年后的我可能还是四年前那个懵懂、执着的少年,亦可能变成 一个完全不认识的自己。成长真是一件残酷的事情,小时候幸福是件简单的事情;长大后,简单是件幸福的事情。那天下午,独自到图书馆将借来的书籍归还,我跟图书馆老师说以后可能再不会来借书了,老师问道要毕业了吗?我说今天刚考完最后一门试。那一刻我突然感到无尽的伤感,我真的毕业了。感谢图书馆从始至终的陪伴,再见!& & & & 好了,下面我们正式开始今天的内容吧,这可能是博主在大学期间写得最后一篇博客了。不过不管怎么样,在今后的日子里,我依然会坚持写博客的,因为博客不仅仅是对于过去的一种见证,更是博主生活的一部分。这几天博主一直在挤时间研究NGUI,不过博主被NGUI虐得体无完肤啊。为什么这么说呢?因为博主感觉NGUI里的东西实在是太多了,很多东西都需要我们去研究,如果我们不去研究NGUI提供的那些工具类,可能一个简单的功能都需要我们自己花费大量的精力去实现;可是当我们花费大量的精力去研究这些工具类的时候,却发现我们已经被淹没在大量的代码海洋里。博主这几天研究NGUI的一个体会就是大部分的失败并不是代码上的失败,而是NGUI中某些参数的设置出现了问题,这让博主觉得无比郁闷啊。好吧,最近研究NGUI的内容有点混乱,就在这篇文章里和它做个了断吧,希望能对大家学习NGUI有所帮助吧!& & & & && & 一、UIGrid& & UIGrid是NGUI为我们提供的一个类似于HTML语言中表格的组件,通过这一组件我们可以快速地实现一个网格式的布局。我们首先来看看这个组件:这个组件在这里可以定义下列参数:Arrangement——表格的显示方向CellWidth——表格单元宽度CellHeigh——表格单元高度MaxPerLine——每行显示像素Sorting——排序方式Animate Smoothly——使用平滑动画过度效果Keep Within Panel——保持在一个面板里显示在设置完以上参数后,我们只要将希望在UIGrid中显示的元素挂载到UIGrid所在的Transform节点下并配合UIPanel的Clip功能就可以实现元素的网格式布局,如图中所示的物品栏效果。那么,什么是UIPanel的Clip功能呢?下面我们再来介绍NGUI中更为重要的一个组件UIPanel。& & & 二、UIPanel& & & UIPanel是NGUI负责实际渲染的集合图形的一个组件,是一个核心的组件。为什么这么说呢?因为你不需要手动的添加UIPanel,一旦你创建一个控件,它会自动被添加。如果你想将你的UI渲染拆分到不同的Draw Call中,你可以手动创建你自己的UIPanel。博主这里想说的就是NGUI的开发者们是群很有追求的人,NGUI版本更新的速度很快,据说最新版本已经更新到了3.8。博主这里使用的版本是3.0,博主对比了下网上的相关教程所使用的NGUI版本,感觉就一个字:乱,所以很多时候都得自己摸索着揣摩版本更新引起的那些变化。所以,如果想学好编程的话,最好把英语学好,这样学起来就不会这么困惑了。博主最近在看着一个NGUI的例子学习,就发现教程的版本和博主的版本不一样,结果被NGUI虐了好几天了,唉......。这里我们需要注意的就是:Clipping——裁切功能,可以通过这个选项来设置裁切区域的中心和大小,其单位是像素。如果不设置裁切,则默认按照屏幕大小进行裁切。换句话说,它可以决定我们的显示范围。DrawCall——告诉你这个Panel会消耗多少个Draw Call。这个数值越低,效率越高。DebugInfo—— 选择显示哪种类型的调试信息&。&& & &三、UIScrollView& & &UIScrollView是博主最想吐槽的一个组件,这个组件顾名思义就是一个实现滚动视图的组件。我们来看看这个组件有哪些重要属性: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来控制或者显示进度当我们需要实现一个滚动视图时,只需要将ScrollView组件添加到UIPanel上然后包裹一个UIGrid即可。这似乎特别地简单啊,可是在博主使用的NGUI3.0 里,你是找不到这个组件的,因为它将会被换成UIDraggablePanel和UIDrag Panel Contents这两个组件,UIDraggablePanel挂载在UIGrid所在的节点上,UIDrag Panel Contents挂载在列表中的项目元素上,就是在这里博主花了三天的时间,最后发现是因为节点挂载错了,整整三天啊,学习NGUI感觉好凌乱有木有啊。& & & && & &四、TextList& & &TextList是一个在NGUI中实现聊天界面的一个组件。在不知道有这么一个组件之前,博主一直尝试使用ScrollView来实现聊天假面,后来博主发现这简直就是作死的节奏,这一点博主在下面的内容中会提到。我们一起来看看TextList组件:Style——TextList组件的风格,Chat和TextMaxWidth——文本的最大宽度MaxHeight——文本的最大高度SupportScrollWhell——是否允许鼠标滚动这个组件在使用的时候只要挂载到一个含有Label的节点上就可以了,然后只需要使用该组件的Add方法就可以实现内容的添加。如图是博主制作的一个简单的聊天界面:& & & &五、NGUI动态生成& & & 最后我们来说说NGUI动态生成的问题,因为在实际的应用场景中我们面对的数据是动态变化的,因此我们需要根据数据量来动态地生成界面,例如列表里变化不定的数据项。我们知道在Unity里生成一个物体只需要调用Instantiate方法就可以了。可是不幸的是,这种方法在NGUI却显得格外尴尬。举一个例子啊,在之前讲过的UIGrid组件中,我们只要把物体放入它的节点下就可以实现网格式或者列表式布局,那么这个时候就存在一个动态生成的问题。动态的生成的物体是独立于其它物体存在的,尽管我们可以在代码中通过设置parent设置其父控件,可是不知道为什么,博主在这样做的时候一直不能将生成的物体挂载到UIGrid节点下。所以很郁闷啊。再来说说NGUITools,这个工具类中提供了addChild的方法,可是这样的一个方法完全依赖于使用者手动地去创建一个具体的物体,因为它只是在创建一个子节点,这个节点上具体是什么,需要使用者手动地去创建,无疑这样的工作量是很大的。唉,每次使用NGUI都有种无可奈何的感觉啊,期待官方继续完善UGUI啊,实在是郁闷啊......。好了,今天的内容就是这样了,明天就要去实习了,估计没时间再研究NGUI了,给大家分享一个NGUI的装备物品栏界面的实现吧!从这里下载(当然不是我写的,哈哈),博主觉得效果还蛮不错的呢。好了,今天的内容就是这样了,平平淡淡,如同我的大学,再见!每日箴言:别人对你说的话,做的事,从来不能决定你是什么样的人;你对别人说的话,做的事,才能决定你是什么样的人。&-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei。转载请注明出处,本文作者:秦元培, 本文出处:http://blog.csdn.net/qinyuanpei/article/details/----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关搜索:
相关阅读:
相关频道:
Android教程最近更新

我要回帖

更多关于 unityngui固定位置 的文章

 

随机推荐