继续上一篇的博客,我们继续完善游戏。先给游戏添加音效。每当小鸟碰撞障碍,加分的碰撞器,和地板时,点击空格时,都应该有音效播放。选择Prefabs–>pipe,展开箭头给两个pipe添加tag,tag名字为obstacle(collider_score
已经添加过了,不用添加),选择bg–>back也设置这个tag。
给小鸟添加一个AudiSource组件,取消PlayOnAwake的勾选。现在来修改Bird这个脚本,实现播放音效。
public class Bird : MonoBehaviour {
//用来获取小鸟要播放的音效,记得从文件夹中拖入相关的音频,使用时对应修改索引
public AudioClip[] birdAudio;
private AudioSource birdAudioSource; //用来获取小鸟身上的声音源
// Use this for initialization
void Start () {
birdAudioSource = GetComponent<AudioSource>();
}
// Update is called once per frame
void Update () {
//当按下空格键时
if (Input.GetKeyDown(KeyCode.Space))
{
//当点击空格时播放sfx_wing音效
birdAudioSource.clip = birdAudio[2];
birdAudioSource.Play();
}
}
//进入碰撞器,也就是当小鸟碰撞到其他东西时
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "obstacle")
{
//当碰撞到障碍或地板时播放sfx_hit音效
birdAudioSource.clip = birdAudio[1];
birdAudioSource.Play();
}
}
}
注意:为了篇幅考虑,这里只给出了增加的代码,只需要添加进原来代码对应的位置就行。
现在运行虽然能正常播放声音,但是加分的声音不太好处理,因为小鸟共用一个声音源,当小鸟播放加分的声音时,我们依然在点击空格键,播放的声音会立即改变,声音播放的不完整,我想到的解决办法是:给Prefab–>pipe–>collider_score 添加一个AudioSource,取消play on awake,拖音频sfx_point进去,然后修改Bird脚本
//进入触发器时,通俗的讲就是当小鸟碰撞到障碍中间的空碰撞器时
void OnTriggerEnter2D(Collider2D other)
{
//如果碰撞到的物体的tag是collider_score,用来判断碰撞到的是不是collider_score
if (other.tag == "collider_score")
{
//给碰撞到的物体发送一个消息,调用playScoreAudio方法
other.SendMessage("playScoreAudio");
//给碰撞到的物体发送一个消息,调用addScore方法
other.SendMessage("addScore");
}
}
和ColliderScore脚本
using UnityEngine;
using System.Collections;
public class ColliderScore : MonoBehaviour {
private AudioSource scoreAudio; //获取加分时的声音
void Start()
{
scoreAudio = GetComponent<AudioSource>();
}
//被小鸟碰撞时调用的方法
public void addScore ()
{
//通过单例模式调用增加分数的方法
GameManager.Instance.addScore();
}
//被小鸟碰撞时调用播放声音的方法
public void playScoreAudio ()
{
scoreAudio.Play();
}
}
现在播放声音就不会有问题了。
现在游戏基本完成了,但是还有一个小问题,就是当小鸟碰撞到障碍时会被往后移动,我们可以锁住他的x轴就行了,选中bird,设置如下
然后,这个博客就写到这里,主要是为了巩固以前学的知识,也为了一些想学的新手一个学习教程(虽然我也是新手0_0!)。
欢迎大家查看,有错的地方也请指教。
http://pan.baidu.com/s/1sltbjAX 密码:ypxm
文件工程以上传。