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

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

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

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

Unity3D

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Unity

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

Q&A

解決済

1回答

3664閲覧

ステージ選択画面にもステージごと、にリザルト画面の星を表示したいです。

feegegeeg

総合スコア7

C#

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

Unity3D

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Unity

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

0グッド

1クリップ

投稿2020/02/12 10:03

前提・実現したいこと

Unityにおいて
ステージ選択画面にもステージごとにリザルト画面の星を表示したいです。

下図の現在ステージ1をクリアした時に表示される★を
イメージ説明

下図のステージ選択画面でも取得した★をステージごとに表示したいと考えています。
イメージ説明

しかしリザルト画面においてPlayerprefsを用いて保存したはずの★の数が、
シーンを変えるとそもそもキーがなくなるという問題があり、実現できません。
どなたかクリア画面のコードと、ステージ選択画面のコードを参考にお力お貸しください。

ステージ1クリア画面のコード

IEnumerator Evaluation() { if (isGoal == true)//ステージをゴールのみした場合 { NoStar[0].SetActive(true);//左側の星の枠斑をセット NoStar[1].SetActive(true);//真ん中の星の枠斑をセット NoStar[2].SetActive(true);//右側の星の枠斑をセット yield return null; seScr.StarSE();//SEを流す Star[0].SetActive(true);//左側の☆を表示 hosi = 1;//hosiに1を代入 yield return new WaitForSeconds(0.65f);//0.65秒待つ if (time < 10.0)        {//ステージをゴールして、タイムも10秒より短いタイムの時 yield return null; seScr.StarSE();//SEを流す Star[1].SetActive(true);//真ん中の星を表示 hosi = 2;//星に2を代入 yield return new WaitForSeconds(0.65f);    if (time < 5.0)//クリアタイムが5秒以下の場合     { yield return null; seScr.StarSE(); Star[2].SetActive(true); hosi = 3; yield return new WaitForSeconds(0.65f);   } } } if (PlayerPrefs.HasKey("SAVESTAR" + StageNo))//もしステージ1の★のデータを持っていた場合 { if (PlayerPrefs.GetInt("SAVESTAR" + StageNo) < hosi)//もし以前のプレイ時よりも★の獲得枚数が多い場合 { PlayerPrefs.SetInt("SAVESTAR" + StageNo, hosi);//★の個数をセットする } PlayerPrefs.Save();       yield break; } PlayerPrefs.SetInt("SAVESTAR" + StageNo, hosi);      PlayerPrefs.Save();      yield break; } }

選択画面におけるコード

public StageNo=1;

C# if (PlayerPrefs.HasKey("SAVESTAR" + StageNo)) { int Hosi = PlayerPrefs.GetInt("SAVESTAR" + StageNo); if (Hosi <= 1)//もし星が1つなら { Star[0].SetActive(true);//左側の☆を表示 if (Hosi <= 2)//もし星が二つなら { Star[1].SetActive(true);//真ん中の☆を表示 if (Hosi <= 3)//もし星が三つなら { Star[2].SetActive(true);//右側の★を表示 } } } } }

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

パッと見た感じ思いつくのは、
ステージ1クリア画面のコードの「StageNo」が1以外の値で保存されている。
ですかね。
if (PlayerPrefs.HasKey("SAVESTAR" + StageNo))//もしステージ1の★のデータを持っていた場合
これの前にprint(StageNo)を入れてみるか、以下の場所にデータ保存されているので、きちんと保存できているか確認してみてくd
PlayerPrefsの謎(解決編)

投稿2020/02/12 12:08

yuuyu

総合スコア1139

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

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

feegegeeg

2020/02/12 12:40

お恥ずかしながらミスの理由が、IF分の<の向きが逆と言う単純なミスでした。
feegegeeg

2020/02/12 12:41

print();でデバックして気付けたミスなのでベストアンサーとさせてもらいます。
yuuyu

2020/02/12 12:42

文章の最後の方反映されずに送信していたみたいですね。。(「みてくd」→「みてください」) 解決できて良かったです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問