学习官网教程动态音频,记录一下重点,方便以后进行查阅,故本博文不会全部更近教程中所有提及到的知识,推荐大家学习一遍教程后,有了自己的理解后再查阅本博文,温故而知新。这里附上官网教程地址ClickHere
往期音效笔记
1.UE4环境音效与程序化音效(1)
2.UE4环境音效与程序化音效(2)
2.UE4动态音频
3.UE4音效与空间
1.通过布尔切换音频
同时可以在音效播放完成之后绑定Audio Finished
函数,并设定对应的自定义函数,在音效播放的时候添加判断,防止音效多次播放
2.通过整数切换音频
3.使用时间轴控制音频体积
使用时间轴来控制,你可以实现一些从无到有,通过控制音频的音量来实现一些特定的效果。
点开时间轴你可以自定义曲线的形状。
4.使用浮点值设置音效映射变量
这里蓝图中是通过CurveTime
,来设置Layer01Audio
音效的音量的。
转到前面的蓝图就会看到CurveTime
值得设定,通过Map Range Clamped
(映射范围限制),这里实现得功能是,通过检测SMTorchVar
移动得距离,来控制音量得大小,最大得移动距离是250,对应着映射值1。最小为0。从而控制音量得大小。
不过这里得注意得是,音量得变化是线性得,如果你想让音量变化是非线性得。你可以自己自定义一个Curve
。
创建方式如下:
在这里面你可以自定义曲线
随后来到蓝图中,创建一个CurveFloat类型得变量Layer_01
,将自己刚才自定义得曲线赋值给该变量。
随后再替换刚才得Curve Time
,利用Get Float Value
函数,这里Target
对象是CurveFloat
类型得,也就是我们刚才创建得Layer_01
5.在SoundCue内部控制布尔,整数和浮点
在文章开头我们是在蓝图中控制Bool
和整数来判断播放得音效,这里我们在SoundCue
内部进行实现。
Bool
使用Branch
节点,同时设置节点变量名,在左侧面板中你可以设定
然后我们就可以回到蓝图中,替换我们一大堆得判断,判断后才进行选择播放哪一个音效
利用节点Set XX Paramater,(你要设置怎样得变量,需要你来定,这里我们用得是Bool
,所以是Boolean Parameter
),同时要注意得是Name
变量名一定要正确。
整数
使用Switch
节点进行整形设置,0-1-2对应着不同得音效,同样要记得命名变量名。
浮点
利用Continuous Modulator
节点进行设置,需要注意得是,该节点可设置得变量为两个,一个为Pich
(音高)一个为Volume
(音量),看自己得需求来进行设定。
在SoundCue内部设置,和在蓝图中设置各有各得好处,需要灵活运用,来简化我们得操作,大家需要自己进行权衡。
6.音频事件控制实例
通过判断玩家高度来控制风声的大小及频率
在官方教程中,打开蓝图Audio_Trees_Wind_Height
可以看到该功能的具体实现。
首先我们来看看变量的设定
(Min\Max)Delay_Time: 对应着我们最小最大延迟播放,及音效的频率
Start_Height: 最低位置0
End_Height: 最高位置1
这里我们需要实现,在低位置,风声以及风的频率都不会很高,在最高位置到达最大,并且会播放树叶摇曳的声音。
首先我们看左侧的红框,获取玩家的高度及Z轴,利用MapRangeClamped
函数,将值限定在0-1范围内,对应着Start Height
和End Height
。右侧的设置为音频限制,因为获取的是0-1的值,所以In RangeA-B
设定为0和1,再与Max\MinDelayTime
进行映射,输出的值利用Random Float Range
函数增加随机性。这里我们便获得了两个值,一个是音量的限制范围0-1,一个是音频的限制范围(不是0-1,需要你自己进行设定),当然这两个值随着人物高度变化而变化。
这里输入的值便是音量的范围,接入Volume Multiply
便实现了音量的控制。同时判断该值是否>0.8,来判断播放树叶摇曳的声音。后面的Retrigger
自定义事件是用来触发下文的事件检测函数的。至此音量得判断便解决。
最后将上文取得的频率值,与Set Timer By Function Name
函数结合使用,该事件检测函数利用延迟检测Time
来触发Trigger_Sound
(播放风声得函数),至此实现风声频率的切换。
7.音频与动画
你可以在动画中添加Notify
(通知)来设置动作的音频,添加方式如下:
在右侧面板中设定音频Sound
。
需要注意的是这里的Follow
跟随的是骨骼的名字
设置之后你可以在控制台输入Audio3dVisualize
进行Debug测试(需要在游戏中),可以看到发出声音的位置
但这种方式的局限性在于,只能播放一种音效,不具有多样性。例如我们播放走路的音效,需要判断SurfaceType
(地表种类)来播放不同的走路音效,就不能使用这种方式了。
于是我们得用另外一种方式来设置走路音效:
1.首先在人物的走路以及跑步动画中添加新的Notify-Footsetp
2.在人物动画蓝图EventGraph
事件图表中输入刚刚创建的Notify-Footstep
同时利用LineTraceByChannel
检测地表的类型,方式是人物的Z轴减去200(值可以自己测试)
将检测到的PysMat
获取他的SurfaceType
,再利用Select
节点,进行选择播放。这里生成音效的方式是Spawn Sound Attached
,因为走路的音效肯定是附着在人物身上的。
当然这里的SurfaceType
可以自定义,设定的方法如下:ProjectSettings(项目设置)->Physics(物理)->Physics Surface(物理表面)
3.同时为了多样性,我们可以通过速度来设定走路音量的大小。
利用Normalize To Range
节点将Speed
速度变量映射至0-1,当然这里的最大值与最小值取决与你动画中设定的值。速度越大发出的声音也越大。
4.除此之外我们还可以更进一步的优化么?有的,你可以通过曲线的方式混合走路与跑步的音效,同样也是通过判断速度的方式。
我们可以将蓝图优化至如下:
首先我来说明一下该蓝图,首先播放走路的音效,随后将Speed
单位化0-1,再利用GetFloatValue
节点,播放曲线(Footstep
)对应的部分,再设置音效的大小。下面播放的是跑步的音效,方式同理走路音效。这里你就有疑问了,那这不就播放了两种音效了么。
至此我们来看看两者曲线的对比。
至此你可以发现,走路曲线在0-0.25上升到最大值0.25-0.8逐渐淡出。而跑步的值为1时到达最大值。这里控制曲线的走向便是Speed
(把它单位化到0-1的原因)。所以这蓝图就可以实现走路与跑步声音的混合,使得更加自然多样化。
8.Particle粒子音频
设定粒子的音频时,你需要以下几步;
1.打开你需要设定的粒子
创建事件,右键空白面板Event
(事件)->Event Generator
(事件生成器)
然后单机生成的Event Generator
,左侧面板进行设置:
这里的Type
根据情形设定,这里我们设定Spawn
(粒子生成时触发),注意的是变量名字Custom Name
一定要记得设定。
虽然自定义一个蓝图类,在面板中添加ParticleSystem
点击后赋值自己刚刚设定的粒子
随后细节面板拉到最下面,可以看到可以触发的事件
这里我们选定点击OnParticleSpawn
将EventName
设置成刚自己自定义的名称便可以触发了。
同样的我们在来设定一下当粒子发生碰撞的时候的事件;
将Type
设定为Collision
再选定事件On Particle Collide
因为粒子碰撞到不同表面发出不同声音,所以这判断了一下SurfaceType
再设定粒子的音效的时候我们还需要注意一个点,因为粒子的渲染是在我们的视野范围之内才会被渲染出来,那当我们看不见它的时候就不会渲染,但这便会引发一个问题,我们隔得它很近,不在视野范围内就听不见它得声音。要避免这种情况得方法是。
点击粒子细节面板中Bounds
设定勾上Use Fixed Relative Bounding Box
。上面得各类参数是设定渲染的距离。
9.基于物理的音频
音效通常是由物理数据驱动的,例如两个物体相撞时就会播放一个音效,这里讨论如何约束和映射这些数值,让它们可以用到音频上,以及如何混合不同的音效,同时保留不同冲击强度下呈现的多种音效。
9.1案例1撞击木桶
教程中给的案例为,该木桶撞击到木板上,根据木板的高度发出不同的碰撞音效。
首先我们需要为木桶模拟物理,以及生成碰撞事件
随后生成事件Event Hit
将收到的冲击力单位化至0-1范围内,赋值给Force
,再将Force
赋值给音效。
你可以通过控制台输入AudioSoloSoundClass Collision
(只播放造成碰撞的音效)来进行测试(这样可以防止其他音效影响),这样你就可以听出不同力度发出音效的音量。
上面的情况适用于只有一种音效,现在我们来混和一下三种不同的撞击音效,Soft,Medium,Hard
。
官方教程中给了这三个音效的曲线。现在我们同样利用Get Float Value
进行混合
同时来观察一下三个曲线
可以发现三者曲线在0-1范围内进行切换,并发现交界处并不是完全只有一个音效。而这也更符合实际情况。
9.1案例2滚动木桶
教程中给的案例为,木桶滚动根据滚动速度发生不同音效,撞击到物体根据受力发出不同音效。据此我们需要关注木桶的x轴的角速度。
利用Get Physices Augular Velocity In Degrees
(通过角度获取物理角速度),将其X轴的值赋值给Rotation Speed
,和上文相似,将Normal Impulse
赋值给Force
首先我们来看滚动音效的蓝图:
这里通过判断角速度是否接近于0,进行播放滚动音效的Fade Out
淡出
上方蓝图,Do Once
防止音效多次触发。Reset的条件是播放了Fade Out
。同时我们需要注意的是,木桶滚动的音效的开始Start Time不能每次都是从0开始,如果每次都一样,你听到的滚动音效就会是一样的。所以这里获取音效的Duration
(持续时间)在(0-Duration-1
)随机选一个时间开始播放。
下方蓝图控制音效的音量(Volume Mulitiplier
)和音高(Pitch Multiplier
)。
接着我们来看撞击的蓝图:
同样需要DoOnce
,利用Map Range Clamped
(映射范围限制)将上文获取的Force
赋值给音效
9.1案例3滚动Box
这里我们需要注意的是盒体就不能再关注其角速度了,而是它的线性速度。
后面的蓝图和上文提及的基本一样,所以不做讨论。