音效--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)