TextのサイズによってImageサイズが変わるPrefabを生成するアプリを作成しています。
TextのサイズによってImageサイズが変わることについて
先日質問しました回答として VerticalLayoutGroupを設置したImageの子としてTextを配置すれば
良いというのをいただきテスト段階では問題なくうまくいきました。
https://teratail.com/questions/191158
しかしいざPrefab内でその設置をするとエラーになってしまいます。
・下記がPrefab内の配置です。
・親のCanvasImageの設定です。
・FukiImageの設定です。
このFukiImageの設定ですがデフォルではChild Force ExpandのWidthとHeightに
チェックが入っています。
この段階まではコンパイルしてもエラーになりません。
次に子のTextサイズにFukiImageを合わせる(伸縮させる)ためにChild Force Expandのチェックを
両方とも外してChild Controls SizeのWidthとHeightにチェックを入れる(イメージ参照)
と下記のエラーが出ます。
ArgumentOutOfRangeException: Length cannot be less than zero. Parameter name: length System.String.Substring (System.Int32 startIndex, System.Int32 length) (at <ac823e2bb42b41bda67924a45a0173c3>:0) TextExtension.SetTextWithEllipsis (UnityEngine.UI.Text textComponent, System.String value) (at Assets/Scripts/TextExtension.cs:19) ScrollController3.voiceOpen (System.Int32 indexNo, System.Int32 indexItemNo) (at Assets/Scripts/ScrollController3.cs:119) ScrollController3.Start () (at Assets/Scripts/ScrollController3.cs:48)
#pragma warning disable 649 [SerializeField]RectTransform PrefabfukiRed = null; [SerializeField]RectTransform PrefabfukiBlue = null; [SerializeField]Text voiceJTitle; [SerializeField]Text voiceETitle; private RectTransform voicePrefab; [SerializeField]Text voiceCountNum; [SerializeField]Text voiceCountTotal; [SerializeField]Text subETitle; [SerializeField]Text subJTitle; [SerializeField]Entity_catelist ecatelist; [SerializeField]Entity_titlelist etitlelist; [SerializeField]Entity_voicelist evoicelist; private int indexNo; private int indexItemNo; private Image[] cateImages; private Text[] texts; private Image[] images; private int phraseNum; private int startPos; ・ ・//(省略) ・ void Start() { //(省略) //該当箇所) for(int i = startPos; i < startPos + phraseNum; i++){ int parentOrChild = evoicelist.sheets[0].list[i].PorC; if(parentOrChild == 1){ voicePrefab = GameObject.Instantiate(PrefabfukiRed) as RectTransform; }else{ voicePrefab = GameObject.Instantiate(PrefabfukiBlue) as RectTransform; } voicePrefab.SetParent(transform, false); //OnClickVoicePrefabのindexVoiceNoにconverse_idを入れる voicePrefab.GetComponentInChildren<OnClickVoicePrefab>().indexVoiceNo = evoicelist.sheets[0].list[i].converse_id.ToString(); // Debug.Log("converse_id:" + evoicelist.sheets[0].list[i].converse_id); texts = voicePrefab.GetComponentsInChildren<Text>(); images = voicePrefab.GetComponentsInChildren<Image>(); TextExtension.SetTextWithEllipsis(texts[0], evoicelist.sheets[0].list[i].voice_english); TextExtension.SetTextWithEllipsis(texts[1], evoicelist.sheets[0].list[i].voice_japan); } }
翻訳すると要素範囲外のエラー:長さが0もしくは0より小さいのが原因・・・です。
がどこの要素が範囲外になっているのか分かりません。
子の要素が何らかの要因で親に届いていない(0)のでこういうエラーが出ているような
気がしますが原因が調べても分かりません。分かる方ヒントでも結構ですので教えて下さい。
環境)
PC: mac
Unity2018.2
言語:C#
回答1件
あなたの回答
tips
プレビュー