【问题标题】:Unity High score Saving on AndroidUnity 高分保存在 Android 上
【发布时间】:2016-06-27 15:09:04
【问题描述】:

我的当前分数和最高分数不会显示在 Android 设备中

As you can see in picture it shows Score and HighScore in DeathGUI , but when i build it to android it shows 0 and 0

DeathGUI 菜单控制器

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

public class MenuController : MonoBehaviour {

    public Text scoreText;

    // Use this for initialization
    void Start () {
    }

    // Update is called once per frame
    void Update () {

    }

    public void StartGame()
    {
        SceneManager.LoadScene("Name is Hidden but it is Correct");
    }

    public void RestartGame()
    {
        if (GameStateManager.GameState == GameState.Dead)
        {
            GameStateManager.GameState = GameState.Intro;
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
    }

    public void ToggleEndMenu(float score)
    {
        gameObject.SetActive(true);
        scoreText.text = ((int)score).ToString("0");
    }
}

玩家评分管理器

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

public class ScoreManager : MonoBehaviour
{


    private float score = 0f;
    public Text Scoretext;
    public MenuController deathmenu;
    void Start()
    {

    }




    void Update()
        {
            score += Time.deltaTime;
            Scoretext.text = ((int)score).ToString();
        }

       public void onDeath()
        {

           if(PlayerPrefs.GetFloat("Highscore") < score)
            PlayerPrefs.SetFloat("Highscore", score);
            deathmenu.ToggleEndMenu(score);
        }

    }


Player Script 



    void Update()
        {
            //handle back key in Windows Phone
            if (Input.GetKeyDown(KeyCode.Escape))
                Application.Quit();

            if (GameStateManager.GameState == GameState.Intro)
            {
                MovePlayerOnYAxis();
                if (WasTouchedOrClicked())
                {
                    IntroGUI.SetActive(false);
                    GameStateManager.GameState = GameState.Playing;
                }
            }

            else if (GameStateManager.GameState == GameState.Playing)
            {
                MovePlayerOnYAxis();
                Canvas.SetActive(true);
                DeathGUI.SetActive(false);


            }
            score += Time.deltaTime;
            Scoretext.text = ((int)score).ToString();
        }


 void PlayerDies()
    {


        GameStateManager.GameState = GameState.Dead;
        DeathGUI.SetActive(true);
        Canvas.SetActive(false);
        GetComponent<AudioSource>().PlayOneShot(DeathAudioClip);

        if (PlayerPrefs.GetFloat("Highscore") < score)
            PlayerPrefs.SetFloat("Highscore", score);
        deathmenu.ToggleEndMenu(score);
    }
}

高分脚本

HighScore GUI for script

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

public class HighScoreText : MonoBehaviour {

    public Text HighscoreText;

    // Use this for initialization
    void Start () {
        HighscoreText.text = ((int)PlayerPrefs.GetFloat("Highscore")).ToString();
    }

    // Update is called once per frame
    void Update () {

    }
}

【问题讨论】:

  • 你在这里展示了很多代码。您在诊断问题方面走了多远?
  • 您的代码从不为 highScore.text 设置值,您甚至没有变量来处理 Text(高分)对象。
  • @JonSkeet 我认为 GameStates 有问题,但不知道如何解决
  • @primaëlquemerais Highscore.txt 在 DeathGUI 中,HighscoreText 脚本和 Highscore.txt '使用 UnityEngine;使用 System.Collections;使用 UnityEngine.UI;公共类 HighScoreText : MonoBehaviour { 公共文本 HighScoreText; // 用于初始化 void Start () { HighscoreText.text = ((int)PlayerPrefs.GetFloat("Highscore")).ToString(); } // 每帧调用一次更新 void Update () { } }
  • 使用调试器。单步执行您的代码。报告您在相关代码中观察到的内容。 Stack Overflow 不能替代调试。如果您不熟悉 C# 和 Unity,我个人建议您分别学习它们 - 但无论哪种方式,您都应该绝对花时间学习调试和其他诊断技术。

标签: c# android unity3d unityscript unity5


【解决方案1】:

如果您查看 PlayerSettings 的检查器,您是否将写入权限设置为 External (SDCard) 或 Internal only?

还要安装位置吗?

我制作了一款本地高分游戏,我看到 playersettings 的配置部分具有以下值: 安装位置 = 首选外部 写访问 = 外部 (SDCard)

这是我的 LocalScore.js:

#pragma strict
#pragma implicit

var Score1 : int;
var Name1 : String;


var Score2 : int;
var Name2 : String;


var Score3 : int;
var Name3 : String;


var Score4 : int;
var Name4 : String;


var Score5 : int;
var Name5 : String;

var Score6 : int;
var Name6 : String;


var Score7 : int;
var Name7 : String;


var Score8 : int;
var Name8 : String;


var Score9 : int;
var Name9 : String;


var Score10 : int;
var Name10 : String;





function Start () {

}

function Update () {

}
function OnGUI() {

    if(GUI.Button(Rect(Screen.width / 2 - 150,  Screen.height / 2.5 + 100 , 250 ,50), "Back to Global Scoreboard") ) {
//      Application.Quit();
        Application.LoadLevel("Highscore");

    }

//  UpdateHScore();

//  GUI.Textfield();

}

function UpdateLocalScores(){
//  Score1 = PlayerPrefs.GetInt(HScore0);
//  Name1 = PlayerPrefs.GetString(HScoreName0); 
//  
//  Score2 = PlayerPrefs.GetInt(1HScore);
//  Name2 = PlayerPrefs.GetString(1HScoreName);     
//
//  Score3 = PlayerPrefs.GetInt(2HScore);
//  Name3 = PlayerPrefs.GetString(2HScoreName);     
//
//  Score4 = PlayerPrefs.GetInt(3HScore);
//  Name4 = PlayerPrefs.GetString(3HScoreName);     
//
//  Score5 = PlayerPrefs.GetInt(4HScore);
//  Name5 = PlayerPrefs.GetString(4HScoreName);     
//
//  Score6 = PlayerPrefs.GetInt(5HScore);
//  Name6 = PlayerPrefs.GetString(5HScoreName);     
//
//  Score7 = PlayerPrefs.GetInt(6HScore);
//  Name7 = PlayerPrefs.GetString(6HScoreName);     
//
//  Score8 = PlayerPrefs.GetInt(7HScore);
//  Name8 = PlayerPrefs.GetString(7HScoreName);     
//
//  Score9 = PlayerPrefs.GetInt(8HScore);
//  Name9 = PlayerPrefs.GetString(8HScoreName);     
//
//  Score10 = PlayerPrefs.GetInt(9HScore);
//  Name10 = PlayerPrefs.GetString(9HScoreName);        



}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多