
Anima - 用于冒险地图和服务器的实体动画工具
用方块创建门、平台、电梯和其他移动物体——然后通过触发效果直观地控制它们!与预制体配合使用也很不错。
这是什么?
Anima 是一个用于 Hytale 冒险地图和服务器的实体操控与动画框架。它允许地图制作者将实体、展示实体和选定的方块转化为可复用的动画实体组,并通过指令和触发效果进行控制。
它的主要用途是简化自动动画门、桥梁、电梯、平台、可拾取物品的传送、谜题等众多内容的创建流程。 它还能与预制件配合使用,允许实例化可移动元素,我还添加了一个触发效果用于清理它们。
我编写它是为了我自己的私人服务器,但我非常乐意与大家分享这个模组。
枯燥的部分
基本上,我将详细解释这个模组的工作原理。
Anima 实体
Anima 通过 anima:entity 组件在实体上存储动画数据。该组件追踪:
- 一个原点姿势。
- 命名的关键帧。
- 最后应用的帧。
- 供指令和触发区域使用的公开句柄。
- 用于分组移动的父级和子级实体 UUID。
- 活动中的动画和排队中的动画。
- 排队的动画完成后是否循环。
Anima 实体被标记为可预制复制,因此它们可以在建造者工作流和预制件放置中存续。
原点与关键帧
原点是 Anima 实体的基础姿势。它以世界空间存储位置、旋转和缩放。
保存的关键帧存储相对于原点的运动。在运行时,Anima 会将这些相对关键帧解析回世界空间目标。这使得实体组可以作为预制件移动或放置,同时保持其动画偏移不变。
保留的关键帧名称有:
origin:返回捕获的原点姿势。next:推进到下一个保存的关键帧,在最后一个关键帧后回绕到origin。
父子组
Anima 可以将实体分组,使一个父级驱动多个子级的移动。当父级动画时,每个子级相对于父级原点保持其偏移、旋转和缩放。
如果使用工具手动移动了分组的子实体,Anima 会更新该子实体的存储相对偏移,从而保留编辑结果。
Anima 控制器工具
此物品出现在建造者工具标签页中。当你手持它时,你将看到所有 Anima 实体及附近的关键帧名称。如果实体有句柄,你会在关键帧名称旁的括号中看到相关句柄名称。我建议避免在关键帧名称中使用空格,以免混淆。
主要操作:
- 将目标 Anima 实体与 5 格范围内最近的空闲 Anima 实体分组。
- 如果目标已被分组,则将其从父级分离并刷新其原点,使其重新变为独立实体。
次要操作 / 使用:
- 打开目标实体的 Anima 实体编辑器。
- 如果目标实体是子实体,编辑器将为根父组打开。
手持 Anima 工具时,调试视觉效果会渲染在附近的 Anima 实体周围。视觉效果显示父级和子级的边界、原点/关键帧标记、关键帧标签,以及 48 格半径内关键帧点之间的连线。
指令
根指令是 /anima。
即时动画指令:
/anima easein <entity_anima_handle> <keyframe> <duration>
/anima easeout <entity_anima_handle> <keyframe> <duration>
/anima cubic <entity_anima_handle> <keyframe> <duration>
/anima linear <entity_anima_handle> <keyframe> <duration>
/anima bounce <entity_anima_handle> <keyframe> <duration>
/anima snap <entity_anima_handle> <keyframe> <duration>
这些指令会查找所有具有匹配句柄的无父级 Anima 实体,并开始向请求的关键帧播放动画。
排队动画指令:
/anima queue easein <entity_anima_handle> <keyframe> <duration>
/anima queue easeout <entity_anima_handle> <keyframe> <duration>
/anima queue cubic <entity_anima_handle> <keyframe> <duration>
/anima queue linear <entity_anima_handle> <keyframe> <duration>
/anima queue bounce <entity_anima_handle> <keyframe> <duration>
/anima queue snap <entity_anima_handle> <keyframe> <duration>
/anima queue loop <entity_anima_handle> <true|false>
/anima queue clear <entity_anima_handle>
排队动画在当前动画之后运行。如果启用了循环,队列会轮转并重复。如果禁用了循环,排队的条目将使用一次后被移除。
方块转换指令
/anima fromblocks
这将把当前建造者选区转换为分组的 Anima 方块实体。每个选定的方块都会在方块中心成为一个方块实体,离玩家最近的方块成为父级,所有其他转换的方块成为子级,原始源方块会被清除。这意味着——没错!多方块桥梁、门和平台无需太多设置即可完美同步移动!不过我不建议将其用于打开的活板门,因为命中框无法对齐,而且我也不太清楚这个问题有什么可靠的修复方法。以这种方式转换的方块遗憾地无法保留其原有功能,但理论上其他插件可以解决这个问题。
缓动模式
Anima 支持以下缓动模式:
linear:匀速。easein:缓慢启动并加速。easeout:快速启动并在接近目标时减速。cubic:平滑步进插值,启动和结束时都有缓动。bounce:在接近结束时添加弹跳效果。snap:在持续时间内保持起始姿势,然后在结束时突然切换到目标。
触发区域效果
Anima 注册了三种触发区域效果。
Anima 动画
在 Anima 实体上运行或排队播放动画。
字段:
Handle:针对特定句柄。留空则针对所有 Anima 实体。Ease:插值模式。Keyframe:目标关键帧名称。NextKeyframe:忽略Keyframe,推进到下一个保存的关键帧。Duration:动画时长(秒)。Queue:将动画排队而不是立即开始。LoopQueue:启用排队时,循环播放排队动画。OnlyWithinVolume:仅影响当前位于触发区域内的 Anima 实体。如果使用此选项来影响区域内的所有实体,可以将Handle留空!
当 Queue 为 false 时,该效果会清除现有队列并立即开始请求的动画。
清除 Anima 实体
从实体上移除 Anima 组件。
字段:
Handle:清除特定句柄。留空则清除所有 Anima 实体。OnlyWithinVolume:仅清除当前位于触发区域内的实体。
清除展示实体
移除类似展示功能的非玩家实体。如果实体具有模型、展示名称或边界框组件,则被视为类似展示功能的实体。
字段:
OnlyWithinVolume:仅清除当前位于触发区域内的类似展示功能的实体。
好的,那么如何使用它
- 放置或创建需要动画的实体。
- 使用 Anima 控制器使每个目标成为 Anima 实体并分组相关实体。如果你使用了
/anima fromblocks,可以跳过此步骤。 - 打开编辑器,分配句柄,并且(如果你大幅移动了实体)捕获原点。
- 将实体或组移动到每个所需姿势并保存命名的关键帧。
- 在游玩过程中使用
/anima指令或触发区域效果来运行动画。 - 使用排队动画和
next关键帧来实现循环、周期性动作、门、电梯、环境运动和分阶段效果。
如果你复制 anima 实体或在预制件中使用它,请确保在复制/保存前将其置于原点位置,因为它的位置将在粘贴时成为其新的原点!这就是你可以在预制件中使用实体的方法。
最后,AI 使用声明
核心系统和组件由我编写。也就是说,是我亲手在 IDEA 中敲的代码。 交互、UI 和触发效果的部分代码由 AI 完成。 之后我亲手修复了其中的错误和明显的问题。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。