Unity该插件NGUI得知(9)—— Tween并转换成世界坐标系的大小NGUI尺寸
在游戏中,还有一种比较常见的动画,这是进球后产生,分数将被显示在游戏,而快速移动,使其失去位置加入。就打算使用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中
From和To,分别设置该GameObject開始和结束时在x,y,z上的旋转角度,如今我在To的z轴上设置了-720,表示该物体会在z轴上按顺时针旋转2圈。
Tween Position中
From和To,分别设置该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尺寸的更多相关文章
- 开发unity DLL插件
最近开发一款设备的SDK,想着要开发unity版本,怎么做呢?首先想到的就是在外部编写相关的驱动程序然后集成成几个dll作为unity的SDK使用了.So,我就开始了unity外部插件的研究之旅了. ...
- 【转】unity地形插件T4M使用帮助
unity的地形系统在手机游戏中因为效率问题基本无法使用,只能通过T4M这个地形插件来进行优化制作.下面大概讲解一下使用流程及方法. 先中U3D里面用自带的地形系统刷出想要的地形和贴图.贴图可以大概刷 ...
- (转)Unity Cinemachine插件,实现单目标和多目标之间切换
Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换*版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 Cinemachine插件 ...
- 能够将 HTML 表格转换成图表的jQuery插件:Chartinator
点这里 一个jQuery 插件能够将HTML 表格转换成图表,使用 Google Charts 实现. Chartinator当前支持以下特性: Creation of the following c ...
- 博客搬家到 http://fresky.github.io/ - Visual Studio的插件Pdbproj可以把pdb转换成C++项目
博客搬到了Dawei XU,请各位看官挪步.最新的一篇是:Visual Studio的插件Pdbproj可以把pdb转换成C++项目.
- qrcode.js插件将你的内容转换成二维码格式
---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...
- 在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文
在eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文安装成功后ASCII还是不能转换成中文的,原因是设置里面没有把编码设置为utf8的, ...
- 使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form
使用 PySide2 开发 Maya 插件系列二:继承 uic 转换出来的 py 文件中的类 Ui_Form 开发环境: Wing IDE 6.1 步骤1: 打开 Wing IDE,创建一个新的 pr ...
- IntelliJ IDEA 通过GsonFormat插件将JSONObject格式的String 解析成实体
GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...
随机推荐
- hdu3804(树链剖分)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3804 题意:给定一棵n个结点的树及边权,回答m个询问(x,y)满足以下条件的边权: 1)该边在结点1~ ...
- 命令行參数选项处理:getopt()及getopt_long()函数使用
在执行某个程序的时候,我们通常使用命令行參数来进行配置其行为.命令行选项和參数控制 UNIX 程序,告知它们怎样动作. 当 gcc的程序启动代码调用我们的入口函数 main(int argc ...
- 自定义Annotation
来源:http://blog.csdn.net/lifetragedy/article/details/7394910 概念篇 来看一个最简单的annotation示例 @Target(Element ...
- 本科非cs菜鸟计算机面试实录
两年制小硕,本硕期间差不多都打酱油的.本科非cs专业,硕士cs,编程基础一般,专业基础尚可.研究生期间分析分析了pgsql数据库的源码:同时实验室一些杂项目:自己业余为了应试读了些计算机书.自己当时q ...
- Linq 导出Excel
var d = db.User; Repeater1.DataSource = d.ToList(); Repeater1.DataBind(); string guid = Guid.NewGuid ...
- TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error:
今天是2014-06-17.遇到一个很奇怪的问题,可能之前測试改动监听的原因,导致监听启动后自己主动关闭,特此记录一下整个处理过程, 监听配置文件信息例如以下: [oracle@dg1 admin]$ ...
- Socket编程实践(13) --UNIX域名协议
UNIX域名协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 差点儿是TCP的两倍(因为UNIX域套接字不须要经过网络协议栈,不须要打包/拆包,计算校验和,维护序号和 ...
- Java实现字符全阵列阵列
import org.junit.Test; public class AllSort { public void permutation(char[] buf, int start, int end ...
- Linux 编程学习笔记----ANSI C 文件I/O管理
转载请注明出处:http://blog.csdn.net/suool/article/details/38129201 问题引入 文件的种类 依据数据存储的方式不同,能够将文件分为文本文件和二进制文件 ...
- Linux 下卸载MySQL 5
对于在Linux下通过rpm方式的mysql,我们能够通过移除这些rpm包以及删除项目的文件夹来达到卸载的目的.本文演示了在SUSE Linux 10下下载MySQL 5.5.37.详细见下文. 1. ...