遊戲製作
此部分將接續第七週的遊戲製作進度,透過更改物件樣式與程式撰寫,使整體的遊戲畫面與各種遊戲機制變得更加完整豐富。
💡 古古的小提醒:
在開始之前,可以先把底下所列舉的課程素材都下載並導入至 Unity,再跟著接下來的步驟進行操作會更好喔~
FROOD - Free food and drinks pack
Quirky Series - FREE Animals Pack
改變物件樣式
前往 Asset Store 下載適當的素材,或者也可以直接取用上面提供的課程素材
➔ 使用上述素材來代替原先用於示意的各個物件,並將其加上 Box Collider 來偵測碰撞
兔子可以透過多個 Cube 拼湊而成,Player 作法則可參照古古的課程補充。
要記得加上 Box Collider 才有辦法讓物件與 Player 碰撞時產生反應喔!
📝古古的課程補充:
若是要將 Player 物件改為一個外部輸入的圖片模樣,可以透過以下步驟達成。
➊ 取消勾選 Player 物件中的 Mesh Renderer
➋ 對 Player 物件點擊右鍵,新增一個 Plane,並將需要的圖片拖曳至 Plane 上
➌ 將 Plane 中 Shader 欄位的 Standard 改為 UI/Default 選項
➍ 調整圖片的角度、位置與大小就完成啦!
使餅乾與兔子在偵測到被碰撞時自動消滅
開啟 PlayerController 腳本,將 OnTriggerEnter 函式中的程式碼修改為以下版本並存檔
示意圖為 PlayerController 腳本下半部修改後之程式碼
private void OnTriggerEnter(Collider collision)
{
string type = collision.gameObject.tag;
GameObject targetObject = collision.gameObject;
if (type == "floor")
{
Debug.Log("hit floor");
gm.updateHP(-1);
}
if (type == "rabbit")
{
Debug.Log("hit rabbit");
Destroy(targetObject); // 消滅被碰撞的兔子
}
if (type == "cookie")
{
Debug.Log("hit cookie");
Destroy(targetObject); // 消滅被碰撞的餅乾
}
if (type == "enemy")
{
Debug.Log("hit enemy");
gm.updateHP(-1);
}
if (type == "big-rabbit")
{
Debug.Log("hit big-rabbit");
}
}
設定吃到餅乾與兔子時的分數變化
開啟 GameManager 腳本,將原本程式碼修改為以下版本並存檔
public GameObject player;
public int score = 0;
public int hp = 3;
public int cookiePower = 0;
public int highScore = 0;
public int rabbitPoint = 0; // 補上rabbitPoint變數
public List<GameObject> steps = new List<GameObject>();
void Start()
{
score = 0;
hp = 3;
cookiePower = 0;
ChangeStepUI(0);
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Z))
{
GameOver();
}
}
public void updateHP(int amount)
{
hp = hp + amount;
if(hp >= 3)
{
hp = 3;
}
if(hp <= 0)
{
Debug.Log("遊戲結束");
}
}
// 計算cookiePower分數變化
public void updateCookiePower()
{
cookiePower = cookiePower + 10;
}
// 計算rabbitPoint分數變化
public void updateRabbitPoint()
{
rabbitPoint = rabbitPoint + 1;
}
public void ChangeStepUI(int step)
{
for (int i = 0; i < 3; i++)
{
steps[i].SetActive(false);
}
steps[step].SetActive(true);
}
public void GameStart()
{
ChangeStepUI(1);
}
public void Exit()
{
ChangeStepUI(0);
}
public void GameOver()
{
ChangeStepUI(2);
}
public void Restart()
{
ChangeStepUI(0);
}
➔ 開啟 PlayerController 腳本,將 OnTriggerEnter 函式中的程式碼修改為以下版本並存檔
private void OnTriggerEnter(Collider collision)
{
string type = collision.gameObject.tag;
GameObject targetObject = collision.gameObject;
if (type == "floor")
{
Debug.Log("hit floor");
gm.updateHP(-1);
}
if (type == "rabbit")
{
Debug.Log("hit rabbit");
gm.updateRabbitPoint(); // 碰到兔子加1分
Destroy(targetObject);
}
if (type == "cookie")
{
Debug.Log("hit cookie");
gm.updateCookiePower(); // 碰到餅乾加10分
Destroy(targetObject);
}
if (type == "enemy")
{
Debug.Log("hit enemy");
gm.updateHP(-1);
}
if (type == "big-rabbit")
{
Debug.Log("hit big-rabbit");
}
}
示意圖為 GameManager 腳本上半部修改後之程式碼
示意圖為 GameManager 腳本下半部修改後之程式碼
示意圖為 PlayerController 腳本下半部修改後之程式碼