NGUI Clip Animation (UI动画)
效果预览
视频:http://pan.baidu.com/s/1ntr3XSt
运行环境
Unity 4.5, NGUI3.5, iTween
场景搭建
创建一个UIPanel,UIPanel下再创建一个UISprite,UIPanel选择SoftClip,然后给Panel绑定上PanelController.cs,拷贝4份。结构如下图
MaskManager
给UIRoot绑定PanelController.cs,Targets绑定上面创建的四个Panel,点击Play ,按数字键 0,1,2,3,4 切换效果

MaskManager代码
using UnityEngine;
using System.Collections;
using System.Collections.Generic; public class MaskManager : MonoBehaviour {
public GameObject[] Targets; private List<PanelController> clipList;
private float sw = 1024f;
private float sh = 576f; // Use this for initialization
void Start () {
clipList = new List<PanelController>();
foreach(var target in Targets) {
clipList.Add(target.AddComponent<PanelController>());
} Init();
} // Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.Alpha1)) {
ShowFullImage(0);
} else if(Input.GetKeyDown(KeyCode.Alpha2)) {
ShowFullImage(1);
} else if(Input.GetKeyDown(KeyCode.Alpha3)) {
ShowFullImage(2);
} else if(Input.GetKeyDown(KeyCode.Alpha4)) {
ShowFullImage(3);
} else if(Input.GetKeyDown(KeyCode.Alpha0)) {
Init();
}
} void Init() {
for(int i=0; i<clipList.Count; i++) {
var size = new Vector2((sw / clipList.Count), sh);
var offset = new Vector2(-sw * 0.5f + (i + 0.5f) * (sw / clipList.Count), 0f);
clipList[i].UpdateOffset(offset);
clipList[i].UpdateSize(size);
}
} void ShowFullImage(int id) {
for(int i =0; i<clipList.Count; i++) {
if(i != id) {
clipList[i].SetDepth(i);
} else {
clipList[i].SetDepth(clipList.Count);
}
}
clipList[id].UpdateOffset(new Vector2(0f, 0f));
clipList[id].UpdateSize(new Vector2(sw, sh));
}
}
using UnityEngine;
using System.Collections; public class PanelController : MonoBehaviour {
private UIPanel panel;
static private float animTime = 0.6f; void Awake() {
panel = GetComponent<UIPanel>();
} // Use this for initialization
void Start () {
} // Update is called once per frame
void Update () { } public void SetDepth(int depth) {
panel.depth = depth;
} public void UpdateSize(Vector2 size) {
var current = new Vector2(panel.baseClipRegion.z, panel.baseClipRegion.w);
iTween.ValueTo(gameObject, iTween.Hash("from", current, "to", size, "time", animTime, "onupdate", "OnUpdateSize"));
} public void UpdateOffset(Vector2 offset) {
iTween.ValueTo(gameObject, iTween.Hash("from", panel.clipOffset, "to", offset, "time", animTime, "onupdate", "OnUpdateOffset"));
} private void OnUpdateSize(Vector2 size) {
panel.baseClipRegion = new Vector4(0f, 0f, size.x, size.y);
} private void OnUpdateOffset(Vector2 offset) {
panel.clipOffset = offset;
}
}
NGUI Clip Animation (UI动画)的更多相关文章
- 【转】发布一个基于NGUI编写的UI框架
发布一个基于NGUI编写的UI框架 1.加载,显示,隐藏,关闭页面,根据标示获得相应界面实例 2.提供界面显示隐藏动画接口 3.单独界面层级,Collider,背景管理 4.根据存储的导航信息完成界面 ...
- Unity3D-深入剖析NGUI的游戏UI架构
Unity3D-NGUI分析,使用NGUI做UI须要注意的几个要点在此我想罗列一下,对我在U3D上做UI的一些总结,最后解剖一下NGUI的源码.它是假设架构和运作的. 在此前我介绍了自己项目的架构方式 ...
- iOS - Core Animation 核心动画
1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...
- Unity3D学习笔记(十四):Animation旧动画
animator(新动画系统):骨骼动画,骨骼驱动,格式化编辑,动画机图形化 animation(旧动画系统):物理系统,帧动画 一.如何建立动画文件 Animation Clip 手动添加动 ...
- 帧动画 连续播放多张图片动画 以及ui动画 SoundPool
drawable下有很多图片 可以 <?xml version="1.0" encoding="utf-8"?> <animation-li ...
- COCOS2D-X中UI动画导致闪退与UI动画浅析
前两天和同事一起查一个游戏的闪退问题,log日志显示最后挂在CCNode* ActionNode::getActionNode()函数中的首行CCNode* cNode = dynamic_cast& ...
- iOS开发基础知识:Core Animation(核心动画)
Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core A ...
- Android动画总结#补间动画(Tween Animation/View Animation) #帧动画(Frame Animation/Drawable Animation)#属性动画(PropertyAnimation)
1.共有三种动画,英文名字多种叫法如下 第一种动画:补间动画(Tween Animation/View Animation) 四个:RotateAnimation旋转. AlphaAnimation透 ...
- Android Property Animation 物业动画
效果图: Property Animation介绍: 出生在sdk3.0,是利用了View所拥有的属性,进行一系列的操作. 比方一个View有什么样的setAbc的属性,那么理论上就能够设置它. ...
随机推荐
- 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先
[试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...
- Java基础——详尽说明try-catch-finally的用法
问:Java异常处理机制,理解了吗?Java异常处理,真的掌握了吗?什么是自定义异常?catch体里遇到return 是怎么处理?finally 体里有return怎么处理?catch 和 final ...
- js字符串如何倒序
1. var reverse = function( str ){ var newStr = '', i = str.length; for(; i >= 0; i--) { newStr += ...
- 从无到有,用Nodejs+express+mongodb搭建简易登陆系统
前端处理server表示很蛋疼,初学Node,虽然感觉异常强大,但是学起来还是有些吃力的,Node是工具,它不是万能的,搭建一个系统还是需要借助其他一些工具,对于我这个没怎么接触server的前端来说 ...
- js-ES6学习笔记-Iterator
1.遍历器(Iterator)是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). 2.Iterator ...
- 回调地狱以及用promise怎么解决回调地狱
哈哈哈,我又又又回来了,不好意思,最近枸杞喝的比较到位,精力比较旺盛. 现在我们来聊一聊啥是回调地狱,注意是回调地狱啊 不是RB人民最爱拍的那啥地狱啊,来吧,上车吧少年,这是去幼儿园的车 都让开, ...
- html5+css3图片旋转特效
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- Nginx的介绍
1.什么是NGINX: Nginx是一个开源的,支持高性能的.支持高并发的web服务软件和代理服务软件,它是由俄罗斯人lgor Sysoev开发的 Nginx具有高并发(特别是对于静态资源)占用系统资 ...
- JSP源码、改写Servlet为JSP、查看转译成为Servlet的文件、JSP字符编码设置
概述 在Servlet中编写HTML太麻烦了,应该使用JSP.JSP中可以直接编写HTML,使用指示.声明.脚本(scriptlet)等元素来堆砌各种功能,但JSP最后还是会被容器转译为Servlet ...
- Mongodb的入门(6)副本集
Mongodb的副本集:(有两种情况,主从复制,副本集) 这次我来说一下mongodb的副本集,副本集的出现可以有效的保证mongodb的单点问题,对数据的稳健性有一定辅助作用: MongoDB复制: ...
