###前提・実現したいこと
リザルト画面で、獲得した★の数をステージセレクト画面でも表示したいのですが
if文でどうにか単体(1ステージ分)は表示することはできましたが、このままだと
ただひたすらif文を繰り返すことになるので・・・(該当ソース2より)
if文以外で各ステージ分を表示する方法をご存知でしたらご教示ください。
ステージセレクトイメージ画像
1画面にステージ数が7つあり、1ステージにつき★は3個で全部で21個ある状態です
###該当のソースコード1
gememain側のソース ゲームメインの星の保存処理 //コルーチン処理(コインの数に合わせて0.3fごとに☆を表示) IEnumerator Evaluation() { //以前のプレイで獲得したコインの数を取得する var savedCoin = PlayerPrefs.GetInt("SAVECOIN" + StageNo, -1); //左側の★は常に表示 yield return new WaitForSeconds(0.3f); StarImage[0].SetActive(true); ---獲得した1番目の★を保存--------- PlayerPrefs.SetInt("STARSAVE1" + StageNo, 1); //中央の★・今回か前回がコイン3、もしくは既に星3つ達成済みなら表示 yield return new WaitForSeconds(0.3f); StarImage[1].SetActive(CoinTotal == 3 || savedCoin == 3 || savedCoin == 30); //右側の★・今回か前回がコイン0、もしくは既に星3つ達成済みなら表示 yield return new WaitForSeconds(0.3f); StarImage[2].SetActive(CoinTotal == 0 || savedCoin == 0 || savedCoin == 30); //コインの数を保存する //前回コイン0で今回コイン3、または、前回コイン3で今回コイン0→星3つ条件達成保存 //上記ではなく、今回コイン0か3で星3つ条件未達成の場合→コイン保存 if ((savedCoin == 0 && CoinTotal == 3) || (savedCoin == 3 && CoinTotal == 0)) { PlayerPrefs.SetInt("SAVECOIN" + StageNo, 30); } else if(CoinTotal == 0 || CoinTotal == 3) { if (PlayerPrefs.GetInt("SAVECOIN" + StageNo) < 30) { PlayerPrefs.SetInt("SAVECOIN" + StageNo, CoinTotal); } } -------------------------------------------------------------------- 獲得した2番目と3番目の★を保存 if (CoinTotal == 0) { PlayerPrefs.SetInt("STARSAVE3" + StageNo, 1); } else if(CoinTotal == 3) { PlayerPrefs.SetInt("STARSAVE2" + StageNo, 1); } } ``` ###該当のソースコード2
--------StageSelect側のソース-------------
void start(){
int clearStageNo = PlayerPrefs.GetInt("CLEAR", 0);
for (int i = 0; i <= stageButtons.GetUpperBound(0); i++)
{
//ステージクリアしているかの有無
bool clearFlg = (clearStageNo >= i);
stageButtons[i].GetComponent<Button>().interactable = clearFlg;
LockImage[i].SetActive(!clearFlg);
}
if文でとりあえず表示(1ステージ、2ステージ、3ステージ・・・と続くと効率が悪い)
if (PlayerPrefs.GetInt("STARSAVE1" + clearStageNo) == 1)
{
starImage[0].SetActive(true);
}
if (PlayerPrefs.GetInt("STARSAVE2" + clearStageNo) == 1) { starImage[1].SetActive(true); } if (PlayerPrefs.GetInt("STARSAVE3" + clearStageNo) == 1) { starImage[2].SetActive(true); }
}
###補足情報(言語/FW/ツール等のバージョンなど) Unity 2018.3.11f1 言語:C# 追記 ゲームメインの★の保存は以下のように変更(該当ソース1) //★1番目、2番目、3番目の保存処理 PlayerPrefs.SetInt("STARSAVE" + 1 + StageNo, 1); PlayerPrefs.SetInt("STARSAVE" + 2 + StageNo, 1); PlayerPrefs.SetInt("STARSAVE" + 3 + StageNo, 1); ###改良後のソース
//セレクトボタン側(ソースはボタンにアタッチ済み)
--------hogefugapiyo様のソースを参考-------------
public GameObject[] starImage; //★画像
public int stageID; void Start() { // ここでステージの星チェック for (int i = 0; i < starImage.Length; i++) { starImage[i].SetActive(PlayerPrefs.GetInt("STARSAVE" + (i + 1) + stageID) == 1 ? true : false); Debug.Log("★" + PlayerPrefs.GetInt("STARSAVE" + (i + 1) + stageID)); } Debug.Log("ステージ" + stageID); }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/21 15:20 編集
2019/09/21 16:24 編集