如何在Reworld里制作一个吹泡泡功能

256 阅读3分钟

功能效果展示

运行环境

Win7,Win8,Win10

Reworld版本 体验版

vc_redist.x64 运行环境

针对零基础读者的补充

下载安装 Reworld对应版本

Reworld官网链接:www.reworlder.com/

Reworld创作者之家论坛:bbs.reworlder.com

下载后安装后注册账号打开空地图

功能介绍

键位绑定服务可以用来获得玩家的键盘输入。使用键位绑定服务可以制作一些需要玩家按键操作的功能,如按键释放技能,按键打开界面等。

功能之间对比

与鼠标、界面按钮、触摸等输入都是客户端的交互手段,都可以实现人机交互。

功能用法限制

键位绑定只能用于pc端的游戏,开发时需注意之后是否需要适配不同的设备。

键位绑定可以在一个按键上绑定多个方法,根据需求确定如何使用,避免冲突。

功能的具体用法

这里使用一个吹泡泡功能作为用法演示。

思路分析

功能效果为玩家按一个按键,角色向前方吹出多个泡泡,泡泡逐渐飘动变大。按键使用键位绑定服务即可。角色向前方向,采用四元数计算方位;吹出泡泡用克隆;泡泡飘动变大,将重力取消给一个速度并逐渐增加尺寸即可。

功能搭建:

1、做一个泡泡。这里采用两个球形零件反向合并制作,材质选择玻璃,透明度略作调整。做好后,将泡泡缩小到合适大小,因为之后在功能中需要变大。

2、为了吐泡泡的效果,在素材库里找一个合适的动作,这里使用素材库中的喷吐动作,将动作命名为喷吐,放在工作区即可。

3、在工作区添加一个文件夹,命名为技能残留,用来存放克隆出的泡泡,便于计时清除:

4、这里只展示按键功能,并不做多人的适配,所以逻辑写在客户端。创建一个客户端脚本,编写代码如下:

math.randomseed(tostring(os.time()):reverse():sub(1, 7))
wait(2)
local player = Players:GetLocalPlayer()
local bubble = WorkSpace.泡泡--获得工作区创建好的泡泡
local speed = 2--速度参数
local bubbles = WorkSpace.技能残留--找到存放克隆泡泡的文件夹
local cd = 5--定义技能释放间隔
local isrelase = true --定义技能释放时间
local animation = WorkSpace.喷吐:Clone(player.Avatar)--给角色下添加喷吐的动作
animation.AnimationComplete:Connect(function()--角色吹泡泡时失控避免移动,所以结束后要恢复正常
        player.Avatar:ExitLostControl()--恢复正常
end)
function ReleaseAction()--定义释放泡泡的功能
    coroutine.start(function()
        if isrelase ==  true then
            isrelase = false
            local avatar = player.Avatar
            avatar:EnterLostControl(Enum.LostControlMode.Motion)--开始释放技能时让角色进入失控状态,避免一遍放技能一边移动的情况
            avatar.喷吐:PlayAnimation()    --播放喷吐动作
            local function BubbleCreat()--定义泡泡的出现逻辑方法
                coroutine.start(function()            
                    local ball = bubble:Clone()--克隆泡泡
                    --下面计算方位,原理是用四元数在角色向前的随机一个偏上的范围内计算一个方向,实现泡泡分散移动
                    local forw = Quaternion.Euler(avatar.Rotation.x+ math.random(-30,0) ,avatar.Rotation.y+ math.random(-30,30) ,avatar.Rotation.z+ math.random(-30,30))*Vector3.forward
                    local unit = Vector3.Normalize(forw)--单位向量
                    local deviation = unit*speed --移动速度
                    coroutine.wait(0.1)
                    tpos1 = avatar.Position + unit*0.8 + Vector3(0,0.8,0)--泡泡出现的位置使角色前方偏高一点位置
                    ball.Position = tpos1
                    ball.Velocity = deviation
                    ball.Parent = WorkSpace.技能残留
                end)
            end            
            coroutine.wait(0.3)
            local timer = RWTimer:Create(BubbleCreat, 0.2, 5)--使用计时器循环执行,实现出现多个泡泡
            timer:Start()--开始吹泡泡
            coroutine.wait(cd)
            isrelase = true
        end
    end)
end
local function ChangeScal(pao)--定义泡泡变大的方法
    for i = 0.15,1,0.5 do
        pao.Scale = Vector3(i,i,i)
        wait(0.2)
    end
end
bubbles.ChildAdded:Connect(function(ch)    --存放文件夹定义方法,在有泡泡被添加为文件夹的子级后一段时间消除
    ChangeScal(ch)--执行变大方法
    wait(3)
    ch:Destroy()--销毁
end)
ContextActionService.BindInput("PaoPao",ReleaseAction,Enum.KeyCode.Q)--绑定按键Q进行触发释放

5、开始测试