自制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)上得到工程源碼。
請多多指教~
文章列表