要让一个描点的控件动画移动到一个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();

    }

}
如今在检视器能够看到例如以下配置:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWtvZjEzMTQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

Unity NGUI 描点控件的位移动画的更多相关文章

  1. uwp - 控件精确移动动画

    原文:uwp - 控件精确移动动画 先看效果图: 一共有8个GRID,黄色的负责移动,其他7个负责定位.新建一个页面page,替换默认代码: <UserControl.Resources> ...

  2. Unity 通过Animation实现控件位置的转换

    Unity版本:4.5.1 NGUI版本:3.6.5 参考链接:http://blog.csdn.net/unity3d_xyz/article/details/23035521,作者:CSDN in ...

  3. NGUI的部分控件无法更改layer?

    http://momowing.diandian.com/post/2012-09-17/40038835795 今天狗日的遇到这样的问题,这是一个imagebutton:,它的层定义为:,NGUI里 ...

  4. Unity中uGUI的控件事件穿透逻辑

    1.正常来说Image和Text是会拦截点击事件的,假设加入EventTrigger的话,就能够响应相应的交互事件. 2.假设Image和Text是一个Button的子控件.那么尽管其会显示在Butt ...

  5. TimePicker控件、帧动画、补间动画

    1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进行事件的绑定哈.不过在Silverlig ...

  6. 自己定义控件三部曲之动画篇(七)——ObjectAnimator基本使用

    前言: 假如生活欺骗了你, 不要悲伤,不要心急! 忧郁的日子里须要镇静: 相信吧,快乐的日子终将会来临! 心儿永远向往着未来: 如今却常是忧郁. 一切都是瞬息,一切都将会过去: 而那过去了的,就会成为 ...

  7. 自己定义控件三部曲之动画篇(十三)——实现ListView Item进入动画

    前言:宝剑锋从磨砺出,梅花香自苦寒来 相关文章: <Android自己定义控件三部曲文章索引>: http://blog.csdn.net/harvic880925/article/det ...

  8. NGUI 动态添加控件

    本文链接地址: Unity3D NGUI动态创建按钮 本例仅以熟悉NGUI组件功能为目的,想快捷简便的创建按钮或其它游戏物体请参考 “Unity3D 动态实例化Prefab” 以动态创建服务器列表为例 ...

  9. [UNITY 5.4 UGUI] 控件重叠触摸穿透

    问题. imge 和 button重叠时,imge 覆盖在button上面,导致点击事件无法传递到button. 1.给imge 添加 [Canvas Group]组件 2.修改[Canvas Gro ...

随机推荐

  1. .NET面试题系列

    索引: .NET框架基础知识[1] - http://www.cnblogs.com/haoyifei/p/5643689.html .NET框架基础知识[2] - http://www.cnblog ...

  2. 遍历 集合 Dictionary 的时候修改集合 方法

    Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("1" ...

  3. bzoj 4006 [JLOI2015]管道连接(斯坦纳树+状压DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的 ...

  4. ubuntu 14.04 允许root 登录

    在/etc/lightdm/lightdm.conf里添加一下两句: greeter-show-manual-login=true allow-guest=false

  5. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》

    7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...

  6. IIS中使用PUT方法錯誤記錄

    在IIS7.5中使用PUT,DELETE方法時會遇到404,405錯誤,特記錄解決辦法:404: 405: 在web.config的system.webServer節點中加入 <modules ...

  7. Java设计模式系列之中介者模式

    中介者模式(Mediator)的定义 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式(Mediator)的适 ...

  8. (转)在iOS中使用icon font

    http://ued.taobao.org/blog/?p=8579 在开发阿里数据iOS版客户端的时候,由于项目进度很紧,项目里的所有图标都是用最平常的背景图片方案来实现.而为了要兼容普通屏与Ret ...

  9. Mac下的截屏功能

    全屏截图 对全屏的截图我们可以通过按 苹果键(花键)+Shift键+3来执行,之后伴随着清脆的一声提示音后,在桌面上就会生成一个图片文件,这就是刚刚截屏的图片了,默认文件类型是PNG的. 自定义截图 ...

  10. MVC架构和SSH框架对应关系

    MVC三层架构:模型层(model),控制层(controller)和视图层(view).模型层,用Hibernate框架让来JavaBean在数据库生成表及关联,通过对JavaBean的操作来对数据 ...