用户:
源码极客查看:2 回复:9 评论:2 创建时间:2023-07-14T11:12:18
废话不多说,我们直接进入正题
众所周知,在与实体交互的过程中,为了体验,一般都会设置招手动作,或是让站立状态下的实体播放说话动作
不过,只播放一次肯定是不够的,所以有些聪明的同学就会尝试在 motion.onFinish() 中添加 if 语句和 motion.play() 来让动作反复播放。
然而这样就迎来了一个小问题,每次播放后会有短暂的停顿,这样会非常玩家影响体验。
因此,我们需要用另一种方法——更改默认动画,再等待一段时间后,将默认动画复位
为了达成这个目的,我们需要先建一个对象,保存实体原先的默认动画,如下:
const motion_list = {
'小聪明': 'idle_2',
'大聪明': 'idle_6'
}
然后,我们定义一个函数,这个函数的运行逻辑是:先将默认动画切换至新动画,然后等待一段时间,再将默认动画调回去,具体如下:
function entity_motion(entity, name, cycles) {
entity.motion.setDefaultMotionByName(name)
console.log(motion_list[entity.id])
setTimeout(() => {
entity.motion.setDefaultMotionByName(motion_list[entity.id])
}, cycles * 1000)
}
这样我们就得到了一个可以应用到任何地方的函数,如果想使用它,只需要调用它就行,下面是一个实例:
const motion_list = {
'小聪明': 'idle_2',
'大聪明': 'idle_6'
}
function entity_motion(entity, name, cycles) {
entity.motion.setDefaultMotionByName(name)
console.log(motion_list[entity.id])
setTimeout(() => {
entity.motion.setDefaultMotionByName(motion_list[entity.id])
}, cycles * 1000)
}
world.querySelectorAll('.npc').forEach((npc) => {
npc.enableInteract = true
npc.interactRadius = 3
npc.interactHint = npc.id
npc.onInteract(() => {
if (npc.id == '大聪明'){
entity_motion(npc,'wave',2)
}else{
entity_motion(npc,'talk',2)
}
})
})
你学废了吗?
建议还是提前加载好要用到的动作片段,播放起来也是丝滑的,还不需要知道播放时长。
motion.loadByName([{
iterations: 2,
name: 'wave'
}]);
点赞1
评论