昨天老大给我讲了一下代码的规范,比如类名首字母都要大写,私有变量前面加一个下划线,各类的文件也要放到相应的文件夹下面,这样一是方便自己查看,以后也好修改,二是方便项目里其他人员查看。如果像之前自己写的代码,过一个星期再看估计都不知道是什么意思了。
昨天又学习了几个UGUI的控件:Scroll Bar和Scroll View。
主要是想用来实现滑动对象的效果。
面板切换的效果就是通过给图片上添加Button Script,添加监听事件,当点击的时候把其他面板SetActive(false)来实现。
因为图片比较多,所以想通过一个队列对图片和相对应的面板进行存储,然后遍历队列,对每个图片添加监听器,代码:
foreach(Transform child in _panelHero.transform)
{
if(child.name.StartsWith("Skill"))
{
_skillBtn.Add(child.gameObject.GetComponment<Button>())
}
}
foreach(Transform child in _panelShow1.transform)
{
if(child.name.StartsWith("Panel"))
{
_skillsPanel.Add(child.gameObject)
}
}
for(int i = 0; i < _skillBtn.Count; i++)
{
_skillsBtn[i].onClick.AddListener(() => SkillShow(_skillsPanel[i]));
}
_skillBtn是存放图片按钮的队列,_skillsPanel是存放相对应面板的队列。这么写之后结果在添加监听器这条语句中,程序就报错了,_skillBtn.Count的值为7,可是我试着在SkillShow ()中打印i的值,每次点击都是7。纠结了很久之后,发现在添加监听器之前加了一条 GameObject go = _skillsPanel[i],再把go传进函数里就可以成功运行了。分析了一下,原因应该是i的值一直递增而没有保存下来,等鼠标点击的时候直接把最后一个值传了进去,而加了一个临时变量就会把每个对象生成添加到相应的监听器中,这样才实现效果。看来以后这种小地方也要非常的注意,不然也会使程序不能运行。