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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

1回答

2542閲覧

unityでハイスコアとスコアを表示したい

tttttm

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2020/12/08 15:02

編集2020/12/08 16:07

前提・実現したいこと

unityで当たったらゲームオーバー の機能を作っていて、string型でテキストに表示してある数字(キャラクターの距離)をint型に直して、if文にもっていってハイスコアとスコアを表示したいですのですが、わからないです。

発生している問題・エラーメッセージ

private string score; private Text timerText; private string nowTime; private int a; private int b; void Start(){   timerText = GetComponentInChildren<Text>(); a = int.Parse(nowTime);    b = int.Parse(highscore;} private void OnTriggerEnter2D(Collider2D collision){      if (collision.tag == Player){        nowTime = timerText.text; PlayerPrefs.SetString("NOW", score); PlayerPrefs.Save(); if (a > b){        //ここにベストスコアを保存する方法を知りたい        } SceneManager.LoadScene("topscene"); }}

補足情報(FW/ツールのバージョンなど)

ちなみに別のスクリプトで PlayerPrefs.GetStringで結果を出すので、ハイスコアと現在のスコアの保存方法だけ教えてもらいたいです。

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

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

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

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

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

PinoMatcha

2020/12/08 15:36

ソースコードが見にくいので、インデントなどに気を付けながら「コードの挿入」機能を使ってきちんとコードを見やすくしてください。
tttttm

2020/12/08 15:51

すいません。修正しました。
guest

回答1

0

ベストアンサー

見たところPlayerPrefsを使えてるようですので、PlayerPrefs.SetInt()を使えばいいかと思います…。

PlayerPrefs (スクリプトリファレンス)


(▼ちょっとしたアドバイスです)
扱いやすいとは思うんですが、何でもかんでもstaticは付けない方が良いです。

追記

テキストを数値に変換するのではなく、キャラクターの距離(すなわちスコア)は別の変数で保持しておいたほうがいいと思います。
下のスクリプトでハイスコアの更新はできるはずです。

プレイヤーが衝突時、現在のスコアがハイスコアを上回っていたらハイスコアを更新するスクリプト

C#

1private int currentScore; 2private int highScore; 3 4private void OnTriggerEnter2D(Collider2D collision) { 5 if (collision.tag == "Player") { 6 Debug.Log("プレイヤーが衝突"); 7 if (currentScore > highScore) { 8 Debug.Log("ハイスコア更新"); 9 highScore = currentScore; 10 } 11 } 12}

tttttmさんのスクリプトを見ると、ゲーム開始時に一度だけ呼ばれるStart()でaとbの処理が行われているため、値が更新されていません。
それが原因ではないでしょうか?

投稿2020/12/08 15:51

編集2020/12/08 16:44
PinoMatcha

総合スコア368

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

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

tttttm

2020/12/08 16:06

スコアがベストスコアより大きくなった時に代入して、小さくなった時にはしないようにしたいのですが、全くできません。
PinoMatcha

2020/12/08 16:44

回答に追記しました。
tttttm

2020/12/09 02:38

currentScoreにstring型の数字のテキストを入れる方法はありますか?
PinoMatcha

2020/12/09 02:43

currentScoreはint型なのでstringは入りませんが、 currentScore.ToString() で文字列に変換できます。
tttttm

2020/12/09 02:46

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問