音效--01

2019-10-16  本文已影响0人  blinkbane

制作(略)制作方法参考 - mod制作教程--添加音效
、开关、 音量调节

1.开始播放

通过放入背包来开始

监听事件 onputininventory
inst:ListenForEvent("onputininventory", onputininv)

函数 onputininv
local function onputininv( inst )

    inst.SoundEmitter:PlaySound("路径","为音效命名")

    inst.SoundEmitter:SetVolume("音效名", 音量大小)   --%比调节

end

2.停止播放

取出预制物/丢到地上来停止

使用成分inventoryitem:SetOnDroppedFn()
inst.components.inventoryitem:SetOnDroppedFn(ondropped)

函数 ondropped
local function ondropped( inst )

    inst.SoundEmitter:KillSound("音效名")

end

3.音量调节

通过inspect预制物来单向循环调节音量

成分inspectable.getstatus = deltavolume
在这之前我们需要给音量大小声明一个变量
inst.delvol = 0.3 --这里是表示初始30%音量

函数deltavolume

(这里我设置了4个级别0.3,0.2,0.1,0 单向递减循环调节)

local function deltavolume( inst )
 
        if inst.delvol > 0 then
            inst.delvol = inst.delvol - 0.1                   --每次检视-10%音量
            if inst.delvol >0.09 then
                inst.components.talker:Say("BGM Off\n\n\n  ") --为0时 显示音效关闭
            else
                local mathdelvol = inst.delvol*10  --下面一行里不能做数学运算 所以这里重新声明一个变量来获得inst.delvol的小数部分
                inst.components.talker:Say("BGM Volume:"..mathdelvol.."/3\n\n\n  ")  --字符串和变量可以用 .. 来连接
            end
        else
            inst.delvol = 0.3
            inst.components.talker:Say("BGM Volume:3/3\n\n\n  ")
        end
    inst.SoundEmitter:SetVolume("音效名", inst.delvol) 
end

4.最后我们需要实现每次退出进入时 储存读取 音量大小 变量

inst.OnSave = onsave
inst.OnPreLoad = onpreload

local function onpreload(inst, data)
    if data then
         if data.delvol then
            inst.delvol = data.delvol
         end
    end
end

local function onsave(inst, data)
     data.delvol = inst.delvol
end

5.预制物代码部分总览

require "prefabutil"
local assets =
{
    Asset("ANIM", "anim/预制物名.zip"),
    Asset("ATLAS", "images/inventoryimages/预制物名.xml"),
    Asset("IMAGE", "images/inventoryimages/预制物名.tex"),
}

local prefabs =
{
   
}    

local function onputininv( inst )
    inst.SoundEmitter:PlaySound("播放路径","新建音效名")
    inst.SoundEmitter:SetVolume("新建音效名", inst.delvol)
end

local function ondropped( inst )
    inst.SoundEmitter:KillSound("新建音效名")
end

local function deltavolume( inst )

    inst.components.talker.fontsize = 30       --为音量提示文字设置大小 字体 颜色
    inst.components.talker.font = BODYTEXTFONT
    inst.components.talker.colour = Vector3(.1,.1,.3,1)

        if inst.delvol > 0 then
            inst.delvol = inst.delvol - 0.1
            if inst.delvol == 0 then
                inst.components.talker:Say("BGM Off\n\n\n  ")
            else
                local mathdelvol = inst.delvol*10
                inst.components.talker:Say("BGM Volume:"..mathdelvol.."/3\n\n\n  ")
            end
        else
            inst.delvol = 0.3
            inst.components.talker:Say("BGM Volume:3/3\n\n\n  ")
        end
    inst.SoundEmitter:SetVolume("新建音效名", inst.delvol) 
end

local function onpreload(inst, data)
    if data then
         if data.delvol then
            inst.delvol = data.delvol
         end
    end
end

local function onsave(inst, data)
     data.delvol = inst.delvol
end

local function fn(Sim)

    local inst = CreateEntity()
    local trans = inst.entity:AddTransform()
    local anim = inst.entity:AddAnimState()
    inst.entity:AddSoundEmitter()
    --inst.forcevolume = 0.3

    inst.delvol = 0.3             --声明变量

    anim:SetBank("预制物名")
    anim:SetBuild("预制物名")
    anim:PlayAnimation("idle",true)
    
    -------------------------
    inst:AddComponent("talker")
    inst:AddComponent("inspectable")
    inst.components.inspectable.getstatus = deltavolume
    

    inst:AddComponent("inventoryitem")
    inst.components.inventoryitem.atlasname = "images/inventoryimages/预制物名.xml"

    inst.components.inventoryitem:SetOnDroppedFn(ondropped)

    inst:ListenForEvent("onputininventory", onputininv)
    
    inst.OnSave = onsave
    inst.OnPreLoad = onpreload

    return inst
end


return Prefab("common/objects/预制物名", fn, assets, prefabs)
上一篇 下一篇

猜你喜欢

热点阅读