我的任务是使用按钮更改评分值,每个按钮应该有自己的评分速度。换句话说,每个按钮都将是决定评分速度的参数的一种“升级”。
这是第一个脚本:
using System;
using UnityEngine.UI;
[Serializable]
public class Score
{
public Text text;
public int score;
// Если просто изменять score, то у нас не изменится Text
// Поэтому добавляем метод для изменения
// (P.S.: Рекомендую изучить getter и setter)
public void SetScore(int score)
{
this.score = score;
text.text = score.ToString();
}
}
这是第二个脚本
public class Game : MonoBehaviour
{
public Score sub;
public Score money;
public Score top;
private void Start()
{
StartCoroutine(CountPoints(sub, 10000)); // Добавляем 10000 очков
StartCoroutine(CountPoints(money, 10000)); // Добавляем 10000 монет
StartCoroutine(CountPoints(top, -1000)); // убираем 1000 очков
}
IEnumerator CountPoints(Score scoreObject, int increase)
{
// Чем больше количество очков, тем меньше задержа
// Таким образом очки будут накапливаться всегда за increaseTimeInSeconds секунд
float delay = 1f / increase * increaseTimeInSeconds;
for (var i = 0; i < increase; i++)
{
scoreObject.SetScore(scoreObject.score+1); // Добавляем очки
yield return new WaitForSeconds(delay); // Ждём
}
}
首先,有必要弄清楚脚本,在那里运行它,以免问这种琐碎的问题)
首先,正如我告诉你的,让我们用 getter/setter 替换 Score 和 SetScore。
更新 Score.cs 脚本:
并相应地替换
在
为了便于理解,该方法
CountPoints()将被重命名为。IncreaseScorePointsBy()让我提醒您,此方法将指定的金额添加到当前点数
现在让我们继续讨论这个问题。
如果您需要更改点的总体变化率,那么您可以简单地更改变量
increaseTimeInSeconds,但是,在这种情况下,您需要从中删除该属性const但据我了解,你想要不断积累积分(而不是达到一定数量)
让我们为此编写一个方法
Score.cs:现在,通过运行胡萝卜素,
StartIncrease()每IncreaseDelayInSeconds秒都会为分数添加1分这是它的使用方式:
现在让我们继续讨论按钮。
检查器中的按钮有一个 OnClick() 事件
我们添加一个新元素并用鼠标拖动脚本中的对象
并选择我们要在单击按钮时调用的函数
准备好!可以检查
一般来说,如果你在制作答题器,最好不要改变加点和减点的速度,而是将Score.IncreaseDelayInSeconds作为StartIncrease(float delay)方法的参数
完整代码:
分数.cs:
游戏.cs: