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

时间: 2024-11-05 18:29:09

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

【Unity NGUI游戏开发之三】TweenPosition位移动画(二):相对于UIAnchor不同分辨率下的完美适配位移动画

Unity中的UI我们采用的是NGUI,NGUI的界面位移动画,我们一般使用的是TweenPosition. 一种是简单的相对位移,不考虑分辨率适配问题,只需要简单的从位置A到位置B,已经在文中介绍了: [Unity NGUI游戏开发之二]TweenPosition位移动画(一):不相对于Anchor的位移动画 另外一种是考虑到屏幕分辨率适配的位移动画,我们游戏中大多遇到的是这种情况. eg.我们想让一个UI从屏幕外沿着屏幕的左边移动到屏幕的中央,TweenPositon播放动画,在960*64

猎豹MFC--图片控件CStatic和动画控件CAnimateCtrl

建立MFC对话框: 修改Picture Control 控件控件属性的ID和Type为Bitmap 然后添加BitMap资源: 把已准备好的bmp图片资源复制 到res文件夹: 导入位图资源: 设置 type 为Bitmap   Image为位图ID:添加后如下图: 添加一按钮.双击该按钮,在按钮处理程序中添加  位图处理程序: 用位图句柄接收: 给图片框添加变量: 改为一个点.是当前级的文件夹.两个点事上一级的: 点一下按钮,图片便放生 变换: 做的更灵活一点,用打开文件对话框 效果如下: 想

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

1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进行事件的绑定哈.不过在Silverlight中,如果用MVVM设计模式的话,也可以自己为控件写Command命令的,可以取代控件的事件. TimePicker控件,也就是事件控件,可以用设置时间的.在页面拖入控件后,默认是显示系统时间的. 1 <TimePicker 2 android:id="@+id/timePicker1&qu

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

Unity版本:4.5.1 NGUI版本:3.6.5 参考链接:http://blog.csdn.net/unity3d_xyz/article/details/23035521,作者:CSDN inspironx 在Unity中可以用Animation实现控件位置的转换,大小的变化等等,即用动画实现,NGUI中可以用Tween实现.这里用Panel的位置转换为例说明. 1.创建一个Panel面板,如下图: 2.为Panel添加Animation组件: 可以看到Panel中Animation组件

C#编写Unity基础GUI之控件布局

1.GUILayout控件 1 void OnGUI() 2 { 3 GUILayout.Button("这是GUILayout按钮"); 4 } 效果: 会自动调整控件大小,自动定位在屏幕左上角: 2.组视图 1 void OnGUI() 2 { 3 GUI.BeginGroup(new Rect(Screen.width / 2, Screen.height / 2, 500, 500)); 4 5 GUI.Button(new Rect(0,0,100,100),"按钮

C#编写Unity基础GUI之控件-2

1.文本输入框 1 public string text; 2 3 void OnGUI(){ 4 text = GUI.TextField(new Rect(140, 140, 100, 40), text); 5 6 if (GUI.Button(new Rect(10, 10, 100, 50), text)) 7 { 8 print("用户单击了按钮"); 9 } 10 } 效果: 2.开关按钮控件 1 public bool toggleBool; 2 3 void OnGU

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

1.正常来说Image和Text是会拦截点击事件的,如果添加EventTrigger的话,就可以响应对应的交互事件. 2.如果Image和Text是一个Button的子控件,那么虽然其会显示在Button上面,但是并不会拦截点击事件.除非是Selectable的,否则子控件不会影响到父控件的点击. 3.如果是跨Panel或者是同级的Image和Text,是会拦截点击事件的,即如果Image在某个Button之上,那么点击Image的事件不会穿透给Button. 4.如果在3的情况下想忽略点击事件

想给UIVIew上控件添加一些动画效果

如果你还不知道怎样让一张图片缓缓滑动,渐渐消失,或者是在原地翻滚,不知道怎样让一个窗口弹出的时候有一点抖动的效果不那么僵硬,那正好,今儿在下总结的内容可能刚好能帮你实现你想要的效果(⊙o⊙)哦. 首先说一下什么是动画效果,动画效果有哪些好处吧: 这里所说的动画绝对不是你在电视上看到的,有剧情的那种(当然这句可能是废话),而是为了增加用户的体验感,通过对控件的属性或者layer进行一些处理达到美化界面的效果,主要是让界面看起来更加的生动,不会太枯燥.想象一下,你在用读书软件时候的翻页效果,就能被称

控件继承、动画

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; ViewController * vc =[[ViewController alloc]init]; self.window.rootViewController = vc; self.window.backgroundColor = [UIColor grayColor]; //   makeKeyAndVisible:让窗口是主窗口,并且显示