文章出處

自制Unity小游戲TankHero-2D(5)聲音+爆炸+場景切換+武器彈藥

我在做這樣一個坦克游戲,是仿照(http://game.kid.qq.com/a/20140221/028931.htm)這個游戲制作的。僅為學習Unity之用。圖片大部分是自己畫的,少數是從網上搜來的。您可以到我的github頁面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源碼。

本篇主要記錄聲音、場景切換、武器彈藥等。

關于碰撞

先插一句。上一篇記錄了Unity3D的碰撞相關的試驗結論。但太過漫長,不實用,經過整理,我總結了如下幾句。

Rigidbody組件的作用是:接收外力,從而使自身像物理中的剛體一樣運動;對其它物體產生力。

若Rigidbody的IsKinimatic為true,則不再接收外力;但會繼續對其它物體產生力。

Collider組件的作用是:劃定一個空間范圍(一個矩形、球形、網格等),Rigidbody組件會檢測兩個物體的Collider是否發生重合(Enter)持續(Stay)或退出(Exit),并激發雙方的Collision事件。如果Collider的Is Trigger為true,則激發雙方的Trigger事件。

總之,場景中不斷運動的物體,需要Rigidbody,始終靜止的物體,不需要Rigidbody。

聲音

場景里要有1個Audio Listener才能聽到聲音。距離Audio Listener近的AudioSource發出的聲音才能被聽到。

背景音樂一般放到主攝像機上。

偶爾才發出的聲音,比如撿到金幣時發出"叮"地聲響。直接用AudioSource.PlayClipAtPoint方法就可以。

 

void OnTriggerEnter2D(Collider2D other)

{

    if (other.tag != Tags.hero) { return; }

 

    AudioSource.PlayClipAtPoint(pickedAudioClip, this.transform.position, 0.2f);

    MonoBehaviour.Destroy(this.gameObject);

}

 

在持有AudioSource組件的對象上,可以看到一個喇叭,很好玩。這個坦克移動的時候,喇叭也跟著動了。

 

 

 

場景切換

場景切換時我希望一直保留某個對象,比如游戲控制器這種全局的東西。在腳本里用DontDestroyOnLoad就可以了。

 

void Awake()

{

    if (instance == null)

    {

        instance = this;

        DontDestroyOnLoad(this.gameObject);

    }

    else

    {

        Destroy(this.gameObject);

    }

}

 

 

 

武器彈藥

武器和子彈分別做成prefab,可以自由組合。在Inspector里也比較方便配置了。

 

 

總結

您可以到我的github頁面(https://github.com/bitzhuwei/TankHero-2D)上得到工程源碼。

請多多指教~


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()