在上一篇文章中完成手部侦测及地鼠设定,今天我们要来加上游戏管理。
目录
地鼠时间控制
分数机制
游戏管理
我们需要地鼠经过一段时间後消失,因此新增两个变数来记录地鼠显示的时间及目前时间。
在游戏一开始进行时间初始化,并在地鼠出现时开始倒数。
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游戏,明天见啦!
<<: IT 铁人赛 k8s 入门30天 -- day24 k8s Expose Pod Information to Containers by Environment Variables
哈罗大家好~~ 昨天的 Microsoft 365介绍方案告一段落,不知道大家对於Microsoft...
昨天提到,当Azure Hyper-V需要被其它Azure VM内网存取的时候, 该如何调整呢?内网...
“Books are a narcotic.” ― Franz Kafka 突然想起了恐龙书 Ka...
【前言】 这两天来记录 ethers.js 我觉得蛮重要的一些学习笔记,今天主要聚焦在一些常见名词...
昨天我们聊到了RNN与马可夫模型在作曲上因为缺乏长期记忆的关系,导致在创作音乐上无法有效的理解曲式与...