在游戏中,还有一种比较常见的动画,这是进球后产生,分数将被显示在游戏,而快速移动,使其失去位置加入。就打算使用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. Nutch+HBase

    Nutch+HBase 当我们为nutch的架构发愁的时候,nutch的开发人员送来了nutchbase.我一些简单的测试表明,在hadoop0.20.1和hbase0.20.2上,稍加修改可以运行起 ...

  2. FZU 2113(数位dp)

    题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38054 题意:求区间[a,b]中包含'1'的个数. 分析:数位dp ...

  3. ural1018(树形dp)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17662 题意:给一棵边有权值的二叉树,节点编号为1-n,1是根节点 ...

  4. 解决eclipse project前出现红色感叹号 但没有提示错误出在什么地方build path jar包也没报错

    在problems窗体能够看到错误信息 菜单条 window-->show view-->problems 或alt+shift+q 然后按x 又一次选一下包就攻克了

  5. 用VS2005编译生成Lua库文件和解释器

    TMD,本来很简单的东西,网上说的乱七八糟,说的也不明白,大家抄来抄去,估计都不自己实践的..花了半个下午研究了一下,总结一下. 1)下载lua工程文件,地址为http://www.lua.org/f ...

  6. iOS UITableView的Section Footer加入button

    郝萌主倾心贡献,尊重作者的劳动成果.请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意.重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 在处理UI ...

  7. WPF换肤之六:酷炫的时区浏览小精灵

    原文:WPF换肤之六:酷炫的时区浏览小精灵 由于工作需要,经常要查看到不同地区的 当前时间,以前总是对照着时区表来进行加减运算,现在有了这个小工具以后,感觉省心了不少.下面是软件的截图: 效果图赏析 ...

  8. java中取得上下文路径的方法

    1.request.getContextPath(); 获得web根的上下文环境 如 /tree tree是web项目的root context 2.可以在servlet的init方法里 String ...

  9. 【剑指offer】面试题35:第一个数字只出现一次

    def FirstNotRepeatingChar(string): hashStr = [0] * 256 for c in string: hashStr[ord(c)] += 1 for c i ...

  10. zoj 3822 Domination(2014牡丹江区域赛D称号)

    Domination Time Limit: 8 Seconds      Memory Limit: 131072 KB      Special Judge Edward is the headm ...