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

来源:互联网 发布:淘宝网购物商城 编辑:程序博客网 时间:2024/06/05 02:51

继续上一篇的博客,我们继续完善游戏。先给游戏添加音效。每当小鸟碰撞障碍,加分的碰撞器,和地板时,点击空格时,都应该有音效播放。选择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
文件工程以上传。