在本地玩家身上执行 molang 表达式,并输出结果至聊天框。仅单人游戏有效。
/ysmclient molang execute <expr>
约 1350 字大约 5 分钟
2025-01-28
molang 是 mojang 官方为基岩版动画设计的一种极其简单的语言,我们可以通过 molang 实现各种复杂的动画。
自 1.2.0 起,我们支持几乎所有的官方 molang 特性(如下所示),你可以查看官方文档来学习使用它们:
为了更加清晰的说明什么是 molang,以及理解它的机制,我们从基岩版动画的机制说起。
基岩版动画的机制非常简单,在不同的时间点新建关键帧,设定某个组件的位置/旋转/缩放。当开始播放动画时,程序就会自动计算出补间动画,使组件从某个地方移动/旋转/缩放到另一个地方,从而做出动画的效果。
我们给每个关键帧设置的是一个具体的数字,决定了播放到此关键帧时,组件所处的位置/旋转的角度/缩放的大小
但是一些特殊情况下,这个数字不一定是固定的。比如我们期望玩家手持物品时摆动角度为 30 度,但空手时摆动角度为 60 度,这时我们就可以使用 molang 表达式了。
一个常用的动画设计是显示/隐藏模型,比如我们期望在玩家穿戴头盔时,显示头盔组件。我们可以使用缩放功能来隐藏组件,当组件的 X Y Z 缩放均为 0 时,该组件就被隐藏了,所以我们可以在 BlockBench 里面这么写:
这里的 ysm.has_helmet
就是一个 molang 参数,它会在玩家穿戴头盔时返回数字 1,而在没有穿戴头盔时返回数字 0,正好做到了我们想要的隐藏/显示功能。
一直以来,长发模型是一个极为头疼的问题。当玩家抬头时,长长的头发就会随头转动,直戳戳的穿入玩家的身体内。我们也可以用 molang 来巧妙的解决这个问题。思路如下:
那么我们就可以这样书写 molang 参数:
我们来逐条介绍这个参数的意思:
这是一个条件式的写法,它的格式是这样写的 判断条件 ? 如果符合时返回的结果 : 如果不符时返回的结果
(ysm.head_pitch > 0) ? -ysm.head_pitch : 0
(ysm.head_pitch > 0)
:判断条件。玩家俯仰的角度是 -90 度到 90 度,这里判断玩家俯仰的角度是否大于 0 度,用括号括更加直观。
-ysm.head_pitch
:当玩家俯仰角度大于 0 时(也就是抬头时),我们特意取反,把头发旋转角度抵消回去。
0
:当玩家俯仰角度小于 0 时(也就是俯视时),我们将其变成 0,这样头发就会随头旋转。
在本地玩家身上执行 molang 表达式,并输出结果至聊天框。仅单人游戏有效。
/ysmclient molang execute <expr>
向自定义调试屏幕添加 molang 表达式,会实时计算和更新;
pre
在动画更新前执行,post
在动画更新后执行。2.2.2
及之前的版本需要按两次 Alt
+ B
才能进入自定义调试屏幕2.3.0
及往后的版本只需要按一次 Alt
+ B
就能进入自定义调试屏幕/ysmclient molang watch add [pre|post] <name> <expr>
管理自定义调试屏幕上的条目。
/ysmclient molang watch remove <name>
/ysmclient molang watch clear
在指定玩家身上执行 molang;多人游戏下可用,需要管理员权限。不会输出执行结果。
/ysm molang execute <player> <expr>
roaming
变量以 v.roaming.xxx
格式书写的变量(不能简写为 v.r.xxx
)可以在切换维度、重生、退出重进后恢复。也能在玩家之间同步会,并且会跟随服务端的 cap 写入存档。
但是此变量有一些限制:
roaming
变量,所有模型共享这 16 个变量float
类型