在游戏中,还有一种比较常见的动画,这是进球后产生,分数将被显示在游戏,而快速移动,使其失去位置加入。就打算使用NGUI的Tween来制作这样的分数动画效果。

依据 Unity插件之NGUI学习(2),创建一个UI Root。然后使用NGUI创建一个Label和一个Button。

在Project窗体中,在Resources/Prefabs目录中创建一个Prefab。该Prefab就是一个NGUI的Label,然后在菜单中选择NGUI->Tween->Rotation和NGUI->Tween->Position

Play Style表示动画播放方式。

Animation Curve动画速度曲线。点击后能够自己定义。

Duration指定一次动画的时长。Start Delay进行延迟play。秒为单位。

Tween Group表示渐变动画组ID。

Ignore TimeScale是否忽略TimeScale。

Tween Rotation

FromTo,分别设置该GameObject開始和结束时在x,y,z上的旋转角度,如今我在To的z轴上设置了-720,表示该物体会在z轴上按顺时针旋转2圈。

Tween Position

FromTo,分别设置该GameObject開始和结束时在x,y,z上的坐标,该值为NGUI下的坐标系,这里暂且不设置To的坐标值,后面会在代码中进行设置。

在Project窗体中创建一个TweenTest的脚本文件。代码例如以下:

using UnityEngine;

using System.Collections;





public class TweenTest : MonoBehaviour {





private GameObject prefab;

private UIButton btn;

private UILabel scoreLabel;

private int score;

private int add;

private GameObject addscore;





void Awake() {

// 预先创建好经常使用的得分Prefab

prefab = (GameObject)Resources.Load("Prefabs/AddScore");

}





// Use this for initialization

void Start () {

score = 1000;

btn = GameObject.Find("Button").GetComponent<UIButton>();

scoreLabel = GameObject.Find("Score").GetComponent<UILabel>();

scoreLabel.text = "" + score;

// 设置button响应函数

EventDelegate.Add(btn.onClick, AddScore);

}



// Update is called once per frame

void Update () {



}





void AddScore() {

// 克隆得分GameObject

addscore = (GameObject)Instantiate(prefab, new Vector3(0, 0, 0), transform.rotation);

UILabel addlabel = addscore.GetComponent<UILabel>();

System.Random random = new System.Random();

// 随机得分数

add = random.Next(50, 100);

addlabel.text = "" + add;

// 获取TweenPosition对象

TweenPosition tweenP = addscore.GetComponent<TweenPosition>();

// 设置To的坐标值,该值为NGUI的坐标系的值,所以须要逆转world坐标值transform.InverseTransformPoint

tweenP.to = transform.InverseTransformPoint(scoreLabel.transform.position);

Debug.Log(tweenP.to.ToString());

// 设置动画播放结束后的回调函数

EventDelegate.Add(tweenP.onFinished, ScoreMoveFinished);

// 在Inspector窗体Tween Position勾选去掉了脚本名字那里的复选框,所以Tween
Position不会运行,须要手动Play

tweenP.Play();

}





void ScoreMoveFinished() {

score += add;

scoreLabel.text = "" + score;

Destroy(addscore);

}

}

当中关键的代码就是tweenP.to = transform.InverseTransformPoint(scoreLabel.transform.position);由于Tween
Position的To,From的值是基于NGUI的坐标系,而我能眼下能取得的是scoreLabel.transform.position,它是世界坐标系的值,所以须要转换为NGUI坐标系的值。

这正好是(8)中坐标系的逆转。

然后将脚本加入到UI Root下,执行后。点击button就会在中间随机产生一个分数,然后会高速旋转并移动到总分的位置,并使总分累加。

版权声明:本文博主原创文章。博客,未经同意不得转载。

Unity该插件NGUI得知(9)—— Tween并转换成世界坐标系的大小NGUI尺寸的更多相关文章

  1. 开发unity DLL插件

    最近开发一款设备的SDK,想着要开发unity版本,怎么做呢?首先想到的就是在外部编写相关的驱动程序然后集成成几个dll作为unity的SDK使用了.So,我就开始了unity外部插件的研究之旅了. ...

  2. 【转】unity地形插件T4M使用帮助

    unity的地形系统在手机游戏中因为效率问题基本无法使用,只能通过T4M这个地形插件来进行优化制作.下面大概讲解一下使用流程及方法. 先中U3D里面用自带的地形系统刷出想要的地形和贴图.贴图可以大概刷 ...

  3. (转)Unity Cinemachine插件,实现单目标和多目标之间切换

    Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换*版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 Cinemachine插件 ...

  4. 能够将 HTML 表格转换成图表的jQuery插件:Chartinator

    点这里 一个jQuery 插件能够将HTML 表格转换成图表,使用 Google Charts 实现. Chartinator当前支持以下特性: Creation of the following c ...

  5. 博客搬家到 http://fresky.github.io/ - Visual Studio的插件Pdbproj可以把pdb转换成C++项目

    博客搬到了Dawei XU,请各位看官挪步.最新的一篇是:Visual Studio的插件Pdbproj可以把pdb转换成C++项目.

  6. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  7. 在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文

    在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文安装成功后ASCII还是不能转换成中文的,原因是设置里面没有把编码设置为utf8的, ...

  8. 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form

    使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...

  9. IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体

    GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...

随机推荐

  1. String的split

    对于  http://10.13.30.22/svn/SVNRepository/UnChecked/Test  想要分割他就要用: String subContent[]=modelInfo.get ...

  2. java总结,错误集

    java中abstract怎么使用 abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就 ...

  3. 成为JAVA软件开发工程师要学哪些东西

    2010-04-22 15:34 提问者采纳 Java EE(旧称j2ee)   第一阶段:Java基础,包括java语法,面向对象特征,常见API,集合框架: *第二阶段:java界面编程,包括AW ...

  4. c#和UDP SOCKET广播

    server:  Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); // ...

  5. 【架构之路之WCF全析(一)】--服务协定及消息模式

    上周微软开公布会说.NET支持全然跨平台和并开放Core源代码的新闻,让我们顿时感到.NET要迎来它的春天.尽管早在几年前.NET就能开发Android和IOS,可是这次的跨平台把Linux都放到了微 ...

  6. Windows Phone开发(38):动画之PointAnimation

    原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.Fro ...

  7. mysql安装注意

    mysql安装教程,网上到处都有,我这里就不细说了. 但是有一点要注意,安装完之后,点击MySql 5.5 Command Line Client时,有可能出现一闪而过,打不开mysql的情况: 首先 ...

  8. c#为了实现自己的线程池功能(一)

    线程池的技术背景 在面向对象编程中,创建和销毁对象是非常费时间的,由于创建一个对象要获取内存资源或者其他很多其他资源,所以提高服务程序效率的一个手段就是尽可能降低创建和销毁对象的次数.特别是一些非常耗 ...

  9. BZOJ 1975 SDOI2010 魔法猪学院 A*k短路

    题目大意:给定一个值E 求起点到终点的最多条路径 使长度之和不超过E k短路的A*算法--每一个点有一个估价函数=g[x]+h[x] 当中g[x]是从源点出发已经走了的长度 h[x]是从这个点到汇点的 ...

  10. sed中求公共前缀

    string1="test toast" string2="test test" printf "%s\n%s\n" "$stri ...