美文网首页
UGUI一些散乱的笔记

UGUI一些散乱的笔记

作者: 英仙之盾 | 来源:发表于2020-02-09 23:55 被阅读0次

    如果希望text在缩放之后依然清晰,可以试试先把文字大小设置为60,再把text的rect transform的scale设为0.5,之后用T调整文本框大小即可。

    Rect Transform的缩放,最好使用scale而不是t的手动调整缩放,因为t只改变posx和posy,不会改变scale。

    想在GUI上使用shader的话,可以通过image的material接口来使用。

    需要让带shader的ui使用2d sprite editor的自适应功能?那就把source image和material一起使用,source image可以提供自适应功能的数据,material可以提供shader的数据。

    如果t的缩放让自适应image出现了问题,那就用recto transform的缩放。

    如果自适应的图片出现了显示问题,可以reset之后添加source image,再点击set native size,就可以恢复正常了。

    锚点是基于父级元素的,而不是基于canvas或panel的。

    锚点设置的外围,蓝色的双向剪头表示受屏幕如何改变影响,红色双向剪头表示锚点,也就是该元素与红边的距离是恒定不变的。

    Canvas Scaler可以在改变窗体大小的同时缩放画布中元素的大小。把UI SCALE MODE切换到scale with screen size即可。当切换mode时,会发现ui元素有一定程度的缩小/放大,这时候只需要把它们手动t调整一下大小即可。match表示缩放以屏幕的宽/高为标准,根据所需缩放表现来调整。

    有时候一些default图片的warp mode是repeat,这会导致它在被使用时默认在上下左右重复自身,会留出一些异常的像素,这时只要把它切换成clamp就好。

    想要指定按钮的效果具体要在哪一张图片上出现,可以在button component里修改target graphic

    给text字体添加特殊效果,直接addcomponent:shadow组件可以添加阴影效果,outlone组件可以给字体一个外描边效果

    UI中如技能冷却之类的计时器效果最好用协程来做,节省一部分性能。

    Image只能用sprite,rawimage可以使用default。但rawimage只是把图像糊上去就完事了,不会做任何的自适应调整。

    如果有多个用按键操控的相同UI元素,最好把控制它们的脚本应该写成类接口脚本,之后便可在editor界面一个个地绑定对应按键。这样做可以在后期把绑定按键的权限交给玩家,让他们使用习惯键位进行游玩。

    关于Overlay的canvas使用shader黑屏的问题

    在camera和world space模式下,使用shader的UI是可以正常显示的。但在overlay下,shader会直接黑掉,这是因为overlay中没有光照的算法,不论是unlit还是pbr,光照相关的地方都会一团黑(在社区找到的答案),目前我不知道如何解决。但是使用sprite和image是可以在overlay模式下正常工作的,只是shader不能工作罢了。

    Toggle

    toggle是UGUI封装的一块可以通过点击切换到指定图片的UI元素,它的切换方式类似于bool,可以在切换元素时产生fade效果。切换的目标需要赋值在graphic字段里。一般用来做一张图的开关效果和切换点亮效果。

    想给多个toggle做切换功能,可以用toggle group组件。把所有toggle放在同一个父级下,添加toggle group,再给每个toggle的group上赋值上这个父级,就可以保证同一时间只有一个toggle处于切换状态了。

    制作背包切换页,可以用panel来做不同的页,利用toggle的OnValueChanged(boolean)事件来开关不同的页。同时,这个返回bool值的事件也可以制作一些按钮按下时返回bool值的功能。

    不止是背包,设置页面各页面的切换也可以使用这个思路。

    一般来说,可以交互的UGUI组件底部都拥有事件发布的功能。

    Grid layout group可以让子物体用规定好的网格排布,就算是新加入的子物体也会受它影响。constraint属性表示让子物体按照最大的列/行和默认进行排布。

    受grid layout group影响的子物体无法通过t来改变尺寸,只能在grid layout group组件里通过调整cell size来改变大小。

    顺带一提,grid layout group只能影响到第一级子物体,孙物体(子级的子级)是不会受其缩放cell size影响的。

    划动

    给一张image添加scroll rect组件之后,该图片所占据的区域会变成一个可操控划动的区域。为划动的对象content赋值之后,即可在该划动区域内划动这个content对象。(该操作不需要把划动对象设为划动区域的子级,但必须要把拖动区域的层级设置低于划动对象的层级,不然只能在空白拖动区域才能拖动)

    不过,如果希望把这个可划动区域之外的区域作为遮罩来遮挡被划动对象,那划动对象就必须要成为可划动区域的子级,这样mask组件才会生效。同时由于划动对象在子级上,处于较低层级,它会永远处于遮罩图层的上方,类似ps的图层关系。

    Mask的遮罩图片是可以隐藏的。把show mask graphic消勾即可。

    Horizontal:在水平方向上划动

    Vertical:在垂直方向划动

    Movement type:

    Elastic塑性划动,超出划动边界会自动回弹,划动操作会自动复位。

    Unrestricted,有惯性,非线性,划动不会自动复位。

    Clamped,无弹性和惯性的线性划动。

    想要获取拖动对象当前的位置,可以借助unityengine.eventsystem里的IBeginDragHandler和IEndDragHandler,使用OnBeginDrag和OnEndDrag两个事件,如果在end事件里,那么Scroll.NormalizedPosition就是当前该ui滚动到相对它物体空间的二维坐标。顺带,scroll是一个ScrollRect类型的字段,并且scroll.horizontalNormalizedPosition是该位置在水平方向上归一化的浮点值。

    拖动跳页功能的思路:先用上述方法获得每一页页尾的坐标点,存在一个浮点型数组里。判断当前位置与数组中各点的关系,离谁近就跳到谁的地方去。

    跳页完成之后记得smoothdamp或者lerp一下,让它归位过渡更顺滑。并且归位的逻辑要在拖动时候才启用,不然不拖动的时候也会启用,就会卡住拖动条。

    注意,UGUI元素事件是区分动态和静态的,需要动态改变的值就必须要用动态事件函数来承接。而静态的部分,一般是用在赋值操作的。

    阵列

    Grid layout group是horizontal layout group和vertical layout group的结合体。

    Input Field

    它是一个可以为玩家提供输入字符功能的模块。

    Place Holder可以显示一串灰色的字符,用以提示玩家可以在此输入什么样的字符。在Input field组件里,是可以指定place holder的。

    和大部分元件一样,input field的图片元件也是image,可以使用sprite、material。

    Content Type可以指定常用的输入类型,如密码****,邮箱@xx.com等等。这个特性让input field有自己找非法输入的能力,不用写trycatch。

    Scroll Bar

    与slider相似,但它是一个滑块。

    Scroll View

    带horizontal和vertical滑块的一个窗体。

    DropDown

    一个可以切换选择的下拉菜单,相当于enum在编辑器窗口的表现效果。

    一些组件的使用

    Canvas group可以控制整个canvas的透明度以及让拥有它的物体是否能阻挡鼠标射线(blocks raycasts),可以用这个功能来做一些界面里的遮罩。

    Layout Element可以让拥有它的物体忽视掉父级中的layout group效果,适合用来做技能的遮罩。

    相关文章

      网友评论

          本文标题:UGUI一些散乱的笔记

          本文链接:https://www.haomeiwen.com/subject/wlyoxhtx.html