猫史档案馆


【教程】如何在pro版地图编辑器中让实体丝滑的切换动作

用户:源码极客源码极客查看: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)
        }
    })
})

你学废了吗?


回复

上一页1 页 / 共 1下一页
源码极客源码极客

啊,幸好没吞排版()()()

点赞1


评论


飞阁_Pallad飞阁_Pallad

支持)

点赞0


评论


HackerHacker

嗯,学会了,下次用()

 

点赞0


评论


yee剑走天下yee剑走天下

有些许小弊端啊(就是你必须知道每个动画的播放时长(

点赞1


评论


greendougreendou

建议还是提前加载好要用到的动作片段,播放起来也是丝滑的,还不需要知道播放时长。

motion.loadByName([{
    iterations: 2,
    name: 'wave'
}]);

点赞1


评论


ZNS_哪吒ZNS_哪吒

d()

点赞0


评论


SCS_user_rbxaHQh5aOSCS_user_rbxaHQh5aO

示例出个视频吧

点赞0


评论


黄熙妍Lucya黄熙妍Lucya

emotion_编程猫_加油

点赞0


评论


AokenAoken

addd,

点赞0


评论