2.8 声音与特效
现在的游戏是无声的,我们将添加几个简单的音效,并增加一个爆炸效果。
步骤 01 在Project窗口中单击鼠标右键,选择【Import Package】→【Custom Package】,然后到资源文件目录rawdata\packages浏览Unity包文件,选择ShootingFX.unitypackage,将其打开,选择【Import】导入到当前工程中,如图2-34所示。在这个包中包含了几个音效文件和一个爆炸特效Prefab,它们都会被导入到Assets目录的FX文件夹中。
图2-34 导入音效素材
.unitypackage文件是Unity专用的资源包,在Project窗口中选择资源,如脚本、模型、声音等,然后单击鼠标右键并选择【Export Package】,可以将所选资源导出为.unitypackage格式的包,然后重用到其他Unity工程中。
步骤 02 选择主角飞船游戏体,在菜单栏中选择【Component】→【Audio】→【Audio Source】,为主角添加一个Audio Source组件,凡是需要发声的游戏体,必须有这个组件。
步骤 03 打开Player.cs脚本,添加并修改代码如下:
public AudioClip m_shootClip; // 声音 protected AudioSource m_audio; // 声音源 public Transform m_explosionFX; // 爆炸特效 void Start () { m_transform = this.transform; m_audio = this.GetComponent<AudioSource>(); }
① m_shootClip属性是射击的声音,在后面会将它和音效文件关联。
② m_audio属性是声音源组件,用于播放声音,在Start函数中将其指向实际的声音源组件。
步骤 04 在Player.cs脚本的Update函数中添加播放声音的代码:
if ( Input.GetKey( KeyCode.Space ) || Input.GetMouseButton(0) ) { Instantiate( m_rocket, m_transform.position, m_transform.rotation ); // 添加代码,播放射击声音 m_audio.PlayOneShot(m_shootClip); }
步骤 05 在Player.cs脚本的OnTriggerEnter函数中添加创建爆炸特效的代码:
if (m_life <= 0) { //添加代码,当生命值为0后,播放爆炸特效 Instantiate(m_explosionFX, m_transform.position, Quaternion.identity); Destroy(this.gameObject); // 自我销毁 }
步骤 06 选择主角游戏体,在Project窗口的FX文件夹下分别找到shoot.WAV音效文件和Explosion.prefab爆炸特效文件,在Player组件中将其分别与m_shootClip和m_explosionFX属性关联,如图2-35所示。
图2-35 关联爆炸
步骤 07 选择爆炸特效的Prefab,为其添加一个Audio Source组件,然后在导入的FX文件夹下找到explosion.WAV文件,将其指定到Audio Source的Audio Clip中。因为默认【Play On Awake】复选框是处于选中状态,所以当爆炸特效被实例化后,会自动播放爆炸的声音。【Spatial Blend】的值默认为0,表示音效为2D音效,不会受空间环境影响,如果将其设为1,音效则变为3D音效,如图2-36所示。
图2-36 添加爆炸声音
运行游戏,可以听到射击声音,当主角死亡,会看到爆炸效果,如图2-37所示,并能听到爆炸声音。我们也需要为敌人添加同样的爆炸效果和声音,重复前面的步骤即可,这里就不再赘述。
图2-37 爆炸效果