目录
前言:实习的时候遇到一个问题,就是我需要在页面刚加载的时候,滑动条处于最开始的位置,也就是value=0,但是奇怪的事情发生了,UGUI的值始终都不能变成0,就像这篇文章里的问题一样:【Unity】UGUI:为什么Scrollbar无法把初值设置为0,查了半天没有解决。
Scrollbar
我在自己的赋值为0的地方打上断点调试,发现value值一开始的确变成0,后面自动变成了1,百思不得其解,就去请教了前辈同事。
viewmodel.ScrollbarScrollbar.value = 0;
事实证明,你前辈就是你前辈,他找到了源码,找到了自动变成1的原因,那个滑动条没有加载完成之前有一个地方判断的,巴拉巴拉我忘记了,等会找一下源码看看。
下面是解决办法。
ScrollRect
在我的代码里面初始化成这样就好了:
viewmodel.ModeContentScrollRect.normalizedPosition = Vector2.zero;
下面是官网资料的例子:
using UnityEngine;
using System.Collections;
using UnityEngine.UI; // required when Using UI elements.
public class ExampleClass : MonoBehavIoUr
{
public ScrollRect myScrollRect;
public Vector2 myPosition = new Vector2(0.5f, 0.5f);
public void Start()
{
//Change the current scroll position.
myScrollRect.normalizedPosition = myPosition;
}
}
源码
找到ScrollbarEditor.cs,对上了就可以假装自己看懂了
看到导入的包UnityEngine.UI,应该是Scrollbar.cs这个文件,这里是涉及value返回值和numberOfSteps的关系,numberOfSteps为0或者1的时候是原值,其他的会经过计算。
我的unity里面就是水平的滑动轴
参考
这个是官方文档
https://docs.unity3d.com/2018.1/Documentation/ScriptReference/UI.ScrollRect-normalizedPosition.html
这个大佬的知乎文章很值得看看,有 一系列关于UGUI源码的解读
https://zhuanlan.zhihu.com/p/340598873
https://zhuanlan.zhihu.com/p/340598576
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。