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

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

ただいまの
回答率

90.51%

  • C#

    9054questions

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

  • Unity

    5515questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Visual Studio

    2365questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Unity2D

    1269questions

【Unity&C#】別のページにも同じテキストを反映する方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 164

k2zu1112

score 3

最終目標

画像1枚目のGOALテキストと画像2枚目のGOALテキストの連動
イメージ説明
![イメージ説明](1012ba8406ad4d7a50dc26eec68ec117.gif)

現状

1枚目のGOALテキストはスコアが上がる度に数値も上がっていくが、2枚目は反応がない(GOALの字はUI→Textとして書き込んでいる初期設定のまま)
イメージ説明

 理想的な解決方法(他の方法でも解決すれば満足です)

1枚目のテキストボックスの内容(変化があった際も)を、そっくりそのまま別のテキストボックスにも反映してくれるようなスクリプトの構築。
または、複数ページにおいても同じ動きをする複数のテキストボックスの製作。

補足

・画像1枚目右下の「Shop」ボタンを押すことで、画像2枚目がPrefabsを使ったインスタンスとして出現(その間1枚目も存在はしているが、2枚目が上(手前)にあるために1枚目は全く見えない)
・2枚目のテキストに数値を反映することが出来れば、その間は1枚目のテキストは消えていても良い
・3枚目もある(2枚目とほぼ同じ)のでそちらにも使いたい

下に現在のスクリプトを載せています。
若干見にくいですが、必要なところを消してしまわないように全文載せています。
有識者の方、どうぞよろしくお願いします。

ng System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEngine.UI;
using System;

public class GameManager : MonoBehaviour {

    //定数定義
    private const int MAX_ORB = 1000; //オーブ最大数
    private const int RESPAWN_TIME = 120; //オーブが発生する秒数
    private const int MAX_LEVEL = 5; //最大キーパーレベル

    //データセーブ用キー
    private const string KEY_SCORE = "SCORE"; //スコア
    private const string KEY_LEVEL = "LEVEL"; //レベル
    private const string KEY_ORB = "ORB"; //オーブ数
    private const string KEY_TIME = "TIME"; //時間
    private const string KEY_ITEM = "ITEM"; //アイテム

    //オブジェクト参照
    public GameObject orbPrefab; //オーブプレハブ
    public GameObject trophyPrefab; //トロフィープレハブ
    public GameObject canvasGame; //ゲームキャンバス
    public GameObject textScore; //スコアテキスト
    public GameObject imageKeeper; //キーパー
    public float clickrate = 0.5f;
    public GameObject ball;
    public List<int> prices;

    //メンバ変数
    public int score = 0; //現在のスコア
    //private int nextScore = 100; //レベルアップまでに必要なスコア

    private int currentOrb = 0; //現在のオーブ数

    private int keeperLevel = 0; //キーパーのレベル

    private DateTime lastDateTime; //前回オーブを生成した瞬間

    //private int[] nextScoreTable = new int[] { 100,200,300,400,500 }; //レベルアップ値

    private int numOfOrb; //まとめて生成するオーブの数

    // Use this for initialization
    void Start () {

        //データ削除メソッド
        //PlayerPrefs.DeleteAll();

        //初期設定
        score = PlayerPrefs.GetInt("SCORE", 0);
        //keeperLevel = PlayerPrefs.GetInt(KEY_LEVEL, 0);

        //nextScore = nextScoreTable[keeperLevel];
        //imageKeeper.GetComponent<KeeperManager>().SetKeeperPicture(keeperLevel);
        //imageKeeper.GetComponent<KeeperManager>().SetKeeperScale(score, nextScore);       

        RefreshScoreText();

    }

    // Update is called once per frame
    void Update () {
        //まとめて生成するオーブがあれば生成
        while (numOfOrb > 0)
        {
            Invoke("CreateNewOrb",0.1f*numOfOrb);
            numOfOrb--;
        }
    }

    //バックグラウンドへの移行時と復帰時(アプリ起動時も含む)に呼び出される

    private void OnApplicationPause(bool pauseStatus)
    {
        if (pauseStatus)
        {
            //アプリがバックグラウンドへ移行
        }
        else
        {
            //バックグラウンドから復帰
            //時間の復元
            string time = PlayerPrefs.GetString(KEY_TIME, "");
            if (time == "")
            {
                lastDateTime = DateTime.UtcNow;
            }
            else
            {
                long temp = Convert.ToInt64(time);
                lastDateTime = DateTime.FromBinary(temp);
            }

            numOfOrb = 0;
            //時間によるオーブ自動生成
            TimeSpan timeSpan = DateTime.UtcNow - lastDateTime;
            if (timeSpan >= TimeSpan.FromSeconds(RESPAWN_TIME))
            {
                while (timeSpan >= TimeSpan.FromSeconds(RESPAWN_TIME))
                {
                    if (numOfOrb < MAX_ORB)
                    {
                        numOfOrb++;
                    }
                    timeSpan -= TimeSpan.FromSeconds(RESPAWN_TIME);
                }
            }
        }
    }

    //新しいオーブの生成
    public void CreateNewOrb()
    {
        lastDateTime = DateTime.UtcNow;
        if (currentOrb >= MAX_ORB)
        {
            return;
        }
        CreateOrb();
        currentOrb++;

        SaveGameData();
    }

    //オーブ生成
    public void CreateOrb()
    {
        GameObject orb = (GameObject)Instantiate(orbPrefab);
        orb.transform.SetParent(canvasGame.transform, false);
        orb.transform.localPosition = new Vector3(
            UnityEngine.Random.Range (-100.0f, 100.0f),//オーブの出発点(横x)
            UnityEngine.Random.Range (-300.0f, -450.0f), //オーブの出発点(縦y)
            0f);

        orb.GetComponent<OrbManager>().Flyorb();

        //ボールアニメーション
        StartCoroutine("ClickAnim");//"ClickAnim"のコルーチンを呼ぶ.

    }



    //オーブ入手
    public void GetOrb()
    {
        score += 1;
        //キーパー画像切り替えメソッド挿入予定

        /*//レベルアップ値を超えないように制限
        if (score > nextScore)
        {
            score = nextScore;
        }

        KeeperLevelUp();*/
        RefreshScoreText();
        /*imageKeeper.GetComponent<KeeperManager>().SetKeeperScale(score, nextScore);
        SaveGameData();

        //ゲームクリア判定
        if ((score == nextScore) && (keeperLevel == MAX_LEVEL))
        {
            //ClearEffect();
        }
        currentOrb--;
        */

    }

    //スコアテキスト更新
    void RefreshScoreText()
    {
        textScore.GetComponent<Text>().text =
            score + "GOAL";
    }

   /* //キーパーのレベル管理
    void KeeperLevelUp()
    {
        if (score >= nextScore)
        {
            if (keeperLevel < MAX_LEVEL)
            {
                keeperLevel++;
                score = 0;

                KeeperLevelUpEffect();

                //nextScore = nextScoreTable[keeperLevel];
                imageKeeper.GetComponent<KeeperManager>().SetKeeperPicture(keeperLevel);
            }
        }
    }

    //レベルアップ時の演出
    void KeeperLevelUpEffect()
    {
        GameObject trophy = (GameObject)Instantiate(trophyPrefab);
        trophy.transform.SetParent(canvasGame.transform, false);
        trophy.transform.SetSiblingIndex(5);

        Destroy(trophy, 0.5f);
    }*/
    //寺が最高レベル
    /*void ClearEffect()
    {
        GameObject ??= (GameObject)Instantiate(??);
        ??.transform.SetParent(canvasGame.transform, false);
    }*/

    //ゲームデータをセーブ
    void SaveGameData()
    {
        PlayerPrefs.SetInt("SCORE", score);
        PlayerPrefs.SetInt(KEY_LEVEL,keeperLevel);
        PlayerPrefs.SetInt(KEY_ORB,currentOrb);
        PlayerPrefs.SetString(KEY_TIME,lastDateTime.ToBinary().ToString());


        PlayerPrefs.Save();
    }

    //ボールサイズ編集
    IEnumerator ClickAnim()
    {
        float time = 0;//アニメーションの時間を記録. 
        float scale = 1;//クッキーサイズ. 
        while (time < clickrate / 2)
        {//アニメーションの半分の時間を拡大に使う. 
            time += Time.fixedDeltaTime;//時間をフレームの増分足す. 
            scale = 1 + time / clickrate / 8;
            ball.transform.localScale = new Vector2(scale, scale);//クッキーのサイズを変える. 
            yield return new WaitForSeconds(Time.deltaTime);//フレームの終わりまで待つ. 
        }
        //上の逆バージョン(今度は縮小処理)
        while (time < clickrate / 2)
        {
            time += Time.fixedDeltaTime;
            scale -= time / clickrate / 8;
            ball.transform.localScale = new Vector2(scale, scale);
            yield return new WaitForSeconds(Time.deltaTime);
        }
        ball.transform.localScale = new Vector2(1, 1);//スケールに誤差があるかもしれないので、ここで(1,1)に戻す. 
    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2019/01/07 10:21

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

checkベストアンサー

0

ショップメニューを開く瞬間に、該当するテキストボックスの内容をコピーすればいいと思います

//ショップメニューのプレハブに取り付けて、Textに書き換えたいオブジェクトをセット
class ShopText:MonoBehaviour {
    public Text text;
}


// ショップメニューを開くところ 
GameObject shop = (GameObject)Instantiate(shopprefab);
Text text = shop.GetComponent<ShopText>().text // 書き換えたいテキストのオブジェクトを取得
text.text = textScore.GetComponent<Text>().text;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/08 09:39

    izmktr様、ご回答ありがとうございます。
    スクリプト内のネームだけ変更して使わせてもらっているのですが、
    //ショップメニューを開くところ から2段下の<ShopText>の部分にどうしてもエラーが出てしまいます。(現状の項目にスクショを掲載しています。)
    Unity側ではエラーコード CS0118:`CreatePopupWindow.TextScore1' is a `field' but a `type' was expected
    と出ているのですが、どのようにすれば解決しますでしょうか?
    お手数ですが、お答えいただけると嬉しいです。

    キャンセル

  • 2019/01/08 10:25

    TextScore1って変数名ですよね、そこにはクラス名を指定します。

    キャンセル

  • 2019/01/08 20:23

    ご指摘ありがとうございます。
    無事にエラーが解消されました。

    キャンセル

同じタグがついた質問を見る

  • C#

    9054questions

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

  • Unity

    5515questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Visual Studio

    2365questions

    Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

  • Unity2D

    1269questions