图集、sprite、序列帧

本文介绍了使用Unity制作序列帧动画的方法,包括偏移播放动画的脚本编写、使用NGUI组件uiSpriteAnimation,以及不使用插件时的批量创建序列帧动画。详细解释了如何导入资源、创建材质球、选择合适的shader,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

序列帧动画制作的方法:(这里暂不讨论drawtexture的方法)
1、如果资源是在一张图上,如图:



那么可以使用偏移来播放动画,就是 下图中的offSet参数(当然,在做这些之前,你要导入资源、创建材质球、选择合适的shader等)



知道方向了,那做起来也就方便了
创建一个脚本如下:

using UnityEngine;
using System.Collections;

public class Explosion : MonoBehaviour {
	private int x = 0;
	private int y = 0;
	public float speed = 0.03f;
	private float nextFire = 0.0f;
	public bool end = false;
	public bool rotate;
    public float offsetRatio = 0.25f;//这个参数用于调节偏移系数,一排有四个,是1/4;有五个则是1/5;
    //下面俩参数表示有多少行列
    public int lineX = 4;
    public int lineY = 4;
	// Update is called once per frame
	void LateUpdate () 
    {
        if(Time.time > nextFire && !end)
        {
            if (y < lineY)
            {

                if (x < lineX+1)
                {
                    renderer.material.mainTextureOffset = new Vector2(offsetRatio * x, offsetRatio * y);
                    x++;
                }
                if (x == lineX)
                {
                    y++;
                    x = 0;
                }
			    nextFire = Time.time + speed;
		    }
            if (x == 0 && y == lineY)
            {
				end = true;
				Destroy(gameObject);
			}
		}
		if(rotate)
        {
			transform.Rotate(2,0,0);
		}
	}
}

具体已经注释了,不明白的可以看看demo,或者联系我;

2、另一种就是ngui的一个脚本组件:uiSpriteAnimation

首先要导入序列帧、ngui、创建图集如下:


创建图集:




具体实现代码如下:


using UnityEngine;
using System.Collections;

public class effectTest : MonoBehaviour 
{
    //-------------------------------------------------------------------------
    public bool isPlayAnimation = false;
    public GameObject sprite;
    public GameObject buttonStart;
    public GameObject buttonStop;

    //-------------------------------------------------------------------------
    void Start() 
    {
        UIEventListener.Get(buttonStart).onClick = OnClick;
        UIEventListener.Get(buttonStop).onClick = OnClick;
	}

    //-------------------------------------------------------------------------
    //这个是自己想要在结束的时候做一个操作,在ngui的源码中加了个结束的委托,具体的就不多说了,demo会放上去,有兴趣的可以看看
    void OnFinish(UISpriteAnimation sender)
    {
        Debug.LogWarning("finish");
        sprite.SetActive(false);
    }

    //-------------------------------------------------------------------------
    void Update() 
    {
	
	}
    
    //-------------------------------------------------------------------------
    void OnClick(GameObject obj)
    {
        if (obj == buttonStop)
        {
            Destroy(sprite.GetComponent<UISpriteAnimation>());
            sprite.GetComponent<UISprite>().spriteName = sprite.GetComponent<UISprite>().atlas.spriteList[0].name;
            sprite.SetActive(false);
        }
        else if (obj == buttonStart)
        {
            sprite.SetActive(true);
            if (sprite.GetComponent<UISpriteAnimation>()==null)
            {
                sprite.AddComponent<UISpriteAnimation>();
                sprite.GetComponent<UISpriteAnimation>().onFinish += OnFinish;
            }
            UISpriteAnimation sprite_animation = sprite.GetComponent<UISpriteAnimation>();
            sprite_animation.framesPerSecond = 30;
            sprite_animation.loop = false;
        }
    }
}


这个是自己想要在结束的时候做一个操作,在ngui的源码中加了个结束的委托,具体的就不多说了,demo会放上去,有兴趣的可以看看

但是如果序列帧过多的话,不适合做序列帧动画,建议使用视频播放。

(说明:这里用的是unity4.6.1,想要查看的朋友需要使用同版本或更高的版本)这里奉上下载连接:

链接:http://pan.baidu.com/s/1hqu0qdm 密码:cqw2


2.2补充:
最近在复刻一个demo的时候,有一种情况之前忽略了,就是在不使用插件的情况下(且资源是多个小图片),制作序列帧动画,(当然这里可以使用drawtexture的方法绘制,但是我不想使用这种方法)

在网上查了下,发现momo已经写出了批量创建序列帧动画的小工具,极其方便,这里链接附上,共同学习啦
批量创建序列帧动画,其他的我就不说什么啦

2.3补充:

unity之sprite序列动画(使用unity的sprite editor):

图片是自己在网上下的一张序列帧图片

首先导入一张多序列的图片(带透明通道的),

其次,我们需要修改一下sprite的设置:



应用之后,打开sprite editor面板进行sprite的编辑(这里有人会问,怎么打开sprite editor面板呢?看看上一张图的右上角我都用红框框框出来了啦):


接下来,就直接上一张我调好的sprite线框图:


下面是具体怎么制作动画,当然这里有一些步骤是我省略了,(比如:如何创建clip,如何调整帧速率等等,自己探索吧,都是简单的操作)


### Unity 中创建和处理动画序列帧的工具与方法 #### 使用 Animation Sequencer 工具 Animation Sequencer 是一款专为 Unity 开发者设计的强大工具,旨在简化并优化动画创作流程。该工具有助于开发者更直观高效地在 Unity 编辑器内构建复杂的动画效果[^1]。 #### 利用内置功能实现序列帧动画 对于简单的序列帧动画需求,可以直接利用 Unity 的基础组件来完成: - **Animator 组件法** 将 Image 对象附加 Animator 组件,并新建相应的 Animation Clip 来定义图像切换逻辑。此方式适合 UI 或简单对象上的动态展示[^2]。 - **Sprite Array 法** 把准备好的序列帧图片依次加入 Sprites 数组属性里,配合脚本控制每一帧显示的时间间隔,从而模拟连续动作的变化过程[^4]。 #### 导入外部资源转换为序列帧 如果拥有视频文件或其他格式的艺术资产,则可以先将其转化为单张静态图片组成的序列集合。例如 MOV 文件可以通过特定软件拆解成多帧 PNG 图片,之后借助 TexturePacker 类似的应用打包成图集以便更好地管理和加载性能[^5]。 ```csharp // 示例代码:基于 SpriteRenderer 实现基本的序列帧播放机制 using UnityEngine; public class FrameAnimator : MonoBehaviour { public Sprite[] frames; // 存储所有的帧数据 private int currentIndex = 0; private float frameRate = 0.1f; void Update() { if (Time.time >= nextFrameTime) { Renderer renderer = GetComponent<SpriteRenderer>(); renderer.sprite = frames[currentIndex]; currentIndex++; if(currentIndex >= frames.Length){ currentIndex = 0; } nextFrameTime += frameRate; } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值