在此之前,我为我的程序制作了一个评分部分,该部分使用Invoke重复每1秒。现在,我有一个问题,当我销毁一些物品时,如何让我的得分计数器增加额外的分数。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public Button[] buttons;
public Button pauseButton;
public Image[] images;
public Text scoreText;
public Text highScoreText;
public Text yourScoreText;
public Text text;
bool gameOver;
int score;
levelscroller level;
CoinMove cm;
void Start()
{
gameOver = false;
score = 0 + cm.plus;
InvokeRepeating("scoreUpdate", 1.0f, 1.0f);
}
void Update()
{
storeHighScore(score);
scoreText.text = "" + score;
yourScoreText.text = "" + score;
highScoreText.text = "" + PlayerPrefs.GetInt("highscore");
}
void scoreUpdate()
{
if (gameOver == false)
{
score += 1;
}
}
void storeHighScore(int newHighscore)
{
int oldHighscore = PlayerPrefs.GetInt("highscore", 0);
if (newHighscore > oldHighscore)
{
PlayerPrefs.SetInt("highscore", newHighscore);
oldHighscore = newHighscore;
PlayerPrefs.Save();
}
}
另一堂课:
using UnityEngine;
using System.Collections;
public class CoinMove : MonoBehaviour
{
public float Speed;
public int plus = 0;
UIManager ui;
void Start()
{
}
void Update()
{
transform.Translate(new Vector3(0, -1, 0) * Speed * Time.deltaTime);
//if (Input.touchCount > 0 || Input.GetTouch(0).phase == TouchPhase.Began)
//{
// Destroy(transform.gameObject);
//}
}
private void OnMouseDown()
{
Destroy(gameObject);
plus += 10;
}
}
它只是使得分的计数器完全为0而不是增量。
答案 0 :(得分:0)
我并没有真正了解您int plus
背后的逻辑以及对CoinMove cm
和UIManager ui
的引用......
实现您尝试的最简单方法是在 CoinMove 脚本中使用UIManager ui
简单引用 UIManager ,向<添加新方法<强> UIManager的强>:
public void AddScore(int scoreToAdd)
{
score += scoreToAdd;
}
然后,如果您想在 CoinMove 脚本中销毁硬币,请在销毁对象之前调用此方法:
private void OnMouseDown()
{
ui.AddScore(plus);
Destroy(gameObject);
}
希望这有帮助,
答案 1 :(得分:0)
首先关闭:
不要在每一帧使用PlayerPrefs,在幕后,unity使用IO来保存文件。你想在游戏结束时保存最高分。
在UIManager中,您可以管理分数递增。实际上,最好的做法是在控制器中处理Score增量(比如名为GameController的类),因此UI脚本只有映射函数(例如,值为文本字段)。通过拆分控制器和UI,您可以更轻松地扩展和更改内容。
为了简单起见,我们忽略了我认为更简洁的编程版本。
每个持有分数值的对象都可以添加到脚本中(在您的示例中,它的CoinMove):
var currentPosition = 1;
angular.element(document).on("mousewheel DOMMouseScroll", debounce(function(e) {
e.preventDefault();
e.stopPropagation();
var isUp = e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0 ? true : false;
if (isUp) {
if (currentPosition > 0) {
currentPosition--;
setPoinerActive();
$scrollHomePage.scrollTo(vm.myIndex[currentPosition]);
}
}
else {
if (currentPosition < 3) {
currentPosition++;
setPoinerActive();
$scrollHomePage.scrollTo(vm.myIndex[currentPosition]); return;
}
}
},300));
这可以在检查器中配置为您想要的任何值,或者如果您愿意,可以给它一个标准值。
CoinMove应该有以下方法:
public int scoreValue;
因为你在CoinMove中引用了UIManager,所以在coinMove中我们可以这样做:
public void AddScore(int amount) {
score += amount;
}