Avatar 是一个生成小型活体角色的技能。它把用户指定的物体绘制成一个扁平实心剪影,配两只胶囊形眼睛,再由一个动画循环驱动整个身体,使其产生瞥视、眨眼、呼吸、跟随指针和入睡等行为。
用途
用于把一个物体转化成具有生命感的小角色,通常在页面中作为装饰性元素或可交互玩具使用。资料明确角色为装饰性内容,其 SVG 应带 aria-hidden="true"。
主要能力
- 绘制剪影:把物体简化为单色实心形状,只保留能命名该物体的部分(如手柄、盖子、果柄),不加轮廓、阴影、嘴或鼻子。在较小网格(如 14×17 viewBox)上绘制并紧贴墨迹裁剪 viewBox;会独立运动的部件(如盖子)使用单独路径。颜色来自 --avatar-body 与 --avatar-eyes 两个变量,并需在明暗两种主题下检查。
- 眼睛投影:两只白色胶囊眼睛高度约为宽度的 2.2 倍,位置偏右上并呈反斜线倾斜,头部约倾斜 12°。眼睛放在面部背后的球体上,通过 yaw、pitch、roll 定位,在边缘附近变窄并随转向后方而淡出;drawEyes 在 face.js 中完成投影。眼睛需裁剪到剪影路径内,并放在移动身体的组内。
- 全身动画:视线在分层正弦波上漂移,每 1.5–4 秒瞥向新位置,大幅瞥视会附带眨眼;眨眼持续 180ms,前 45% 闭合,间隔 1.9–4.6 秒,18% 为连续两次。身体以 3.4 秒周期呼吸 1.2%,轻微漂浮并延迟一拍倾向视线方向;眼睛约 60ms 稳定,身体约 220ms 稳定。
- 情绪系统:情绪是一行数值,包含眼睛宽度、高度、倾斜、间距、开合度和视线偏移;情绪之间以指数缓出在约 90ms 内混合且不过冲。起始情绪包括 idle、attentive、excited、happy、sleepy、asleep,并可增加一两个仅该物体能做的动作(如盖子滞后于跳跃)。
- 页面反应:指针离开 6 秒后进入,眼睛用 1.1 秒绕背后旋转 360° 再跟随指针;指针停在主操作上时眼睛睁大且身体轻微弹跳;用户按下操作或角色时,角色跳跃 750ms 并带挤压拉伸,随后开心地眯眼;24 秒无操作后变困,30 秒时入睡并缓慢深呼吸,再以旋转醒来。跟随视线需将 yaw 限制在 ±45° 内,且忽略触摸指针的跟随。当角色是页面主要玩具时,还可按距离反应:640px 内好奇,260px 内警惕,100px 内退缩;戳一只眼睛时该眼闭上而另一只保持睁开。
- 单一循环:一个 requestAnimationFrame 循环推进 createAvatar 并通过 refs 写入 SVG 属性,步长上限 64ms;循环仅在角色处于屏幕内时运行,由 IntersectionObserver 控制启停。服务端用 restingEyes 渲染静止姿态,使首屏即有眼睛;在 prefers-reduced-motion: reduce 下保持静止姿态且不启动循环。
- 验证流程:通过浏览器 evaluate 调用运行 sheet.js,再调用 window.__avatarSheet.start({ selector }),用指针事件驱动各情绪(idle、enter、hover、press、leave),停止后对布局表截图;结果中的警告表示标签页隐藏或循环停滞。最终需在两种主题下以实际发布尺寸检查角色,然后调用 window.__avatarSheet.clear()。
使用方式
资料未提供具体安装或接入命令,也未提供 package 安装步骤,相关细节暂未提供。技能文本描述了基于 face.js、sheet.js 与 window.__avatarSheet 的工作流程,以及按 10fps 逐帧测量参考动画的做法;具体调用代码与部署配置暂未提供。
适用场景
适合在网页中创建装饰性或轻交互的拟人化物体角色,并需要严格还原参考动画时序与眼部细节的场景。不适用于界面动效与 300ms 预算相关的任务(归属 motion)、逐帧拆解参考动画(归属 deconstruct)、收集参考素材(归属 gather)、剪影变体探索(归属 prototype)、帧成本(归属 frames)以及打开结果(归属 verify)。
限制
角色必须始终运动;若身体不动而只有眼睛移动、眼睛超出剪影、在减少动态偏好下仍有动画,均属高严重度问题。眼睛在面上平面滑动、眨眼固定间隔、按情绪替换整张脸、循环在离屏时继续、缺少反应或仅用一张截图作证明属中严重度问题。舍入测量值、在路径中直接写 fill、静止姿态在 hydration 后弹出、角色没有专属动作属低严重度问题。资料还说明,单张截图无法展示运动,隐藏标签页会节流循环;睡眠需要 30 秒无输入,因此需单独采样。