Unity NGUI 描点控件的位移动画

       要让一个描点的控件动画移动到一个Position,可以用 TweenPosition,但是这个只能用在Position是固定的情况下,而且不能根据分辨率适配来进行移动。以NGUI自带的示例场景" Example 1 - Anchors"为例,假设要让"Left"移动到"Top Right",且不管任意分辨率都需要达到这个效果。这里的方法是修改 TweenPosition代码,让其支持传入目标的Transform,而这个目标即是也被描点的控件。

打开 TweenPosition.cs,添加如下代码:
1
2
3
4
5
6
7
public Transform sourceFrom;
public Transform targetTo;

static  public TweenPosition Begin(GameObject go,  float duration, Transform targetTo)
{
     return Begin(go, duration, go.transform.parent.InverseTransformPoint(targetTo.position));
}
修改 OnUpdate函数为如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected  override  void OnUpdate ( float factor,  bool isFinished) 
{
     if (sourceFrom !=  null)
    {
        from = cachedTransform.parent.InverseTransformPoint(sourceFrom.position);
        sourceFrom =  null;
    }
     if (targetTo !=  null)
    {
        to = cachedTransform.parent.InverseTransformPoint(targetTo.position);
        targetTo =  null;
    }
    value = from * (1f - factor) + to * factor; 
}
打开 TweenPositionEditor.cs ,修改 OnInspectorGUI 函数为如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class TweenPositionEditor : UITweenerEditor
{
    public override void OnInspectorGUI ()
    {
        GUILayout.Space(6f);
        NGUIEditorTools.SetLabelWidth(120f);

        TweenPosition tw = target as TweenPosition;
        GUI.changed = false;

        Vector3 from = EditorGUILayout.Vector3Field("From", tw.from);
         Transform sourceFrom = EditorGUILayout.ObjectField("Or From", tw.sourceFrom, typeof(Transform), true) as Transform;
        Vector3 to = EditorGUILayout.Vector3Field("To", tw.to);
         Transform targetTo = EditorGUILayout.ObjectField("Or To", tw.targetTo, typeof(Transform), true) as Transform;

        if (GUI.changed)
        {
            NGUIEditorTools.RegisterUndo("Tween Change", tw);
            tw.from = from;
            tw.to = to;
             tw.sourceFrom = sourceFrom;
            tw.targetTo = targetTo;

            NGUITools.SetDirty(tw);
        }

        DrawCommonProperties();
    }
}
现在在检视器可以看到如下配置:

设置其" Or From"和" Or To",然后运行,即可看到位移动画,如下所示:

平时可以使用 UIPlayTween来控制控件的动画播放,但是其仅支持点击、选中等等需要交互的动作才行,这里为其加入开启时就可以自动播放动画。打开 AnimationOrTween.cs,为枚举 Trigger增加一个枚举值,如下:
1
2
3
4
5
6
public enum Trigger
{
    OnClick,
    ……
     OnEnableTrue,
}
打开 UIPlayTween.cs,在其 OnEnable函数最后,添加如下代码:
1
2
3
4
5
6
7
8
9
void OnEnable ()
{
    ……
    
     if (trigger == Trigger.OnEnableTrue)
    {
        Play(true);
    }

}
这样 UIPlayTween就能在开启时,直接播放动画了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值