Как передать результаты на табло, если они прикреплены к разным объектам и находятся в разных сценах c # - PullRequest
0 голосов
/ 06 октября 2018

Я прочитал много сообщений об этом исключении, но ни один не дает мне рабочего ответа ... Я начинающий в единстве, и я не могу решить одну маленькую проблему, поэтому я надеюсь на вашу помощь.Любая полезная ссылка или что-то поможет мне.И любая помощь приветствуется.

У меня есть две сцены.с двумя сценариями, прикрепленными к разным объектам.На объекте я получил скрипт контроллера счета в другом скрипте для табло, и мне нужно передать счет на табло , но я не знаю, как это сделать правильно, и у меня ничего не работает.

Это мой скрипт ScoreController (он прикреплен к одному игровому объекту на игровой сцене) (он прикреплен к другому объекту с именем "lialia", как вы видите в скрипте Scorecontroller)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class ScoreController : MonoBehaviour {

    public Text scoreText;

    public GameObject gameOverText;
    public bool gameOver = false;
    int score = 0;
    public  static int finall=0;


    void Update() {
        scoreText.text = score.ToString();
    }


   public void OnTriggerEnter2D(Collider2D target)
    {
        if (target.tag == "Bomb")
        {
           Time.timeScale = 0;
           gameOverText.SetActive(true);
           gameOver = true;
           finall = PlayerPrefs.GetInt("score");
           GameObject.Find("lialia").GetComponent<ScoreBoard>().CheckForHighScore(finall);

        }
    }

   public void OnTriggerExit2D(Collider2D target){

        if (target.tag == "Fruit") {
            Destroy(target.gameObject);
            score++;
           finall = score;
          PlayerPrefs.SetInt("score", finall);

        }
    }
}

Это мой ScoreBoardScript (вы можете смотреть только на CheckForHIghScore (); метод), который прикреплен к объекту "lialia", как вы видели в предыдущем скрипте

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScoreBoard : MonoBehaviour {
    public Text[] highScores;
    int[] highScoreValues;

     void Awake()
    {
        DontDestroyOnLoad(gameObject);
    }
    void Start () {
        highScoreValues = new int[highScores.Length];
        for (int x =0; x < highScores.Length; x++) {
            highScoreValues[x] = PlayerPrefs.GetInt("highScoreValues" + x);
        }
        DrawScores();
    }
    void SaveScore() {
        for (int x =0; x < highScores.Length; x++) {
            PlayerPrefs.SetInt("highScoreValues" + x, highScoreValues[x]);
        }
    }
    public void CheckForHighScore(int finall) {

        for (int x = 0; x < highScores.Length; x++) {
            if (finall > highScoreValues[x]) {
                for (int y=highScores.Length - 1; y > x; y--){
            highScoreValues[y] = highScoreValues[y - 1];
            }
        highScoreValues[x] =finall;
        DrawScores();
        SaveScore();
                break;

            }
        }
    }
    void DrawScores() {
        for (int x = 0; x < highScores.Length; x++) {
            highScores[x].text = highScoreValues[x].ToString();
        }
    }
    // Update is called once per frame
    void Update () {

    }
}

1 Ответ

0 голосов
/ 06 октября 2018

Зависит от структуры вашего проекта и платформы.

Вызовите функцию DontDestroyOnLoad(this.gameObject) в Awake() в скрипте MonoBehaviour, чтобы сохранить объекты между сценами, но в нем есть некоторые ошибки при использовании со старыми версиями Android (нижеkitkat, если я не ошибаюсь).

Вы можете создать синглтон-класс ScoreManager и хранить там все свои результаты и общие данные.

Вы можете использовать PlayerPrefs для сохранения результатов в одной сцене и загрузкив другом, когда вызывается функция Start().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...