【Unity 3D 2019】做一個有聲音的小遊戲吧
在上一篇轉盤小遊戲的介紹之後,總感覺好像少了什麼東西?對了,就是「聲音」,沒有了聲音,遊戲沒有靈魂,沒有臨場感,現在我們就來加上聲音吧。Unity支援的「聲音格式」可以自己查看一下 (其實也不多啦)。
做一個長這樣子的Game吧
遊戲製作
放入素材
- 新增一個「2D專案」後,將遊戲中所需要的圖片拉到專案中,相對的位置調整好,然後RunRun看 (目前是不會動的),這邊就不多說了。
移動車子
- 新增一個C# Script,以滑鼠移動的方式讓車子移動,主要依照滑鼠左鍵「按下 - GetMouseButtonDown()」跟「放開 - GetMouseButtonUp()」的位置算出速度,然後移動、慢慢減速,就是在手機上滑動的感覺。
using UnityEngine;
public class CarController : MonoBehaviour
{
float speed;
Vector2 startPosition;
void Update() { MoveCarWithMouse(); }
// 使用滑鼠移動車子
private void MoveCarWithMouse()
{
// 按下滑鼠左鍵
if (Input.GetMouseButtonDown(0))
{
this.startPosition = Input.mousePosition;
}
// 放開滑鼠左鍵 => 根據兩者的差距決定速度
if (Input.GetMouseButtonUp(0))
{
Vector2 endPosition = Input.mousePosition;
float swipeLength = endPosition.x - this.startPosition.x;
this.speed = swipeLength / 500.0f;
}
transform.Translate(this.speed, 0, 0);
this.speed *= 0.98f;
}
}
加入音效
- 為車子加入「音效」的Component - AudioSource,比較要注意的是,如果「Play On Awake」打勾的話,只要一Run就會發出聲音了,這樣滿怪的,所以這裡是把它「取消掉」。這裡可以看到,在車子的圖片上會多一個「聲音的圖示」。而取得播放元件的方法是使用「GetComponent()」,去取得「AudioSource」的元件 (應該說「轉型」),到這裡在車子動的時候就會有音效了。
using UnityEngine;
public class CarController : MonoBehaviour
{
float speed;
Vector2 startPosition;
void Update() { MoveCarWithMouse(); }
// 使用滑鼠移動車子
private void MoveCarWithMouse()
{
// 按下滑鼠左鍵
if (Input.GetMouseButtonDown(0))
{
this.startPosition = Input.mousePosition;
}
// 放開滑鼠左鍵 => 根據兩者的差距決定速度
if (Input.GetMouseButtonUp(0))
{
Vector2 endPosition = Input.mousePosition;
float swipeLength = endPosition.x - this.startPosition.x;
this.speed = swipeLength / 500.0f;
PlaySound();
}
transform.Translate(this.speed, 0, 0);
this.speed *= 0.98f;
}
// 播放音效
private void PlaySound() {
GetComponent<AudioSource>().Play();
}
}
加入文字框
- 在這裡我們加上一個用來顯示距離的文字框 - Text,這裡可以發現到,文字框的位置跟遊戲的位置好像差滿遠的?不過在Run的時候還是正確的。
更新文字框
- 加上一個空白的物件,然後新增一個C# Script給它,而取得物件的實體是以「GameObject()」來做處理,然後依照車子跟旗子的距離來計算出有沒有超過終點。
using UnityEngine;
using UnityEngine.UI;
public class GameDirector : MonoBehaviour
{
GameObject car;
GameObject flag;
GameObject distance;
void Start() { InitGameObject(); }
void Update() { FinishTesting(); }
// 先找到畫面上的物件在哪裡 (名字就是在屬性表上看到的名字)
private void InitGameObject() {
this.car = GameObject.Find("car");
this.flag = GameObject.Find("flag");
this.distance = GameObject.Find("Distance");
}
// 測試車子有沒有到終點 (GetComponent()的使用)
private void FinishTesting() {
float length = this.flag.transform.position.x - this.car.transform.position.x;
if (length > 0) {
this.distance.GetComponent<Text>().text = "距離目標還有 " + length.ToString("F2") + " 公尺";
} else {
this.distance.GetComponent<Text>().text = "抵達終點";
}
}
}
範例程式碼下載
後記
- 這篇主要是延續上一次的功能,然後在加上聲音,慢慢的做出一個完整的小遊戲。