Unity - 如何在统一2D中销毁对象后添加分数?

时间:2017-04-06 08:33:34

标签: c# unity3d unity5 scoreloop

在此之前,我为我的程序制作了一个评分部分,该部分使用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而不是增量。

2 个答案:

答案 0 :(得分:0)

我并没有真正了解您int plus背后的逻辑以及对CoinMove cmUIManager 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;
}