NGUI动画、刷新相关注意小结

1.Tween系列组件,播放方式style为once,但是如果在代码中多次调用的,会出现不播放的情况。
解决:每次调用PlayForword()之前要加一行:tweenScale.ResetBeginning();
 
2.Animation动画制作一个按圆圈轨迹移动的动画:
默认显示DopeSheet窗口,修改节点的属性,选择Curves可以看动画曲线,我是编辑完才发现,有规律的动画,这个曲线也是有一定规律的。直接用曲线编辑可能更加方便。修改Position属性,.x曲线是余弦曲线,Y是正旋弦曲线。Z轴保持0值不变,当然如果绕空间旋转,可能Z也要跟着改变。
编辑的结果示意图为余弦曲线,画的太丑了:

3. 不确定是Unity还是NGUI的关系。总会遇到ScrollView下的子界面排序(重新定位)。
    (1)在刚打开界面(Set.Active(true))就立即排序很容易出现无效的情况。这个是Unity的一个刷新问题,说多了都都是泪。如果出现了这样的情况,最好active=true之后短暂延时(如0.01s)。这样就不容易出现子节点指定位置不生效的情况了。
NGUI中实现一个子节点排序列表的ScrollView的几种方法,如图中结构:
 

    (2)此外,如果出现频繁执行UIScrollView.Resetpotiion()发现各种显示异常,对!仅仅是显示异常,对象坐标参数什么的全都OK的情况下,只要后面多加两行:
UIScrollView.SetActive(false);
UIScrollView.SetActive(true);
连着先隐藏后立即显示 UIScrollView就木有问题了。

    (3).利用UIGrid.sort=true,子节点依次按字典序命名达到自动排序的效果。注意:这种方法不提倡!非常不稳定!如一堆节点按1,2,3,4...命名。很容易出现最终乱序的结果;
    (4).直接改变子节点的localPosition。需要注意:这时各个子节点必须同名,且grid.sorted=false.最好不要调用grid.Respositin(),scrollView.ResetPosition()这种低效又不稳定的函数,子节点一多,很容易就测出来这些函数比直接修改localPosition慢啊!

    (5).想要使UIGrid达到预定的排序效果,item数字前补充"0",001,002,003...这样下来


5.获得所有直接的孩子节点,通过两个函数,transform.childCount和transform.GetChild(i)来实现 :下面的接口可以获得father对象的所有直接孩子节点:
public List<Transfrom> GetChilds(Transform father)
{
    List<Transfrom> childList = new List<Transform>();
    for(int index=0;index <father.childCount;index++)
    {
        Transform child = father.GetChild(index);
        //把child保存起来可以获得孩子数组
        childList.Add(child);
    } 
    return childList;
}
而在此前,我们一直默认获取所有直接孩子节点的方式是什么?通过默认foreach来遍历,不得不说用的频繁了很郁闷。知道了GetChilds方法还是尽量少用foreach吧。
foreach(Transform child in Transform father)
{
      //干什么干什么
}





你可能感兴趣的:(NGUI动画、刷新相关注意小结)