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就木有问题了。
2016年7月18日补充:
对于刚初始化或显示出来的UI对象不管是子节点中,不管是NGUI的
UIScrollView子节点刷新,还是UGUI中的ScrollRect节点下的刷新也好,刚刚初始化万组件立即去做别的事情常常容易出现异常,除了上面的解决办法外,还可以尝试做一些延迟,比如在下一帧。或当前帧刷新的结尾,即可以用到协程啦!
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;
public class DelayDealDemo : MonoBehaviour
{
// Use this for initialization
void Start()
{
//先初始化资源
//延迟刷新
StartCoroutine(DelayDeal());
}
private IEnumerator DelayDeal()
{
yield return new WaitForEndOfFrame();
//TODO延迟后操作
}
}
(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)
{
//干什么干什么
}