关闭

Unity NGUI 描点控件的位移动画

标签: unityngui动画
4339人阅读 评论(0) 收藏 举报
分类:
       要让一个描点的控件动画移动到一个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就能在开启时,直接播放动画了。

1
0
查看评论

【Unity3D游戏开发】NGUI之不相对于Anchor的位移动画TweenPosition (下) (三)

Unity中的UI我们采用的是NGUI,NGUI的界面位移动画,我们一般使用的是TweenPosition。 一种是只考虑相对位移的这种,不考虑分辨率问题,已经在文中介绍了: 【Unity NGUI游戏开发之二】TweenPosition位移动画(一):不相对于Anchor的位移动画 另外一种...
  • teng_ontheway
  • teng_ontheway
  • 2015-07-27 10:37
  • 2950

NGUI所见即所得之UIWidget , UIGeometry & UIDrawCall

UIWidget是所有UI组件的抽象基类,作为基类当然定义了必须的成员变量和函数,接触过MFC或其他UI组件开发,想必都知道有一堆参数设置,尤其是Visual Studio的可视化界面,简直太丰富了,UIWidget要当UI组件的爹就必须得具备这些,下面就一一介绍:   Pivot ...
  • huangyushi
  • huangyushi
  • 2014-03-06 10:41
  • 3133

【小松教你手游开发】【unity实用技能】NGUI字体描边

http://gad.qq.com/article/detail/7172155 NGUI的UILabel中实现字体的描边是通过以方形的方式对字体网格顶点偏移一定位置后作为其描边网格。以这种方式描边在边角处会生硬,描边不均匀问题,特别是在比较大的字体描边时偏移越大这种生硬,不均...
  • chrisfxs
  • chrisfxs
  • 2016-11-19 17:15
  • 1238

关于NGUI的UILabel描边不理想的解决方案

原文地址我也不知道哪个是真的~反正我是转的! 项目中遇到了一些问题发现NGUI不一定能全部解决所有的问题,那么我就提供一些我们的解决方案。 正常的NGUI中的UILabel的描边实现方法是自己又生成了4个相同的字体分别放在原本字体的左上右上左下右下四个方向上来实现描边效果,这点我们可以通过调节E...
  • asd237241291
  • asd237241291
  • 2016-08-20 14:22
  • 1145

Unity 字体描边

private void MakeStroke(Rect position,string txtString,Color txtColor,Color outlineColor,int outlineWidth )  {      positio...
  • ldghd
  • ldghd
  • 2012-07-30 16:45
  • 1953

NGUI之UILabel描边效果

项目中遇到了一些问题发现NGUI不一定能全部解决所有的问题,那么我就提供一些我们的解决方案。 正常的NGUI中的UILabel的描边实现方法是自己又生成了4个相同的字体分别放在原本字体的左上右上左下右下四个方向上来实现描边效果,这点我们可以通过调节Effect中的Outline的XY来看到他的实现...
  • e295166319
  • e295166319
  • 2016-12-06 13:24
  • 643

unity开发之原创开关小部件

一直在使用ngui做ui,不过发现尽然没有一个开关组件
  • xiayang1023
  • xiayang1023
  • 2014-04-23 10:32
  • 1670

动态添加NGUI对齐方式方法

大家好,我是小唐,今天做NGUI对齐的时候突然发现,如果我的这个NGUI对象(比如说button,lable等)是动态或者Resource加载出来的话,NGUI对象对齐的一些关联会丢失。这样的话只能动态的去关联这个对齐的方式。 看了半天这个Widget这个脚本,然后才知道怎么去动态的去弄,...
  • tang_shiyong
  • tang_shiyong
  • 2015-04-15 16:26
  • 885

unity3d NGUI 基础控件及添加监听事件

接下来我们讲解下UILabel,UILabel是用来显示文本的脚本,继承自UIWidget。我们创建一个label,属性如下图: 所有的label都需要Font才可正常工作。这个字体可以使Dynamic的(引用Unity Font),也可以是Bitmap字体——嵌入到Atlas里面...
  • u014635337
  • u014635337
  • 2014-06-10 19:30
  • 2944

【Unity&Shader】高光资料总结&2D描边特效资料总结

Unity光晕剑效果的Shader简单实现 【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态 [Unity3D][NGUI]选中某个图标后高亮 高亮效果,使用Shader可以轻松实现 【Unity ImageEffect】一个用于角色外边缘发光的效...
  • BuladeMian
  • BuladeMian
  • 2016-12-22 17:14
  • 1276
    个人资料
    • 访问:3554633次
    • 积分:36070
    • 等级:
    • 排名:第137名
    • 原创:402篇
    • 转载:88篇
    • 译文:5篇
    • 评论:3425条
    个人说明
    联系方式:
    文章存档
    最新评论