NGUI Clip Animation

环境:

Unity 4.5,NGUI3.5,iTween

准备:

创建一个UIPanel,UIPanel下再创建一个UISprite,UIPanel选择SoftClip,然后给Panel绑定上PanelController.cs,类似下图
  

MaskManager

给UIRoot绑定PanelController.cs,Targets为上面创建的四个Panel,点击Play ,按数字键 0,1,2,3,4 切换效果

效果预览视频:http://pan.baidu.com/s/1ntr3XSt

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));
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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;
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

NGUI Clip Animation

时间: 2024-10-30 11:08:18

NGUI Clip Animation的相关文章

Unity动画

Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelling 最好是 T-pose Rigging 建立骨架(Skeleton) 的过程.定义骨头之间的运动关系.是由外部制作的(Maya 3dmax).Unity也没有工具用来做这个事情.Homanoid Character 至少需要15根骨头.臀部应该做为根. Skinning 将骨架绑定到 Mesh

cocos creator动画编辑器学习

动画是一个渐变的过程,怎么样在cocos creator的动画编辑器中实现这个过程. 一.层级关系: 1节点.2动画(Animation).3动画剪辑(Animation Clip).4属性轨道.5动画帧 a.  动画(Animation)是节点上的一个组件. b.  动画剪辑(Animation Clip)就是一份动画的声明数据,将它挂载到动画(Animation)上作为一个属性进行设置. c.  动画剪辑(Animation Clip)上可添加多个属性轨道来控制不同属性. d.  在一条属性

Unity 动画

Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelling 最好是 T-pose Rigging 建立骨架(Skeleton) 的过程.定义骨头之间的运动关系.是由外部制作的(Maya 3dmax).Unity也没有工具用来做这个事情.Homanoid Character 至少需要15根骨头.臀部应该做为根. Skinning 将骨架绑定到 Mesh

Uni2D 入门 -- Animation Clip 和 Animation API

转载 csdn kakashi8841 http://blog.csdn.net/kakashi8841/article/details/17599505 Animation Clip 一个animation clip是可重用的帧集合,它以给定的帧率显示sprite.每一帧包含的texture和可选事件. 可通过菜单栏“Uni2D > Create > Animation Clip”创建一个Animation Clip.   Animation Clip Inspector Atlas 部分

5.NGUI Animation(动画)

(1)Animation(Unity自带动画编辑工具)   1. 为需要添加动画的组件添加Animation组件. 2.打开Animation窗口(Window-Animation) 3.点击红色按钮开始录制,点击Add Curve 添加动画. (分别代表位移,旋转,缩放)         6.保存动画,如果不需要自动播放动画,则把Animation组件勾选掉. 6.在Button上添加一个UIPlay Animation组件 7.       按照规则添加需要的表现方式. (2)     Tw

Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长

Unity3d 4及之前的版本中动画的播放用的animation,可直接获取其播放持续长度.但5.x及以后的版本中都是用animator来播放动画了. https://docs.unity3d.com/Manual/AnimationOverview.html While Mecanim is recommended for use in most situations, Unity has retained its legacy animation system which existed b

Unity之如何从fbx提取Animation clip文件

见代码: 1 static void CreateAnim(string fbx, string target) 2 { 3 AnimationClip src = AssetDatabase.LoadAssetAtPath<AnimationClip>(fbx); 4 AnimationClip temp = new AnimationClip(); 5 EditorUtility.CopySerialized(src, temp); 6 CreateDirectory(target); 7

Unity 通过Animation实现控件位置的转换

Unity版本:4.5.1 NGUI版本:3.6.5 参考链接:http://blog.csdn.net/unity3d_xyz/article/details/23035521,作者:CSDN inspironx 在Unity中可以用Animation实现控件位置的转换,大小的变化等等,即用动画实现,NGUI中可以用Tween实现.这里用Panel的位置转换为例说明. 1.创建一个Panel面板,如下图: 2.为Panel添加Animation组件: 可以看到Panel中Animation组件

Unity插件之NGUI学习(4)—— 创建UI2DSprite动画

创建一个新的Scene,并按 Unity插件之NGUI学习(2)创建UI Root,并在UI Root的Camera下创建一个Panel. 然后在选中Panel,在菜单中选择NGUI->Create->Unity 2D Sprite 查看Inspector窗口 接着是在Unity中制作Sprite: 在Project窗口创建Textures文件夹,并从外部拖入一些图片素材,然后选中需要转成Sprite的图片,然后在Inspector窗口进行转变Sprite的操作,如图. 选择Sprite(2D