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

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

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

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

Unity

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

Q&A

解決済

1回答

2594閲覧

UnityのTextMeshProで困っています。

nattyu

総合スコア4

C#

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

Unity

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

0グッド

0クリップ

投稿2020/05/29 07:52

現在Unity3Dで数学のゲームを作っています。質問は2つあります。
迫ってくる壁にテキストを表示させたく、Text、TextMesh、TextMeshProを試したところ、TextMeshPro が一番きれいに表示されるため、これで制作を進めることにしました。
壁を3つ用意し、それぞれがTextMeshProを子に持って、そのテキストをスクリプトで制御したいです。

(質問1)
テキストの内容をスクリプトで変えようとすると、Start関数、Update関数ではちゃんと変わるのですが、ほかの関数では上手く表示されませんでした。
TextMeshProはStart関数かUpdate関数でしか、スクリプトからテキスト内容をコントロールできないのでしょうか?

(質問2)
TextMeshPro複数個を1つの配列に入れ、配列から取り出してテキストを変えようとすると上手くいきませんでした。(Start関数、Update関数でも上手くいきませんでした)
TextMeshProは配列の中に入れて扱えないのでしょうか?

どうぞよろしくお願いします。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using TMPro; 5 6public class QuesGenerator : MonoBehaviour 7{ 8 public GameObject Answer1; 9 public GameObject Answer2; 10 public GameObject Answer3; 11 12 public TextMeshPro ans1; 13 public TextMeshPro ans2; 14 public TextMeshPro ans3; 15 16 string[] ad; 17 string[] ques; 18 string[] ans; 19 20 void Start() 21 { 22 CsvLoad(); 23 } 24 25 void Update() 26 { 27 28 } 29 30 void LateUpdate() 31 { 32 //QuestionLoad(); 33 } 34 35 void CsvLoad() 36 { 37 TextAsset adTextFile = Resources.Load("text/sample", typeof(TextAsset)) as TextAsset; 38 ad = adTextFile.text.Split("\n"[0]); 39 40 ques = new string[ad.Length]; 41 ans = new string[ad.Length]; 42 43 for (int i = 0; i < ad.Length; i++) 44 { 45 ques[i] = ad[i].Split(","[0])[0]; 46 ans[i] = ad[i].Split(","[0])[1]; 47 } 48 } 49 50 public void QuestionLoad() 51 { 52 int rnd = Random.Range(1, 101); 53 int k = Random.Range(0, 3); 54 55 if (rnd == 1) 56 { 57 rnd++; 58 //Ques.text = ques[rnd]; 59 ans1.text = ans[rnd + 2]; 60 ans2.text = ans[rnd]; 61 ans3.text = ans[rnd + 1]; 62 63 //A = ans[rnd]; 64 } 65 else if (rnd == 100) 66 { 67 rnd--; 68 //Ques.text = ques[rnd]; 69 ans1.text = ans[rnd - 3]; 70 ans2.text = ans[rnd - 2]; 71 ans3.text = ans[rnd - 1]; 72 73 //A = ans[rnd]; 74 } 75 else 76 { 77 //Ques.text = ques[rnd]; 78 ans1.text = ans[rnd - 1]; 79 ans2.text = ans[rnd]; 80 ans3.text = ans[rnd + 1]; 81 82 //A = ans[rnd]; 83 } 84 } 85}

試したこと

配列の中にTextMeshProを入れ、

answers_Text[0].text = ans[rand];

の様に指定しても、テキストは変わりませんでした。

補足情報

バージョンはUnity2019.3.9f1です。
csvファイルは、102行2列のテキストです(問題を100問用意したため)

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

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

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

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

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

guest

回答1

0

ベストアンサー

(質問1)

出来ます。

(質問2)

扱えます。

投稿2020/05/29 12:31

Tto777

総合スコア189

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

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

nattyu

2020/05/29 12:45

ご回答ありがとうございます。 自分のスクリプトの場合だと、テキストの取得の仕方が間違っているのでしょうか? お返事いただけると幸いです。
Tto777

2020/05/29 16:13 編集

質問1に関してはQuestionLoadを呼び出している箇所が存在しないのが原因です。 どういった条件でテキストの内容をスクリプトで変えようとしているのか不明ですが変えたいタイミングで呼び出す様にして下さい。
Tto777

2020/05/29 16:28 編集

質問2はそのコードで問題ありません。 変更されないとするならばanswers_Text[0]とans[rand]がNullや""の可能性があります。 中身をデバッガ、若しくはDebug.Logなどで確認して下さい。
nattyu

2020/05/30 13:26

ありがとうございます。 質問1、2両方とも一応解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問