🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

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

Q&A

解決済

1回答

866閲覧

ゲーム画面で取ったコインをタイトル画面に増やしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2019/12/20 09:27

実現したいこと

ゲームシーンで取ったコインをタイトル画面の増やしていきたい

現状

スコアと同じように記述しているので前回のとった数しか表示できない

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class GameController : MonoBehaviour { public Text scoreLabel; //ゲームステート enum State { Ready,Play,GameOver } State state; int score; int gem; public ShipController ship; public GameObject walls; public Text StateLabel; public GameObject appe; public Text GemLabel; // Start is called before the first frame update void Start() { //開始時にRedayステート開始 Ready(); } // Update is called once per frame void LateUpdate() { //ステートごとにイベント監視 switch (state) { case State.Ready://タッチしたらゲームスタート if (Input.GetButtonDown("Fire1")) GameStart(); break; case State.Play://シップが破壊されたらゲームオーバー if (ship.IsDead()) GameOver(); break; case State.GameOver://タッチしたらシーンをリロード if (Input.GetButtonDown("Fire1")) Reload(); break; } } void Update() { } void Ready() { state = State.Ready; //オブジェクトを無効にする ship.SetSteerActive(false); walls.SetActive(false); appe.SetActive(false); //ラベル更新 scoreLabel.text = "Score : " + 0; StateLabel.gameObject.SetActive(true); StateLabel.text = "READY"; GemLabel.text = "Gem : " + 0; } void GameStart() { state = State.Play; //オブジェクトを有効にする ship.SetSteerActive(true); walls.SetActive(true); appe.SetActive(true); //最初の入力だけをゲームコントローラーから渡す ship.Flap(); //ラベル更新 StateLabel.gameObject.SetActive(false); StateLabel.text = ""; } void GameOver() { state = State.GameOver; //シーン中のscrollObjectコンポーネントを探し出す ScrollObject[] scrollObjects = GameObject.FindObjectsOfType<ScrollObject>(); //シーン中のscrollObjectコンポーネント無効にする foreach (ScrollObject so in scrollObjects) so.enabled = false; //オブジェクト無効 appe.SetActive(false); //ラベル更新 StateLabel.gameObject.SetActive(true); StateLabel.text = "GAMEOVER"; //ハイスコアを更新 if (PlayerPrefs.GetInt("HighScore") < score) { PlayerPrefs.SetInt("HighScore", score); } PlayerPrefs.SetInt("Gem", gem); } void Reload() { //タイトルシーンを読み込み SceneManager.LoadScene("Title"); } public void IncreaseScore() { score++; //スコア更新 scoreLabel.text = "Score : " + score; } public void IncreaseGem() { gem++; GemLabel.text = "Gem : " + gem; ; } }
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class TitleController : MonoBehaviour { public Text highScoreLabel; public Text GemLabel; // Start is called before the first frame update public void Start() { //ハイスコアを表示 highScoreLabel.text = "High Score : " + PlayerPrefs.GetInt("HighScore"); GemLabel.text = "Gem : " + PlayerPrefs.GetInt("Gem"); } // Update is called once per frame void Update() { if (Input.GetButtonDown("Fire1")) { //ゲームシーン読み込み SceneManager.LoadScene("GameScene"); } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

ゲームシーンで使用している変数gemが、
タイトルシーンで表示しているテキストGemLabel.textに加算された状態で表示させたい。
と認識しました。

例えば、
TitleControllerに変数totalgem(変数名はどうでもいいですが)を追記して、

totalgem += PlayerPrefs.GetInt("Gem");
GemLabel.text = "Gem : " + totalgem;

上記の様にすれば、
追記した変数totalgemにGemの値が加算された状態で
GemLabel.textに表示されるのではと思います。

投稿2019/12/20 11:13

Softon

総合スコア16

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

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

退会済みユーザー

退会済みユーザー

2019/12/20 11:33

public class TitleController : MonoBehaviour { public Text highScoreLabel; public Text GemLabel; int totalgem; // Start is called before the first frame update public void Start() { //ハイスコアを表示 highScoreLabel.text = "High Score : " + PlayerPrefs.GetInt("HighScore"); GemLabel.text = "Gem : " + totalgem; totalgem+= PlayerPrefs.GetInt("Gem"); } // Update is called once per frame void Update() { if (Input.GetButtonDown("Fire1")) { Invoke("StGame", 1f); } } void StGame() { //ゲームシーン読み込み SceneManager.LoadScene("GameScene"); } } こんな感じにしてみたのですが0のままになりました
Softon

2019/12/20 11:36

GemLabel.text = "Gem : " + totalgem; totalgem+= PlayerPrefs.GetInt("Gem"); ではなく totalgem+= PlayerPrefs.GetInt("Gem"); GemLabel.text = "Gem : " + totalgem; と上下の処理を入れ変えた場合、どうなりますか? totalgemに加算してからGemLabel.textに表示するという流れに変えてみてください。
退会済みユーザー

退会済みユーザー

2019/12/20 12:14

早い返事ありがとうございます 変えてみたのですがやはり合計にならずにその時取得した数になってしまいます。
退会済みユーザー

退会済みユーザー

2019/12/20 12:17

totalgem += totalgem + PlayerPrefs.GetInt("Gem"); にもしてみましたができなかったです
Softon

2019/12/20 13:15

すみません。 変数 totalgem は「int totalgem」ではなく「static int totalgem」としてみて下さい。 staticが付いていないと、変数 totalgem は毎回初期化されてしまいます。
退会済みユーザー

退会済みユーザー

2019/12/20 13:22

ほんとうですね!できました 昼に違うこと調べていたときにでてきていたのにわすれてました もしガチャシーンを作るとしたらこのポイントから100引いてタイトルシーンに反映したいんですけどどんな感じで書けばいいかヒントもらえないでしょうか
Softon

2019/12/20 13:34

>> ほんとうですね!できました 良かったです! >> ガチャシーンを作るとしたらこのポイントから100引いてタイトルシーンに反映したい タイトルシーンとガチャシーン間の変数のやり取りについては、 提示いただいたソースを見る限りだと、 使い慣れたPlayerPrefsで変数totalgemも今回同様にやり取りするのが早いかもしれません……。 強いて言うなら、 僕だったらgetterとsetterを使ってシーン間の変数のやり取りを行うと思います。 が、僕も弱小なので何が一番良いのかは分かりません……。 参考になれば幸いです。
退会済みユーザー

退会済みユーザー

2019/12/20 13:51

まだ本で学び始めなのでありがたいです getterとsetterも調べて参考にさせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問