NGUI Clip Animation (UI动画)
本文为作者原创,转载请注明出处:https://www.cnblogs.com/zhaoqingqing/p/3878498.html
效果预览#
视频: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; } }
作者:赵青青 一名在【网易游戏】做游戏开发的程序员,擅长Unity3D,游戏开发,.NET等领域。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
本文版权归作者和博客园共有,欢迎转载,转载之后请务必在文章明显位置标出原文链接和作者,谢谢。
如果本文对您有帮助,请点击【推荐】您的赞赏将鼓励我继续创作!想跟我一起进步么?那就【关注】我吧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 易语言 —— 开山篇
· Trae初体验