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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

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

Q&A

解決済

1回答

804閲覧

2回目以降Textに適当な文字を入れることが出来ない

Piesuke

総合スコア15

Unity

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

0グッド

0クリップ

投稿2018/07/10 05:53

switch文を使って、ある条件の時Textに文字を入れる実装を行っています。が、うまく行きません。

switch (nowImageNum) { case 0: for (int i = 0; i < itemNum; i++) { if (times == 0) { //デッキの情報を入れるプレハブを作成 cardInfoChild = Instantiate(cardInfoItem, cardInfoItemTarget); } //それぞれのtextに情報を入れる cardInfoChild.transform.Find("CardName").GetComponent<Text>().text = cm.cardTypeList[i]; cardInfoChild.transform.Find("CardRare").GetComponent<Text>().text = cm.cardRareList[i]; cardInfoChild.transform.Find("CardNum").GetComponent<Text>().text = Random.Range(1, 9).ToString(); } times++; break;

この文をもう一つ作り、条件によってTextに表示する情報を変えたいのですが、なぜか生成されたクローンのうち一つしか変わりません。どうすればよろしいでしょうか。

検証したこと

switch文が回るたびにcloneをDestroy,Instantiateしたらうまく行くのではないかと思ったのでやってみたところ、なぜかDestroyとInstantiateが同時に回らず、同じswitch文を二回回して、Destroy→Instantiateとやらなければ行けなかったので、諦めました。

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

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

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

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

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

sakura_hana

2018/07/10 09:41

やりたいことは「1回目にcase0の場合はitemNum個のTextを新規生成してそれぞれ文字を入れる。2回目以降case0の場合は既存のitemNum個のTextの文字をそれぞれ切り替える」ということであっていますか?
Piesuke

2018/07/10 13:26

合ってます。
guest

回答1

0

ベストアンサー

質問の内容がいまいち理解出来ていないので勝手な解釈で回答します。

・生成されたクローンのうち一つしか変わらない
一度目のswitchではtimesが0なので以下の処理が呼ばれ、Textへの代入ができる

if (times == 0) { //デッキの情報を入れるプレハブを作成 cardInfoChild = Instantiate(cardInfoItem, cardInfoItemTarget); }

二度目からはtimesが0では無くなるので上記の処理が呼ばれずcardInfoChild の値は一度目の最後に生成したクローンのままになるので「生成されたクローンのうち一つしか変わらない」状態になる

・この文をもう一つ作り、条件によってTextに表示する情報を変えたい
これをcase 1: case 2:を作りそれぞれで入れるテキストを変えたいという事なら、生成と変更を分けた方がいいと思います。

GameObject[] cardInfoChild = new GameObject[itemNum]; for (int i = 0; i < itemNum; i++) { //デッキの情報を入れるプレハブを作成 cardInfoChild[i] = Instantiate(cardInfoItem, cardInfoItemTarget); }
switch(nowImageNum) { case 0: for (int i = 0; i < itemNum; i++) { //それぞれのtextに情報を入れる cardInfoChild[i].transform.Find("CardName").GetComponent<Text>().text = cm.cardTypeList[i]; cardInfoChild[i].transform.Find("CardRare").GetComponent<Text>().text = cm.cardRareList[i]; cardInfoChild[i].transform.Find("CardNum").GetComponent<Text>().text = Random.Range(1, 9).ToString(); } break; case 1; break; }

検討違いの回答でしたらすいません。

投稿2018/07/10 13:28

m_hikari

総合スコア64

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問