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

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

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

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

Unity

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

Q&A

解決済

2回答

1174閲覧

アタッチしたオブジェクトの変数を取得し、 その変数を子要素に反映させる方法がわかりません。

Lemon_0715

総合スコア60

C#

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

Unity

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

0グッド

0クリップ

投稿2021/08/24 02:23

編集2021/08/24 06:41

前提・実現したいこと

ガチャアプリの図鑑のシステムを作っています。
図鑑番号や名前などの変数を入れたスクリプトをアタッチした空のオブジェクトを作成しました。
UIのパネルの子要素に同じように図鑑番号や名前のテキストがあるのですが、
現在用意した空のオブジェクト無視で全部いちいち情報を手打ちしています。なので実質二度手間になっています。

なのでこれを効率よく表示できるようにしたいです。
パネルにpublic gameobject charadate;の入ったスクリプトをアタッチし、インスペクタから空オブジェクト(キャラデータ変数のあるスクリプトがアタッチされたもの)をドラッグ&ドロップをするだけでパネルの子要素のテキストが空オブジェクトと連動するにはどうしたらいいでしょうか...?

アタッチしたオブジェクトの変数を取得し、
その変数を子要素に反映させる方法がわかりません

###キャラデータのスクリプト

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Book : MonoBehaviour { public int 図鑑番号; public string ひらがな; public string 名前; public string 性別; public string 属性; public int 出た回数; }

###現在パネルにアタッチしているスクリプト

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CharaWords : MonoBehaviour { public Text 表示名前; public string 名前; public Text 表示ひらがな; public string ひらがな; void OnEnable() { 表示名前.text = string.Format(名前); 表示ひらがな.text = string.Format(ひらがな); } }

###追記
0001Sakura というオブジェクトにキャラデータ(Book)スクリプトをアタッチしています
イメージ説明

★キャラ紹介パネル0001にアタッチしているCharawordsスクリプトの自作リストの
Charadateに0001Sakuraをアタッチすれば
イメージ説明

★キャラ紹介パネル0001の子要素であるアイコン ふりがな 名前 といったテキストやImageに反映できるようにしたいです。
イメージ説明

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

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

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

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

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

hogefugapiyo

2021/08/24 05:45

構成がちょっとわからないです。キャラデータっていうのはBookで載ってるやつですか? UI構成とかインスペクターの情報とかスクショがあるとわかりやすいと思います
Lemon_0715

2021/08/24 06:42

Bookに乗っているやつで間違いないです。 スクショを追記で載せていただきました。
Lemon_0715

2021/08/24 10:36

今回は私の技術の低さもあり、hogefugapiyo様の回答をベストアンサーにさせていただきました。 bboydaisuke様の回答はスキルの成長に観点を置き長期的に見れば非常に素晴らしいものになると思うため勉強にさせていただきたいです。 ご回答ありがとうございました。
guest

回答2

0

ベストアンサー

補足質問した手前
コンポーネントさえ取得できれば
中のデータ呼んでこれるのでとりあえずそれで対応できそうな気がします(現状の構成を活かすなら)

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class CharaWords : MonoBehaviour 7{ 8 public gameobject charadate; 9 public Text 表示名前; 10 public string 名前; 11 public Text 表示ひらがな; 12 public string ひらがな; 13 14 Book book; 15 16 void Awake(){ 17 book = charadate.GetComponent<Book>(); // charadate から Book コンポーネント取得 18 if(book != null) Debug.Log(book.名前); // 取得できたらとりあえず名前出力してみる 19 } 20 21 void OnEnable() 22 { 23 表示名前.text = string.Format(名前); 24 表示ひらがな.text = string.Format(ひらがな); 25 } 26}

この作り方は、インスペクターでポチポチ入力していくので非常に大変になってくると思います。
たとえば、「1番から50番まで、実は名前が1個ずつズレてた」とかになったときの対応を考えるとうわっってなると思います。

拡張性、保守性を上げたいなと思ったらbboydaisukeさんの出した例のようにデータベースを外部で作ってそれを読み込んで使う形式にすると良いかと思います。
たとえば、ガチャのアイテムデータが全部エクセルで管理できたら楽ですよね!

投稿2021/08/24 08:43

hogefugapiyo

総合スコア3302

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

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

Lemon_0715

2021/08/24 10:46

(book.名前) を表示名前.text = で表示したいのですがどうすればいいのでしょうか...
guest

0

データ管理の方法は用途によって何種類でもやり方があり、質問の記述にあるやり方はよくわからず適切とは思えないので

ガチャアプリの図鑑のシステムを作っています。
図鑑番号や名前のテキストがある

を見て回答します。

動いている様子
イメージ説明

動かせるパッケージ
tt355837.unitypackage

データ

plaintext

1id,name,kana 20001,Slime,スライム 30002,Skelton,スケルトン 40003,Goblin,ゴブリン 50004,Ork,オーク

コード

csharp

1using System.Collections.Generic; 2using UnityEngine; 3 4/// <summary> 5/// データを読み込み、保持する 6/// </summary> 7public class DataManager : MonoBehaviour 8{ 9 [SerializeField] TextAsset m_csvData; 10 static List<CharacterData> m_data = new List<CharacterData>(); 11 12 public static List<CharacterData> Data 13 { 14 get { return m_data; } 15 } 16 17 public void LoadCsvData() 18 { 19 m_data.Clear(); 20 21 // C# の標準ライブラリを使って「一行ずつ読む」という処理をする 22 System.IO.StringReader sr = new System.IO.StringReader(m_csvData.text); 23 // 一行目は列名なので飛ばす 24 sr.ReadLine(); 25 26 while (true) 27 { 28 // 一行ずつ読みこんで処理する 29 string line = sr.ReadLine(); 30 31 // line に何も入っていなかったら終わったとみなして処理を終わる 32 if (string.IsNullOrEmpty(line)) 33 { 34 break; 35 } 36 37 // 行をカンマ区切りで分割してデータに復元する 38 string[] values = line.Split(','); 39 CharacterData data = new CharacterData(values[0], values[1], values[2]); 40 m_data.Add(data); 41 } 42 43 Debug.Log("Finished LoadCsvData"); 44 } 45} 46 47public struct CharacterData 48{ 49 public string Id; 50 public string Name; 51 public string Kana; 52 53 public CharacterData(string id, string name, string kana) 54 { 55 Id = id; 56 Kana = kana; 57 Name = name; 58 } 59} 60

csharp

1using UnityEngine; 2 3/// <summary> 4/// データを操作して画面に表示する 5/// </summary> 6public class DataOperator : MonoBehaviour 7{ 8 [SerializeField] Transform m_root; 9 [SerializeField] DataCell m_cellPrefab; 10 11 public void ShowData() 12 { 13 foreach (Transform t in m_root) 14 { 15 Destroy(t.gameObject); 16 } 17 18 foreach (var c in DataManager.Data) 19 { 20 DataCell cell = Instantiate(m_cellPrefab, m_root); 21 cell.Init(c); 22 } 23 } 24}

csharp

1using UnityEngine; 2using UnityEngine.UI; 3 4/// <summary> 5/// データが表示される Cell を制御する 6/// </summary> 7public class DataCell : MonoBehaviour 8{ 9 [SerializeField] Text m_id; 10 [SerializeField] Text m_name; 11 [SerializeField] Text m_kana; 12 13 public void Init(CharacterData data) 14 { 15 m_id.text = data.Id; 16 m_name.text = data.Name; 17 m_kana.text = data.Kana; 18 } 19}

投稿2021/08/24 07:26

bboydaisuke

総合スコア5291

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

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

Lemon_0715

2021/08/24 07:40

すみませんあまり仕組みが分かっていないので説明していただけないでしょうか...? 大まかにでいいので...
bboydaisuke

2021/08/24 08:15 編集

やりたい事と今できる・わかることのギャップが大きいので理解できなくて当然です。ですから、動くものを用意しました。実際に動かして弄り回して学んでみてください。
Lemon_0715

2021/08/24 10:35

ありがとうございます。これから学んでいこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問