Unity插件之NGUI学习(9)—— Tween和世界坐标系尺寸转换为NGUI尺寸
来源:互联网 发布:西安翡翠软件培训 编辑:程序博客网 时间:2024/06/04 17:59
在游戏中,有一种比较常见的动画效果,就是产生得分后,分数会在游戏中显示,并快速移动到总分的位置并使之相加。今天我就打算使用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;
// 设置按钮响应函数
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下,运行后,点击按钮就会在中间随机产生一个分数,然后会快速旋转并移动到总分的位置,并使总分累加。
- Unity插件之NGUI学习(9)—— Tween和世界坐标系尺寸转换为NGUI尺寸
- Unity插件之NGUI学习(8)—— Table和NGUI尺寸转换为世界坐标系尺寸
- Unity插件之NGUI学习(2)—— 创建Texture和Sprite
- NGUI之位置尺寸相关
- Unity初级——NGUI插件学习(1)
- Unity插件之NGUI学习(1)—— 环境搭建
- Unity插件之NGUI学习(3)—— 创建Button
- Unity插件之NGUI学习(4)—— 创建UI2DSprite动画
- Unity插件之NGUI学习(7)—— ScrollView(Panel)
- NGUI之tween(动画)
- Unity插件NGUI学习笔记(二)
- Unity 世界坐标 和 NGUI 屏幕坐标间的转换
- unity 世界坐标 屏幕坐标和ngui坐标转换
- Unity学习之NGUI动画和冷却
- NGUI学习之路(1)Tween系列【NGUI2.6.3】
- Unity 世界坐标转换到NGUI坐标
- Unity 世界坐标转换到NGUI坐标
- Unity 世界坐标转换到NGUI坐标
- arc使用注意事项
- 21.N皇后 (15分)
- SQL Server 2014 各个版本支持的功能
- 前端开发——图片标注工具
- 程序的入口及AppDelegate窗口显示原理
- Unity插件之NGUI学习(9)—— Tween和世界坐标系尺寸转换为NGUI尺寸
- 基于hog滑动窗口的目标识别
- 第九周项目五——程序填充题
- Codeforces Round #273 (Div. 2)
- 【ThinkingInC++】75、多重继承
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数
- 面向切面编程(AOP)的理解
- 简述防火墙--未知危险的屏障
- plsql无法连接64位oracle数据库的解决方法