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就能在开启时,直接播放动画了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值