ImageEffectController

0 阅读3分钟

概述(Overview)

ImageEffectController 是一个使用 DOTween 实现多种 3D/2D 物体视觉动画效果的组件,挂载在带有 Renderer 的 GameObject 上。

主要功能包括:

  • 物体整体动画序列(缩放 + 淡入 + 旋转 + 移动 + 颜色变化 + 抖动)
  • 支持单独触发每种动画效果
  • 支持重置物体状态(位置、缩放、颜色、透明度、激活状态)
  • 动画参数全部公开,可在 Inspector 中调节
  • 适用于 UI 图片特效、3D 物体展示、教学引导、物品出现/消失等场景

核心依赖

  • DOTween(所有动画均使用 DOTween 实现)
  • 需要物体上有 Renderer 组件(用于材质透明度/颜色控制)

典型使用方式

  • 挂载脚本后,在 Inspector 配置参数
  • 调用 AnimateImage() 播放完整组合动画
  • 或单独调用 FadeIn()、Scale() 等方法触发单一效果

组件属性(Inspector 可调参数)

参数名类型默认值示例说明
targetScaleVector3(2, 2, 1)目标缩放值(通常 z 保持 1)
scaleDurationfloat1f缩放动画持续时间(秒)
fadeDurationfloat1f淡入/淡出 / 颜色变化的持续时间
fadeInbooltrue是否执行淡入(材质 alpha → 1)
fadeOutboolfalse是否执行淡出(材质 alpha → 0)
targetColorColorColor.red目标颜色(当 changeColor = true 时使用)
changeColorboolfalse是否执行颜色渐变
offScreenPositionVector3(-Screen.width, 0, 0)初始屏幕外位置(用于滑入效果)
onScreenPositionVector3(0, 0, 0)目标屏幕内位置
moveDurationfloat1f移动动画持续时间
rotationAnglefloat360f旋转角度(绕 Z 轴)
rotateDurationfloat2f旋转动画持续时间
shakeStrengthVector3(20, 20, 0)抖动强度(x/y 平面抖动)
shakeDurationfloat1f抖动持续时间

核心方法

AnimateImage

/// <summary>
/// 播放完整的组合动画序列(推荐入口方法)
/// 顺序:淡入/淡出 → 缩放 → 旋转 → 移动 → 颜色变化(并行) → 抖动
/// 动画完成后打印 "All image effects completed"
/// </summary>
public void AnimateImage()

执行流程

  1. 激活物体 gameObject.SetActive(true)
  2. 创建 DOTween Sequence
  3. 依次/并行添加各种动画
  4. 最后抖动效果
  5. OnComplete 回调打印完成日志

典型调用

// 在其他脚本中
GetComponent<ImageEffectController>().AnimateImage();

ResetImage

/// <summary>
/// 重置物体到初始状态(常用于下次重新播放前准备)
/// - 位置回到 offScreenPosition
/// - 缩放回到 (1,1,1)
/// - 颜色恢复为白色
/// - 透明度设为 0
/// - 物体设为非激活
/// </summary>
public void ResetImage()

推荐用法:在动画播放结束或需要重新展示时调用。


单一效果方法(可单独调用)

方法名功能描述动画核心调用
FadeIn()材质淡入(alpha → 1)_material.DOFade(1f, fadeDuration)
FadeOut()材质淡出(alpha → 0)_material.DOFade(0f, fadeDuration)
Scale()缩放到 targetScaletransform.DOScale(targetScale, scaleDuration)
Rotate()绕 Z 轴旋转 rotationAngle 度transform.DORotate(..., RotateMode.FastBeyond360)
Move()从 offScreenPosition 移动到 onScreenPositiontransform.DOLocalMove(onScreenPosition, moveDuration)
ChangeColor()材质颜色渐变到 targetColor_material.DOColor(targetColor, fadeDuration)
Shake()位置抖动transform.DOShakePosition(...)

使用示例

var effect = GetComponent<ImageEffectController>();

// 只想让物体抖动一下
effect.Shake();

// 单独做淡入 + 放大
effect.FadeIn();
effect.Scale();

内部字段(私有)

字段名类型说明
_rendererRenderer物体的 Renderer 组件
_materialMaterial当前使用的材质(取自 renderer)

注意:脚本在 Start() 中自动获取 _renderer 和 _material,若物体没有 Renderer 会导致空引用。