跳到主要内容

TextureAnim

重要 注意 提醒

Coding Style wiki​


TextureAnimation 是以 CPU 计算 (CPU computation) 的图片序列动画 (Image Sequence Animation) 组件,于 Inspector 配置 Sprite 序列与播放参数即可播放,支持 SpriteRenderer 与 Image,具有 Normal、Reverse、PingPong、PingPongReverse 播放模式,并支持编辑模式预览 (ExecuteInEditMode)。

命名空间OxGKit.Utilities.TextureAnim
类型public class TextureAnimation : MonoBehaviour
源码TextureAnimation.cs
using OxGKit.Utilities.TextureAnim;

注意 组件需挂载于含有 SpriteRenderer 或 Image 的对象上 (于 Awake 自动检测,SpriteRenderer 优先),通过 AddComponentMenu: OxGKit/Utilities/TextureAnim/TextureAnimation 加入。

快速上手​

using OxGKit.Utilities.TextureAnim;
using UnityEngine;

public class TextureAnimDemo : MonoBehaviour
{
public TextureAnimation texAnim;

private void Start()
{
// 设置帧率
this.texAnim.SetFrameRate(12);

// 设置动画结束回调 (非循环播放完成时触发)
this.texAnim.SetAnimationEnd(() =>
{
Debug.Log("Animation Complete");
});
}

public void Replay()
{
// 重置动画从头播放
this.texAnim.ResetAnim();
}
}

通用规则​

Inspector 配置​

字段说明
Sprites图片序列 (List of Sprite),依序作为动画帧。
Is Loop是否循环播放 (默认 false)。
Play Mode播放模式:Normal (正序)、Reverse (倒序)、PingPong (正序往返)、PingPongReverse (倒序往返)。
Frame Rate播放帧率 (默认 30)。
Ignore Time Scale是否忽略 Time.timeScale (默认 true,使用 unscaledDeltaTime)。

播放行为​

  • 动画由 Update 驱动,依 Frame Rate 换算帧时间切换 Sprite。
  • 非循环 (Is Loop = false) 播放完成时,会停在结尾帧并触发 SetAnimationEnd 设置的回调;PingPong / PingPongReverse 需完成一次往返 (两趟) 才视为播放完成。
  • 组件 OnDisable 与 Inspector 数值变更 (Editor) 时会自动 ResetAnim。

提醒 编辑模式下即可预览动画效果 (ExecuteInEditMode),无需进入 Play Mode。


方法总览​

方法说明
IsAnimationComplete检查动画是否已播放完成。
SetAnimationEnd设置动画结束回调。
SetIgnoreScale设置是否忽略 TimeScale。
SetFrameRate设置播放帧率。
ResetAnim重置动画至初始状态。

IsAnimationComplete​

public bool IsAnimationComplete()

检查动画是否已播放完成 (仅非循环播放会进入完成状态)。

SetAnimationEnd​

public void SetAnimationEnd(Action endCallback)

设置动画结束回调,于非循环播放完成时触发。

texAnim.SetAnimationEnd(() => Debug.Log("Done"));

SetIgnoreScale​

public void SetIgnoreScale(bool ignore)

设置是否忽略 Time.timeScale (true 使用 unscaledDeltaTime;false 使用 deltaTime)。

SetFrameRate​

public void SetFrameRate(int frameRate)

设置播放帧率 (最小值为 0;帧率为 0 时动画不会更新)。

ResetAnim​

public void ResetAnim()

重置动画至初始状态 (时间、帧索引、完成状态、往返计数),并立即显示起始帧。