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

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

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

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

Unity

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

Q&A

0回答

599閲覧

【Unity】ボタンを動的生成する場合の、元データについて

Wai8131

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2021/08/24 08:04

編集2021/08/25 08:04

前提・実現したいこと

こんにちは。
UnityとC#を勉強中のものです。

Unityでスクロールバーにボタンを動的生成しようとしています。
ボタンの内部にtextを2つ配置し、Vertical Layout Groupで2行にします。
「Title」と「Detail」で配置してます。

 ̄ ̄ボタン ̄ ̄
「Title」
「Detail」
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
スクロールバーに動的にボタンを生成するとして、
元データはどのように管理するのが良いのでしょうか。
Detailは3行にしようと思ってます。

出来ているところ

TitleとDetailの表示 両方とも配列に入れてます。
Arrayに直接入れており、Detailを1行1行入れていくのが大変で困っている状況です。
見づらさもあるため、見やすく修正したいと思ってます。

将来的には、過去選択(クリック)した回数で
降順に並び替えたりしたいと思ってます。

元データをXMLファイルなり、何かでまとめておきたいのですが
classがあまりわかっていないからか、どうやって複数のデータを管理するのかわかりません。
ボタンの表示内容を複数種類持ちたいのと、
過去選択した回数(達成回数、日付)などもデータ保持したいと思ってます。

分からないこと

・データの保存・取得方法
(Classを利用した、複数データの紐づけ。
TitleとDetailと、今までクリックした回数とか。
・Detailの内容を3行にする方法
手入力で テスト1\テスト2\テスト3\などと入力して改行表示されることは確認済み。

該当のソースコード

出張しているため元のソースを参照できませんが
以下のことと似たようなことをしています。
プレハブから作成し、textに値をいれています。
データを入れる仕組みや、履歴を保持する仕組みはまだ作れていないため
とりあえず1行ずつデータ作成しているところです。

参考;
UnityのuGUIでスクロールビューを作る

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ScrollData : MonoBehaviour 7{ 8 // Start is called before the first frame update 9 [SerializeField] 10 RectTransform prefab; 11 12 string[] titleData = { "1行目トマト", "2行目キャベツ"}; 13 14 string[] datailData = 15 { "トマトは赤い\n大体3個とかでまとめ売りされている。\nトマト嫌いでもプチトマトは食べれる人がいる。", 16 "キャベツは緑色\n1玉100円程度の値段。\nとんかつに千切りキャベツはつきもの。"}; 17 18 19 20 21 void Start() 22 { 23 for (int i = 0; i < titleData.Length; i++) 24 { 25 var item = GameObject.Instantiate(prefab) as RectTransform; 26 item.SetParent(transform, false); 27 28 // var text = item.GetComponentInChildren<Text>(); 29 var Title = item.Find("Title").GetComponent<Text>(); 30 var Detail = item.Find("Detail").GetComponent<Text>(); 31 32 Title.text = titleData[i]; 33 Detail.text = datailData[i]; 34 } 35 } 36 }

試そうとしていること

Unity/C#で XMLファイルとしてデータを保存する(UTF-8/日本語対応)

【Unity】日本語テキストの自動改行

【Unity】【C#】クエストシステムを実装する 第1回
↑イメージに一番近いのはコレ。

上記は内容確認中です。
シリアライズとかが難しくてあまりよく理解できてません。

補足情報(FW/ツールのバージョンなど)

Unity 2021.1.16

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/08/25 05:04

前提・実現したいこと、出来ているところ、分からないこと の内容がちぐはぐではないでしょうか? 出来ている事、とありますが元データは今現在どのように管理しているのでしょうか? データの扱いが大変、という事は現在の管理法があるはずです。それを提示されてみてはどうでしょうか? データの保存、取得とは外部保存ですか?そうだとするなら、上記処理とは全く別のお話になるのではないか?と思います。 データ管理というルールがないなら保存も復元できませんよね?csv、xml、jsonなどそれぞれルールがあります。そのルールを利用してプラス自分のデータ管理のルールに当てはめる、その状態で初めて保存、復元ができる、って感じかと思います。 Detailの内容3行とは?元から3行で作っているデータですか?それとも1行のデータを最大3行に分割?文字数制限などはありますか?1行20文字で3行とかの制限付きですか?無い場合、表示しきれない部分はスクロールで対応するとかでしょうか?対応策はだいぶ変わると思います。 試した事、内容確認中との事ですが、この部分の記事についても質問の文章を読む限りですが、やや異なる話ではなかろうか?と感じます。 自動改行システム、文章を表示するにあたっておかしな部分で改行されない様にする仕組み。これは文頭が"。"から始まるとか文章として気持ち悪い、そんな事はさせないぜ!ってお話ですよね?そんな話は質問文からは読み取れませんでした。 私は初心者なので回答は出来ないかもしれません。 初心者の偉そうなコメントかもしれませんが、もう少し分からないという部分を細分化して個別に質問する必要があるのではないか?と感じました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問