效果预览
视频:
运行环境
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 ListclipList; private float sw = 1024f; private float sh = 576f; // Use this for initialization void Start () { clipList = new List (); foreach(var target in Targets) { clipList.Add(target.AddComponent ()); } 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
using UnityEngine;using System.Collections;public class PanelController : MonoBehaviour { private UIPanel panel; static private float animTime = 0.6f; void Awake() { panel = GetComponent(); } // 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; }}