在上一篇文章中完成手部偵測及地鼠設定,今天我們要來加上遊戲管理。
目錄
地鼠時間控制
分數機制
遊戲管理
我們需要地鼠經過一段時間後消失,因此新增兩個變數來記錄地鼠顯示的時間及目前時間。
在遊戲一開始進行時間初始化,並在地鼠出現時開始倒數。
float maxSecondsOnScreen = 2.5f; //地鼠顯示時間
float currentSecondsOnScreen = 0; //目前時間
private void Init()
{
gameManager = FindObjectOfType<GameManager>().GetComponent<GameManager>();
ResetCurrentSecondOnScreen();
}
private void ResetCurrentSecondOnScreen()
{
currentSecondsOnScreen = maxSecondsOnScreen; //時間初始化
}
private void CountDownCurrentSecondOnScreen()
{
currentSecondsOnScreen -= Time.fixedDeltaTime; //倒數
}
使用TryCounDownToHide()來判斷地鼠目前狀態:
private void TryCountDownToHide()
{
if (gameObject.activeInHierarchy)
{
CountDownCurrentSecondOnScreen();
}
if (currentSecondsOnScreen < 0;)
{
ResetCurrentSecondOnScreen();
Hide();
}
}
將TryCountDownToHide()放入FixedUpdate()中
void FixedUpdate()
{
TryCountDownToHide();
}
也要記得在OnCollisionEnter2D()中加入
ResetCurrentSecondOnScreen();
在Scene中新增一個Text,將tag設定成Score,並調整好外觀設定
在gameManager()中新增InitScore()
Text score;
private void InitScore()
{
score = GameObject.FindGameObjectWithTag("Score").GetComponent<Text>();
score.text = "";
}
新增AddScore()
int scoreNumber = 0; //紀錄目前分數
public void AddScore()
{
scoreNumber += 10;
score.text = "Score:"+ scoreNumber.ToString();
}
最後要在Monster()中的碰撞函式中新增AddScore()
gameManager.AddScore();
將地鼠製成Prefab,並在Scene中新增所需地鼠數量。
在gameManager()中新增一個List用來儲存所有地鼠
public List<Monster> monsters;
並在Start()中新增
monsters = GameObject.FindObjectsOfType<targetBehavior>().ToList();
在HideAllMonsters()將所有地鼠隱藏起來,並加入Start()中
void HideAllMonsters()
{
foreach ( var m in monsters)
{
HideMonster(m.gameObject);
}
}
新增一個List來儲存目前隱藏的地鼠
List<Monster> HiddenMonsters
{
get {
var result = new List<Monster>();
foreach (var m in monsters)
{
if (!m.IsActive)
{
result.Add(m);
}
}
return result;
}
}
在ShowRandomMonster()中隨機挑選一隻地鼠,並將它顯示在畫面上
void ShowRandomMonster()
{
int r = Random.Range(0,HiddenMonsters.Count);
targetBehavior m = HiddenMonsters[r];
ShowMonster(m.gameObject);
}
新增變數來管理地鼠生成時間,並將ResetShowMonsterSeconds()加入Start()中
public float showMonsterIntervalSeconds;
public float countDownShowMonsterSeconds;
int MAX_MONSTERS_ON_SCREEN=3;
private void ResetShowMonsterSeconds()
{
countDownShowMonsterSeconds = showMonsterIntervalSeconds;
}
取得目前畫面上地鼠的數量
int MonsterCountOnScreen{
get {
int result = 0;
foreach (var m in monsters)
{
if (m.IsActive)
{
result += 1;
}
}
return result;
}
}
在TryCountDownToShowMonster()中:
private void TryCountDownToShowMonster()
{
countDownShowMonsterSeconds -= Time.fixedDeltaTime;
if (countDownShowMonsterSeconds <= 0)
{
ResetShowMonsterSeconds();
if (MonsterCountOnScreen < MAX_MONSTERS_ON_SCREEN;)
{
ShowRandomMonster();
}
}
}
今天我們製作了遊戲管理,地鼠遊戲就先告一段落啦! 下一篇文章,將會介紹使用ManoMotion製作flappy bird遊戲,明天見啦!