用代码改变slider.value的值时,ui的属性值是变化的,但是场景中的UI展示没变化,是不是需要重新渲染一下,还是我用错了方法,请大神指点。
我也碰见了这个问题,你只需要在OnValueChange上拖放上一个方法,方法只需要有这一句代码就好了:Slider.value += 0f; 这样就解决了
我这有一个网址你可以参考一下
https://www.cnblogs.com/sunxun/p/5517760.html
1.把有那个方法的脚本拖到场景的某个物体(GameObect)上。
2.在slider的OnValueChange下面,点击“+",
3.把那个对象拖到事件槽。
4.指定方法为你的那个方法。
slider数值的范围不对吧,默认是0~1变化的,你如果用的是0~100范围超限显示就会出问题。可以在面板上把Slider组件下的value最大值调一下,也可以代码获得Slider修改其maxvalue
来了来了,我研究明白了.上面我回答错了删不掉(也是一番挣扎..)
原因很简单,调试过程中我发现程序初始化的时候因为一些原因导致传递的value有NaN的情况出现,继而导致slider这个组件在后面所有的运行周期都处于故障状态.
所以我们只需要对slider.value的赋值进行过滤就可以了.可以参考下面这样的写法:
float val = Mathf.Clamp(你的值, 0.0f, 1.0f); //做个范围限制
slider.value=float.isNaN(val)? 0f : val; //NaN判断(NaN意思是Not a number)
经过这样一番过滤,bug成功修复.真是d疼.
由于需要,不得不研究下Unity中Slider的用法
Unity线上手册中有的Slider中的各项基本说明我就不在说了,添加一个Slider后,我们可以看到Slider作为一个父物体有两层5个子物体
这五个都是做什么的呢,具体看一下
1.BackGround,实际上是一个GameObject,
携带Canvas Renderer--按文档,这是一个其他渲染器都渲染完毕之后最后使用的渲染器,可以在脚本中调用其含有的参数和方法
另外就是一个Image图片,实际就是一个指定范围和大小的图片,拖动一下,我们可以看出就是Slider的横条
2,Fill Area,一个空的Rect Transform父物体,下面一个有Canvas Renderer和Image的父物体,主要也是一个区域和图片 默认Slider是个小圆
3.Handler Slider Area,类似Fill Area,默认Slider是个大圆,可以移动位置看
其中fillArea是我们如果换个图片可以看出其将图片拉长了,这就应该是所谓的填充(Texture的图片制作自己学下简单的图片教程,不会的像我这样简单学下也很容易,我这里是把图片的背景做成透明的一个炸弹的png格式的图片就可以用了)
如果把Handle删除,会发现进度条永远走不到最大,这是由于Fill Area中的Fill的大小比背景图上的条小,最后一段到达不了,而Handle存在时是一个大圆可以覆盖到最远端
不管那个
我们不改变Fill的图片,而改变Handle的图片,则出现我们想要的效果
然后看一下,这样,我们想让进度条走过的和没走的表示,这里简单点就是颜色不同,因此改变Fill中Image组件的颜色选项。
总结,Slider在此版本的默认就是几个物体的组合,如在Slider属性中填的那样,而各部分也是区域和图片的组合。
背景为原始条的样式
Fill为填充的纹理样式
Handle为随Value值移动纹理样式