質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

3396閲覧

Unity ハイスコアの実装方法について

rashiobi

総合スコア10

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/01/14 12:43

現在unityを使ってゲームを制作しているのですが
どうしてもハイスコアの実装が出来ません。

ゲームをプレイして、リザルト画面にいったときの現スコアは記録できるのですが
ハイスコアが0のままになります。

自分でもどこの変数を参照すれば良いかと考え試してみましたがなかなか上手くいきませんでした

【ハイスコアの処理をしているプログラム】

using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; public class HighScore : MonoBehaviour { public float score = 0; public Text highScoreText; private float highscore = 0; private string key = "HIGH SCORE"; void Start () { score = Scores.TimeScore; highscore = PlayerPrefs.GetInt (key, 0); highScoreText.text = "HighScore:" + highscore.ToString (); highscore = 0; } void Update () { if(score > highscore) { highscore = score; PlayerPrefs.SetFloat (key, highscore); highScoreText.text = "HighScore: " + highscore.ToString (); } this.GetComponent<Text>().text = "HighScore: " + highscore; } }

【現スコアを記録しているプログラム】

using UnityEngine; using System.Collections; using UnityEngine.UI; public class Scores : MonoBehaviour { //public float score = 0; //public float highscore = 0; public static float TimeScore = 0; // Use this for initialization void Start () { //score = ScoreManager.score_num; TimeScore = GameController.timeCount; } void Update () { this.GetComponent<Text>().text = "Result Score: " + TimeScore * 20; } }

【現スコアを記録する際に参照しているプログラム】

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class GameController : MonoBehaviour { public Text timeLabel; public static float timeCount = 0; public static int hp = 100000; public static float Crtime = 0; void Start () { timeLabel.text = "TIME:" + timeCount; hp = HpBarCtrl._hp; Crtime = stageclear1.Ctime; timeCount = 90; } void Update () { timeCount -= Time.deltaTime; timeLabel.text = "TIME:" + timeCount.ToString("0"); if(timeCount < 0){ timeCount = 90; hp = 100000; SceneManager.LoadScene("TimeUp"); } } }

以上がスコアを記録するために使っているスクリプトです。
現スコアを記録する方法は スコアを参照しているプログラムのtimecountの値をとって
その値を*20しています。この値が現スコアになります。
このスコアの表示は出来るのですが、ハイスコアの表示がうまくいきません。

また 一回目のプレイでリザルト画面にいくと0と表示されますが
二回目以降は前のスコアより高くクリアしても0という表記すらされず、低くクリアしても表記されません

何が原因なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

質問頂きありがとうございます
HighScore.csの
Start部分のhighscore=0;を消したら動くと思います

HighScore.cs

1highscore = PlayerPrefs.GetInt (key, 0); 2 highScoreText.text = "HighScore:" + highscore.ToString (); 3 highscore = 0;//ここ

一応、Debug.Log(PlayerPrefs.GetInt ("HIGH SCORE"))を埋め込んでhigh scoreが保存されてるか確認してください
ログ取ってデバッグすれば上書きミスとかをすぐに見つけられるのでおすすめです

投稿2019/01/14 13:01

bochan2

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rashiobi

2019/01/14 13:41

highScore = 0を消してみましたが現状は変わりませんでした。 debug.logはhighscore.csのstartの部分に組み込むのでしょうか? やってみましたが、組み込んだ結果 debug.logにはゲームの残り時間が出力されていました。 自分のゲームではゲームの残り時間(90)から値がマイナスされていきその時間の値を*20したものを スコアとして表示させています。 なのでクリアした際の時間がdebug.logに表示されたと思います クリアした際のスコアはちゃんと表示されています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問