实体动画 - WhiseNT/EntityJS_cnWiki GitHub Wiki
要将动画绑定在实体上,需要一个动画控制器.本节将介绍如何添加一个基本的控制器用于管理"wyrm"实体的动画
StartupEvents.registry('entity_type', event => {
event.create('wyrm', 'entityjs:animal')
.addAnimationController('exampleController', 1, event => {
if (event.entity.hurtTime > 0) {
event.thenPlayAndHold('spawn');
} else {
event.thenLoop('idle');
}
return true;
});
});
- 方法
addAnimationController
将名为exampleController
的新控制器添加到了"wyrm"- 这个控制器的
translationTicksLength
为1 .- 当实体受到伤害时,会播放"spawn"动画,而"idle"动画则无限循环。
Triggerable animaitons会在特定条件或者事件下播放,以下是如何为实体"wyrm"设置Triggerable animations
StartupEvents.registry('entity_type', event => {
event.create('wyrm', 'entityjs:animal')
.addAnimationController('exampleController1', 5, event => {
event.addTriggerableAnimation('spawn', 'spawning', 'default');
if (event.isMoving()) {
event.thenPlay("idle");
}
return true;
})
.onLivingJump(entity => {
entity.triggerAnimation('exampleController1', 'spawning');
});
});
- 添加了一个名为 "spawn" 的可触发动画,其循环类型为 "default".
- "idle" 会在实体移动的时候播放
- "spawning"动画将会在实体跳跃时触发
使用一个名为
addTriggerableAnimationController
的专用方法来添加可触发动画,这不需要额外的逻辑即可管理动画.
StartupEvents.registry('entity_type', event => {
event.create('wyrm', 'entityjs:animal')
.addTriggerableAnimationController('exampleController', 5, 'spawn', 'spawning', 'play_once');
});
- 这将添加一个名为“exampleController”的动画控制器,其转换持续时间为5.
- 添加了一个名为"spawn"的可触发动画,其循环类型为"play_once".
The
triggerAnimation
可以直接在KubeJS事件中的被实体调用,例如EntityEvents.hurt
.
EntityEvents.hurt('kubejs:wyrm', event => {
event.entity.triggerAnimation('exampleController', 'spawning');
});
- 使用了
triggerAnimation
方法,这让实体受伤时触发"spawning"动画.
确保Geckolib实体动画、模型和贴图的文件结构如下:
Animations | assets>modname>animations>entity>mobname.animation.json |
Geo Model | assets>modname>geo>entity>mobname.geo.json |
Texture | assets>modname>textures>entity>mobname.png |