Bedrock Wiki
  • QQ
  • 原站
新手入门指南
  • Guide
    • 1. 简介
      指南
    • 2. 附加组件详解
    • 3. 软件与准备工作
    • 4. 项目设置
    • 5. 创建自定义物品
    • 6. 创建自定义实体
    • 7. Blockbench:建模、贴图与动画制作
    • 8. 添加战利品表、生成规则与合成配方
  • Extra
    • a. 理解JSON
    • b. 下载示例包
    • c. 故障排除
      帮助
    • d. 高级清单文件指南
    • e. 格式版本
    • f. Android 项目设置
JSON UI
  • General
    • JSON UI 入门指南
      指南
    • 最佳实践
      指南
  • Tutorials
    • Aseprite 动画
    • 保留标题文本
      中级
    • 修改服务器表单
      中级
    • 字符串与数字转换
      中级
    • 按钮与开关
      新手
    • 添加HUD界面元素
      新手
  • Documentation
    • JSON UI 文档
Meta
  • Style Guide
  • 使用JSON模式(Schemas)
  • 实用链接
  • 版本控制
  • 附加包性能优化
  • Q&A
    • GameTest 问答集 2021/08/06
    • 世界生成问答 2024/11/15
    • 延迟渲染技术预览问答 2024/02/23
    • 方块与物品问答 2024/08/30
    • 脚本与编辑器问答 2023/09/22
NBT
  • General
    • .mcstructure
  • Tutorials
    • 扩展结构限制
      简单
    • 教育版中的实验功能
      简单
  • NBT in Depth
    • NBT 库列表
      专家
    • NBT读取示例
      专家
    • 关于NBT(命名二进制标签)
      专家
世界生成
  • General
    • 世界生成入门
      指南
      实验性
    • 特性类型
      实验性
    • 生物群系
      指南
      实验性
  • Tutorials
    • 特征(Feature)的方块条件
      实验性
    • 生成地表区块
      实验性
    • 生成自定义矿石
      实验性
    • 生成自定义结构
      实验性
    • 高度图噪声地形
      实验性
  • Documentation
    • 生物群系标签
动画控制器
  • 动画控制器入门指南
    指南
  • 实体命令
    中级
  • AFK检测器
  • 将Molang变量转换为计分板数值
  • 死亡指令
  • 重生指令
命令
  • General
    • 命令方块入门指南
    • 函数
    • NBT 命令
    • 坐标系
    • 方块状态
    • 理解目标选择器
    • 记分板操作
  • Commands
    • Execute
      简单
    • Playanimation
    • 伤害
    • 播放音效
  • On Event Systems
    • 玩家首次加入时
    • On Player Join
    • 玩家离开时触发
    • 玩家死亡事件
    • 玩家重生事件系统
    • 首次加载世界时
  • Scoreboard Systems
    • 实体计数器
    • 计分板计时器
    • 比较与获取分数
  • Techniques
    • 执行逻辑门
    • MBE - Max的方块实体
    • FMBE - 创建显示实体的新方法
    • 视线检测
    • 移动状态检测
    • 轨道摄像机
  • Useful Creations
    • 多人位置重排系统
      函数
    • 自定义合成台
      简单
实体
  • General
    • Intro to Entities BP
      指南
      新手
    • 实体资源包入门
      指南
      新手
    • 实体问题排查指南
      帮助
    • NPC对话系统
      中级
    • 实体事件
      新手
    • 实体属性
    • 渲染控制器
      新手
    • 生成规则
  • Tutorials
    • 任意坐标系间的坐标转换(世界、实体、骨骼)
      中级
    • 创建船只
      中级
    • 实体手持物品
      中级
    • 实体攻击机制
      中级
    • 实体睡眠机制
      中级
    • 实体碰撞体
      中级
    • 实体移动
    • 实体计时器
      中级
    • 无敌实体
      新手
    • 村庄机制实现指南
    • 检测其他实体
      中级
    • 生成已驯服的实体
      脚本
      中级
    • 视线检测实体
      中级
    • 禁用队友伤害
      中级
    • 范围效果云入门指南
      中级
    • 虚拟实体
      新手
    • 飞行实体控制
      中级
  • Documentation
    • Vanilla Usage Spawn Rules
    • 原版使用组件
    • 抛射物
    • 虚拟组件
    • 运行时标识符
    • 非生物实体运行时标识符
战利品、配方与交易
  • General
    • 交易行为
  • Documentation
    • 战利品表
    • 交易表
    • 合成配方
    • 物品函数
  • Tutorials
    • 随机化结构战利品
      简单
文档
  • Shared Constructs
  • Molang 查询详解
  • Vanilla Materials
    专家
  • 声音定义
  • 文件类型
  • 材质配置文件说明
    专家
  • 菜单分类
  • 资源包文件夹结构
  • 雾效ID
  • 高级Molang指南
方块
  • General
    • 方块入门指南
      指南
      新手
    • 方块组件
    • Block Tags
    • 方块状态
    • Block Traits
    • 方块排列组合
    • 方块事件
      脚本
    • 方块事件迁移指南
      帮助
    • 方块物品化
      中级
    • 方块问题排查指南
      帮助
  • Visuals
    • 方块剔除
      中级
    • 方块模型
      指南
      新手
      简单
    • 方块着色
      简单
    • 方块纹理动画
      中级
    • 方块纹理变体
      中级
  • Tutorials
    • Precise Interaction
      专家
      脚本
    • Precise Rotation
      专家
      脚本
    • 伪方块
      中级
    • 可旋转方块
    • 应用持续效果
      简单
      脚本
    • 矿石战利品表
      简单
      脚本
    • 规避状态值限制
      专家
  • Vanilla Re-Creations
    • 自定义作物
      中级
      脚本
    • 自定义活板门
      中级
      脚本
    • 自定义玻璃
      新手
      简单
      已弃用
    • 自定义釉面陶瓦
      简单
  • Documentation
    • 原版方块模型
      新手
    • 方块形状
    • 方块格式历史
    • 方块音效
服务器
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet 协议
    • RakNet 协议
概念
  • contents.json
  • Molang
    中级
  • Rawtext
  • textures_list.json
  • 命名空间
  • 子包
  • 文本与本地化
  • 着色器
  • 纹理图集
    中级
  • 表情符号与特殊字符
  • 覆盖资源
    中级
  • 音效
    中级
物品
  • General
    • 物品入门指南
      指南
      新手
    • 物品组件
    • 物品标签
    • 物品事件
      脚本
    • Item Event Migration
      帮助
    • 物品问题排查指南
      帮助
  • Tutorials
    • Custom Pottery Sherds
    • 可投掷物品
      中级
    • 生成物品
      中级
    • 自定义武器
      简单
    • 自定义盔甲
    • 自定义食物
      简单
      脚本
    • 通过装备物品执行命令
      实验性
      中级
    • 高分辨率物品
  • Documentation
    • 附魔
    • Numerical Item IDs
    • Vanilla Usage Components
    • 原版物品标识符
      已弃用
    • 可附着物
      新手
    • 物品格式历史记录
视觉效果
  • General
    • 实体视觉效果简介
      指南
    • 基岩版建模指南
    • 动画中的特效
    • 基于数学的动画
      中级
    • 材质
      专家
    • 材质创作
      专家
    • 皮肤包制作指南
    • 自定义死亡动画
      中级
  • Tutorials
    • Glowing Entity Texture
    • 受伤动画
      中级
    • 实体纹理动画
      中级
    • 栓绳位置调整
      简单
    • 玩家几何模型
      新手
    • 移除实体阴影
      中级
    • 重绘生成蛋纹理
      新手
  • Ideas
    • 结构展示技巧
粒子效果
  • General
    • 粒子效果入门
      指南
  • Tutorials
    • 禁用粒子效果
      新手
  • Documentation
    • 原版粒子效果
脚本编写
  • General
    • 脚本编程入门
    • 什么是Script API?
    • API 模块
  • Tutorials
    • GameTests
      实验性
    • 简易聊天命令
      实验性
    • 脚本核心功能
    • 脚本表单
      实验性
    • 脚本请求API
      实验性
    • 阻止方块放置
  • Documentation
    • JavaScript 问题排查指南
    • Script Resources
    • Script Watchdog
      实验性
    • TypeScript
    • 引擎环境
虚拟现实
  • General
    • 启用VR模式
      指南
    • 配置资源包
      专家
  • Tutorials
    • 编辑你的第一个模型
      专家

Playanimation

Playanimation
  • 简介
  • 语法
  • 动画控制器
    • 示例
    • 存储与移除
  • 叠加动画
    • 示例
    • 移除叠加动画
    • 潜在问题
    • 错误用法示例
  • 自定义动画
    • 示例:编辑鹦鹉的动画
    • 限制
    • 查看原版动画
    • Molang基础
  • 实用的Playanimation命令列表
    • 身体动画
    • 根动画
    • 头部动画

简介 ​

源自日本指令师交流Discord

在基岩版中,/playanimation命令可以让实体播放动画。你可以叠加多个动画,甚至自定义它们。

语法 ​

/playanimation <实体: 目标> <动画: 字符串> [下一状态: 字符串] [过渡时间: 浮点数] [停止条件: 字符串] [控制器: 字符串]

定义:

<> 尖括号表示该变量是必填项。
[] 方括号表示该变量是可选项。

  • <实体: 目标> 指定要播放动画的实体。
  • <动画: 字符串> 指定要播放的动画。
  • [下一状态: 字符串] 指定当前动画的结束条件满足时要过渡到的动画。
  • [过渡时间: 浮点数] 设置动画之间的过渡时间。
  • [停止条件: 字符串] 定义结束条件。必须使用Molang编写。
  • [控制器: 字符串] 访问并定义动画控制器。

示例:

yaml
/playanimation @a animation.player.riding.legs none 0 "query.is_moving"
1

这条命令为所有玩家播放animation.player.riding.legs动画(表示玩家坐下时的腿部动作)。当query.is_moving(表示移动)为真时,会在0秒内过渡到none动画。

由于none动画不存在,实体会回到闲置状态,从而取消动画。

如果动画属于实体本身,可以省略animation.entity.部分。
例如,要为玩家播放animation.player.attack.positions,只需输入attack.positions,而不是完整的animation.player.attack.positions。

动画控制器 ​

动画控制器决定在特定条件下播放哪些动画。
如果访问现有的动画控制器,它会被覆盖。

示例 ​

yaml
/playanimation @e[type=allay] animation.player.attack.positions none "1" controller.animation.allay.dancing
1

对Allay执行此命令会阻止它在播放音乐时跳舞。
这是因为原始的动画控制器(使它在音乐播放时跳舞)被替换为一个不做任何操作的新控制器。
(这里可以选择任何动画,但attack.positions被选中是因为它没有效果。)

如果指定了一个不存在的动画控制器,它会被注册为新控制器:

yaml
/playanimation @a animation.ender_dragon.neck_head_movement animation.piglin.celebrate_hunt_special 0 "v.head_position_y=0;v.head_rotation_y=q.life_time*1000;return !q.is_sneaking;" wiki:head
1
yaml
/playanimation @a animation.piglin.celebrate_hunt_special animation.ender_dragon.neck_head_movement 0 "v.head_position_y=0;v.head_rotation_y=q.target_y_rotation;return q.is_sneaking;" wiki:dance
1

这些命令注册了一个新的动画控制器,它会:

  • 在玩家未潜行时旋转头部。
  • 在玩家潜行时播放跳舞动画。

注意:

如果重复执行,动画可能会闪烁,因为动画过渡时间不匹配(需要1帧的延迟)。

左侧的动画在条件满足时会过渡到右侧的动画。这种过渡可以扩展到更多动画。但过渡仅在同一动画控制器内有效。

例如,如果上述命令正在运行,而另一个动画控制器(如wiki:head.2等)播放animation.piglin.celebrate_hunt_special,它不会影响过渡到animation.ender_dragon.neck_head_movement。

存储与移除 ​

  • 动画控制器存储在客户端实体上。
  • 它们无法通过命令移除。
  • 自定义动画控制器在退出世界或将受影响的实体传送至远处时会重置。

叠加动画 ​

每个动画控制器一次只能播放一个动画。通过使用多个动画控制器,可以同时播放多个动画。

示例 ​

yaml
/playanimation @a animation.player.riding.legs none 0 "0" wiki:rideleg
1

这条命令将骑行腿部动画与猪灵跳舞动画叠加:

yaml
/playanimation @a animation.piglin.celebrate_hunt_special none 0 "0" wiki:dance
1

这里,wiki:rideleg和wiki:dance用作控制器名称,但任何名称如"a"或"b"也是有效的。不过,不能为多个控制器使用相同的名称(例如都使用"a")。

移除叠加动画 ​

要移除上述动画,必须覆盖动画控制器状态:

yaml
/playanimation @a animation.player.attack.positions none 0 "1" wiki:rideleg
1
yaml
/playanimation @a animation.player.attack.positions none 0 "1" wiki:dance
1
  1. 播放**animation.player.attack.positions**动画(该动画无效果)。
  2. 条件1(真)强制过渡到none。
  3. 由于none不存在,动画被取消。

为什么不直接使用none作为动画?

  • 可以过渡到none,但不能直接将none设置为动画。
  • 动画名称必须有效,否则命令可能无法正常工作。

潜在问题 ​

  • 此方法添加了一条从attack.positions过渡到none的规则。
  • 如果任何其他动画已经过渡到attack.positions,可能会出现意外行为。

错误用法示例 ​

yaml
/playanimation @a animation.ender_dragon.neck_head_movement attack.positions 0 "v.head_position_y=0;v.head_rotation_y=q.life_time*1000;return !q.is_sneaking;" wiki:head
1
yaml
/playanimation @a attack.positions animation.ender_dragon.neck_head_movement 0 "v.head_position_y=0;v.head_rotation_y=q.target_y_rotation;return q.is_sneaking;" wiki:head
1

这会导致头部仅在潜行时旋转。但如果随后执行:

yaml
playanimation @e[tag=main] attack.positions none 0 "1" wiki:head
1
  • 当你停止潜行时,动画会过渡到attack.positions。
  • 由于attack.positions正在播放,它会过渡到none。
  • attack.positions不再活跃,因此潜行不再触发animation.ender_dragon.neck_head_movement。

解决方法:

不要过渡到attack.positions,而是过渡到另一个无效果的动画。

自定义动画 ​

  • 你可以通过修改变量来自定义动画。
  • 某些动画包含由variable控制的角度和位置等元素。
  • Minecraft使用自己的脚本语言Molang来定义停止条件——但你也可以用Molang动态改变variable的值。

示例:编辑鹦鹉的动画 ​

这是animation.parrot.moving JSON文件的一部分:

json
"animation.parrot.moving": {
    "loop": true,
    "bones": {
        "body": {
            "position": [ 0.0, "variable.wing_flap * 0.3", 0.0 ]
        },
        "tail": {
            "rotation": [ "60.0 + math.cos(query.anim_time * 38.17) * 17.0 - this", 0.0, 0.0 ]
        },
        "wing0": {
            "rotation": [ 0.0, 0.0, "-5.0 - variable.wing_flap * 57.3" ]
        },
        "wing1": {
            "rotation": [ 0.0, 0.0, "5.0 + variable.wing_flap * 57.3" ]
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • 骨骼:"body"、"tail"、"wing0"和"wing1"是不同的身体部位。
  • body的y位置由**variable.wing_flap**控制。

现在,用以下命令修改鹦鹉的身体位置:

yaml
/playanimation @a animation.parrot.moving none 0 "variable.wing_flap=10;" wiki:body.ypos
1

这会将鹦鹉的身体向上移动。

  • 设置wing_flap=30会使其移动得更高。
  • 设置wing_flap=-10会使其向下移动。

简化语法:

可以将**variable简写为v**:

yaml
/playanimation @a animation.parrot.moving none 0 "v.wing_flap=10;" wiki:body_ypos
1

variable.wing_flap和v.wing_flap是相同的。

限制 ​

  1. 只有使用variable的动画才能自定义。

    • 如果动画没有使用variable,则无法修改它。
  2. 默认实体变量每次执行时都会重置。

    • 如果循环执行命令:
    yaml
    /playanimation @a animation.player.attack.rotations none 0 "v.attack_body_rot_y=90;" wiki:body.yrot
    1
    • 会出现闪烁,因为v.attack_body_rot_y每帧重置后才被重新赋值。

解决闪烁问题:

  • 在命令之间添加延迟。
  • 使用标签或条件触发一次。

查看原版动画 ​

你可以在这里查看Minecraft原版动画文件:
基岩版示例 - 动画文件

Molang基础 ​

Molang是Minecraft的脚本语言,用于控制动画、条件和表达式。

  • variable可以简写为**v**
  • query可以简写为**q**

Molang参考:

详细指南请访问:基岩版开发文档 - Molang

实用的Playanimation命令列表 ​

  • 这些命令可以应用于玩家和大多数其他实体。
  • 示例中所有变量初始化为零,但可以根据需要调整。
  • 部分命令使用多个变量。你可以根据需要添加或移除变量。
  • 控制器名称(如wiki:body_yrot)允许在不覆盖先前动画的情况下叠加动画。
    • 你可以自由更改命名空间(wiki)或控制器名称。

身体动画 ​

  1. 沿Y轴旋转实体身体(不包括四肢和头部):

    yaml
    /playanimation @a animation.player.attack.rotations none 0 "v.attack_body_rot_y=0;" wiki:body_yrot
    1
  2. 沿Z轴旋转实体身体(不包括四肢和头部):

    yaml
    /playanimation @a animation.wolf.shaking none 0 "v.body_rot_z=0;" wiki:body_zrot
    1

根动画 ​

  1. 沿X轴和Z轴旋转整个实体:

    yaml
    /playanimation @a animation.ender_dragon.setup none 0 "v.clamped_pitch=0;v.clamped_roll=0;" wiki:root_xrot_yrot
    1
    • clamped_pitch — 沿X轴旋转整个实体。
    • clamped_roll — 沿Z轴旋转整个实体。
  2. 沿X、Y、Z轴偏移整个实体的位置:

    yaml
    /playanimation @a animation.minecart.move none 0 "v.rail_offset.x=0;v.rail_offset.y=0;v.rail_offset.z=0;" wiki:root_pos
    1
    • rail_offset.x — 沿X轴偏移整个实体。
    • rail_offset.y — 沿Y轴偏移整个实体。
    • rail_offset.z — 沿Z轴偏移整个实体。

头部动画 ​

  1. 偏移或旋转实体的头部:

    yaml
    /playanimation @a animation.ender_dragon.neck_head_movement none 0 "v.head_position_x=0;v.head_position_y=0;v.head_position_z=0;v.head_rotation_x=0;v.head_rotation_y=0;v.head_rotation_z=0;" wiki:head_pos_rot
    1
    • head_position_x — 沿X轴偏移头部。
    • head_position_y — 沿Y轴偏移头部。
    • head_position_z — 沿Z轴偏移头部。
    • head_rotation_x — 沿X轴旋转头部。
    • head_rotation_y — 沿Y轴旋转头部。
    • head_rotation_z — 沿Z轴旋转头部。

(推荐)下一篇:FMBE - 创建显示实体的新方法

贡献者

编辑 Playanimation

Bedrock Wiki by Bedrock OSS ,Translate by 8aka-Team

"Minecraft"是Mojang AB的注册商标。

Bedrock OSS、Bedrock Wiki以及 bedrock.dev 与Microsoft及Mojang AB不存在任何隶属关系。

  • 隐私政策
  • 加入QQ社区
  • 参与贡献指南
  • 访问代码仓库