当前位置: 首页 > news >正文

Rive 动画在 uni-app 里只显示不交互?把 State Machine 跑起来

Rive 的价值不只是“播放一个 .riv 文件”,而是让按钮、角色、进度、引导页能随着用户操作实时变化。可是在 uni-app 项目里,很多人会遇到同一类问题:文件能加载,画面却不动;点击后没有反馈;State Machine 配了却像没生效;甚至标准调试基座里直接缺少原生运行时。

kongbai-rive 是一个面向 uni-app App nvue 与 uni-app x App 的 UTS 原生 Rive 组件。它封装 Android/iOS 官方 Rive Runtime,把普通 Animation 和 State Machine 的播放、输入控制和事件统一到组件 API 中,适合做真正可交互的 App 动画。

一、为什么“能显示”不等于“能交互”

Rive 文件里可以包含 Artboard、Animation 和 State Machine。普通动画只需播放时间轴;交互效果则依赖 State Machine 的输入,例如 trigger、boolean 和 number。

最常见的坑是名称不匹配。Artboard、Animation、State Machine 以及输入名称必须和 Rive Editor 中完全一致。文件即使能正常加载,只要名称写错,画面也可能静止不动。

例如,页面配置 State Machine:

<kongbai-rive
ref="riveRef"
class="rive-player"
src="/static/rive/demo.riv"
stateMachine="Main State Machine"
:autoPlay="true"
@ready="onReady"
@error="onError"
/>

然后在业务逻辑中驱动交互:

this.$refs.rive.fire('submit')
this.$refs.rive.setBoolean('active', true)
this.$refs.rive.setNumber('progress', 50)

这三个方法分别对应 State Machine 的 trigger、boolean 和 number 输入。登录按钮反馈、角色表情切换、进度状态和新手引导,都可以交给 Rive 文件中的状态机处理。

二、先确认运行环境,避免白调半天

组件支持 uni-app App 的 nvue 页面,以及 uni-app x App 的 .uvue 页面;Android 最低 API 23,iOS 最低 iOS 14。普通 uni-app vue 页面、H5 与小程序不支持。

Rive Runtime 是原生依赖。安装或更新插件后,必须重新制作自定义基座或重新云打包,标准基座与热更新无法加入第三方 AAR、CocoaPods 和 native .so。Android 标准基座缺少运行时时,组件会返回 missing_runtime 错误,避免直接崩溃。

所以遇到“代码没报错但组件无法运行”,先检查是否正在使用包含插件的自定义基座,而不是先怀疑 State Machine 写错。

三、接入方式和资源加载

把插件放到 uni_modules/kongbai-rive 后会自动注册,不需要手动 import。传统 uni-app 必须在 .nvue 页面使用,uni-app x 则放到 .uvue 页面。

建议把 .riv 文件放在 static/rive 目录:

<kongbai-rive src="/static/rive/demo.riv" />

也可以按业务切换资源:

this.$refs.rive.load('/static/rive/level-up.riv')
this.$refs.rive.load('https://example.com/level-up.riv')

网络资源需要由 App 直接访问;Android 还支持传入 content:// 地址和本地绝对路径。不要直接引用 unpackage 中的编译产物,组件会自动处理 /static 路径到 App 运行时资源的转换。

四、动画控制别只停在 play

组件提供 play、pause、resume、stop、resetAnimation、clear 和 reload 等方法。暂停会保留当前画面,resume 从当前位置继续;重置适合重复触发的成功动画或错误反馈。

缩放和布局也可通过 fit、alignment 控制:

<kongbai-rive
src="/static/rive/demo.riv"
fit="contain"
alignment="center"
loop="oneShot"
/>

loop 支持 auto、loop、oneShot 和 pingPong。这样可以按动画本身的设计播放,也可以由页面统一约束播放次数。

五、适用场景

1. 启动页、空状态和引导页
2. 带点击反馈的按钮、表单和加载状态
3. 角色动画、直播互动和会员等级效果
4. 需要用 State Machine 驱动复杂 UI 状态的 App 动画

如果你已经在 Rive Editor 做好了交互动画,真正要解决的不是“怎么把文件塞进页面”,而是如何稳定地把状态机输入接到 App 业务事件上。kongbai-rive 提供的正是这层原生运行时与业务调用之间的桥梁。

插件市场地址:
https://ext.dcloud.net.cn/plugin?id=28717

http://www.jsqmd.com/news/1232943/

相关文章:

  • 网安课程学习高频翻车点+精准纠错方案(技术向深度复盘)
  • C++类与对象避坑指南:默认成员函数与this指针实战解析
  • 手机号登录页:TextInput 类型 PhoneNumber + 验证码倒计时
  • 为什么你的AI项目总卡在上线前?资深CTO拆解4类典型失败案例,附完整CI/CD流水线配置模板(限前200份)
  • Claude Tag技术解析与开源实现对比
  • 2026年最新教程:建筑像素图怎么做成拼豆 亲测有效方法 - 软件测评小帮手
  • 打卡信奥刷题(3458)用C++实现信奥题 P10488 [BAPC 2006 资格赛] Booksort
  • 宁波经济纠纷:袁勤玮教你3步选对个人律师,经济纠纷/法律顾问/金融纠纷/合同纠纷/公司纠纷,经济纠纷律师找哪个 - 品牌推荐师
  • SpaceMind智能空间:Agent技术进化与场景化应用
  • DeepSeek LeetCode 3630. 划分数组得到最大异或运算和与运算之和 Java实现
  • YOLO部署中的后处理优化:NMS的GPU加速实现与Python层后处理的性能陷阱
  • Unity跨平台文件对话框实战:从原生API到CompactStandaloneFileBrowser
  • mdapy:高效分子动力学分析工具全解析
  • 使用libtcc实现C语言动态编译与JIT技术
  • 本地服务企业网站的内容工程:Next.js、Prisma、SQLite、Docker与GEO实践
  • C++智能仓储系统性能优化:从内存管理到并发重构的工程实践
  • AI时代如何捍卫创作者表达权?ArtArch的创新实践
  • TI eHRPWM寄存器深度解析:从时基到死区的电机控制实战配置
  • 2026实力之选:物流服务公司——高效运输、智能仓储与优质服务实力之选 - 甄选服务推荐
  • 硬件课程设计优化服务的商业价值与技术实践
  • 单片机芯片烧录全流程解析与实战指南
  • UE5光照与阴影实战指南:从核心原理到性能优化
  • 现代C++智能指针与RAII实战指南:从原理到应用场景
  • 3分钟解锁Wand高级功能:告别付费墙的终极方案
  • 多AI协作开发如何避免“自己写、自己审”:Codex、Claude Code与工程验收闭环
  • ISP色度处理与自动控制:从YUV采样到H3A统计的工程实践
  • JDK 8升级高版本JDK的完整指南与实战经验
  • HarmonyOS开发实战: EmailFeedbackPage 意见反馈 + AboutPage 关于页
  • RTX 5090显卡深度评测:DLSS 4与散热创新解析
  • 2026 年新发布:栾川热门的干法施工隔墙板厂商推荐,揭秘:墙体隔断的未来,干法施工板能帮你省下多少钱? - 行业鉴选官