使用Unity3D 5.3.4 模仿2D游戏 FlappyBird(四)

继续上一篇的博客,我们继续完善游戏。先给游戏添加音效。每当小鸟碰撞障碍,加分的碰撞器,和地板时,点击空格时,都应该有音效播放。选择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,设置如下
使用Unity3D 5.3.4 模仿2D游戏 FlappyBird(四)_第1张图片

然后,这个博客就写到这里,主要是为了巩固以前学的知识,也为了一些想学的新手一个学习教程(虽然我也是新手0_0!)。
欢迎大家查看,有错的地方也请指教。
http://pan.baidu.com/s/1sltbjAX 密码:ypxm
文件工程以上传。

你可能感兴趣的:(游戏,unity3d,2d)