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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity3D

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

Unity

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

Q&A

0回答

713閲覧

クローン生成されたボタンに現在の日付情報を紐づけたい

TALOS

総合スコア7

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2021/01/06 10:03

こちらのシンプルなカレンダーをunityである程度まで完成させました。
しかし、再生時に自動で最初の日付のボタンが押される設定にしたいのですが、紐づけが出来ずに困っております。

問題はそれぞれの日付はInstantiate関数でクローン生成しているので、特定の日付のボタンと現在の日付を紐づけできないようです。

Start関数でbtn.onClick.Invoke();を使い、ボタンを呼び起こそうとしましたが、クローンされたボタンの中で特定のボタン(現在の日付)だけを最初に自動で押されるという方法を実現したいです。よろしくお願い致します。

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; public GameObject DateOBj; public GameObject MainTex = null; [SerializeField] private Button btn; void Start() { for (int i = 0; i < 42; i++) { GameObject button = Instantiate(prefab, canvas.transform); button.GetComponent<Button>(); } SelectDate = DateTime.Now; CalendarController(); Text text = MainTex.GetComponent<Text>(); text.text = SelectDate.ToString(); btn.onClick.Invoke(); } 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(); //押された日付の値を更新する GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; button.GetComponent<Button>().onClick.RemoveAllListeners(); button.GetComponent<Button>().onClick.AddListener(() => { set_Date(tmp); }); // 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++; } } void set_Date(DateTime date) { GameObject.Find("MainDate").GetComponent<Text>().text = date.ToString(); Debug.Log(date); //値を保存する処理など } } }

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

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

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

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

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

lazh

2021/01/08 15:13

何がどうなってるかイメージが沸かないので、 実行した時のGame画面かScene画面のスクショを貼ってほしいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問