🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

15354閲覧

Unity Transform child out of boundsという見たことのないエラーについて

TALOS

総合スコア7

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

0グッド

0クリップ

投稿2021/01/05 16:54

こんにちは、現在カレンダーアプリを制作中です。

UnityException: Transform child out of boundsというエラーが表示され、こちらに関しての解決ページが少ないため、困っております。コードは下記になります。

こちらのエラー原因を見ると、下部の
Transform DAY = GameObject.Find("GameObject").transform.GetChild(i);
が影響を与えているようですが、スクリプトとしては問題ありません。

よろしくお願いします。

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class Calendar : MonoBehaviour { public GameObject canvas;//エディタから指定 public GameObject prefab;//エディタから指定 public static DateTime SelectDate; private DateTime D_Date; private int startday; void Start() { SelectDate = DateTime.Now; CalendarController(); for (int i = 0; i < 42; i++) { GameObject button = Instantiate(prefab, canvas.transform); button.GetComponent<Button>(); } } private void CalendarController() { int days = 1; int overday = 1; D_Date = new DateTime(SelectDate.Year, SelectDate.Month, 1); //SelectDateの月の最初の日付 int year = SelectDate.Year; //年 int month = SelectDate.Month; //月 int day = SelectDate.Day; //日 //最初の日付の曜日を取得 DayOfWeek firstDate = D_Date.DayOfWeek; //何日まであるか int monthEnd = DateTime.DaysInMonth(year, month); //前月が何日まであるか SelectDate = SelectDate.AddMonths(-1); month = SelectDate.Month; SelectDate = SelectDate.AddMonths(1); int lastmonth = DateTime.DaysInMonth(year, month); switch (firstDate) { case DayOfWeek.Sunday: startday = 0; break; case DayOfWeek.Monday: startday = 1; break; case DayOfWeek.Tuesday: startday = 2; break; case DayOfWeek.Wednesday: startday = 3; break; case DayOfWeek.Thursday: startday = 4; break; case DayOfWeek.Friday: startday = 5; break; case DayOfWeek.Saturday: startday = 6; break; } int lastmonthdays = lastmonth - startday + 1; for (int i = 0; i < 42; i++) { if (i >= startday) { if (days <= monthEnd) { //文字を入れる Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); DateTime tmp = D_Date;//一時変数 DayOfWeek num = tmp.DayOfWeek; //土曜日青・日曜日赤 switch (num) { case DayOfWeek.Sunday: DAY.GetChild(0).GetComponent<Text>().color = Color.red; break; case DayOfWeek.Saturday: DAY.GetChild(0).GetComponent<Text>().color = Color.blue; break; default: DAY.GetChild(0).GetComponent<Text>().color = Color.black; break; } DAY.GetChild(0).GetComponent<Text>().text = D_Date.Day.ToString(); D_Date = D_Date.AddDays(1); days++; } else { Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); DAY.GetChild(0).GetComponent<Text>().color = Color.gray; DAY.GetChild(0).GetComponent<Text>().text = overday.ToString(); GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; button.GetComponent<Button>().onClick.RemoveAllListeners(); overday++; } } else { Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); DAY.GetChild(0).GetComponent<Text>().color = Color.gray; DAY.GetChild(0).GetComponent<Text>().text = lastmonthdays.ToString(); GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; button.GetComponent<Button>().onClick.RemoveAllListeners(); lastmonthdays++; } } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずは子要素がしっかり生成されているかを確認すると良いでしょう。

cs

1 Debug.Log("子要素の数 > " + GameObject.Find("GameObject").transform.childCount); // 対象の子要素の数を見る 2 //文字を入れる 3 Transform DAY = GameObject.Find("GameObject").transform.GetChild(i);

ざっくり見るとStart関数でCalendarControllerを呼んでからボタン生成しているので、ちゃんと要素が生成されていない可能性があるんじゃないかと思いますが、どうでしょうか?(そういう挙動で大丈夫ならこの部分は無視してください)

投稿2021/01/06 00:48

編集2021/01/06 00:49
hogefugapiyo

総合スコア3302

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

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

TALOS

2021/01/06 02:17

hogefugapiyo様 おっしゃる通りでございました。 CalendarController()関数の内容は正しく、Start関数での生成順番が原因のようでした。 Unity初心者ですので、関数の実行される順番などには今後気を付けたいと思います。 ベストアンサーにさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問