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

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

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

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

Unity

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

Q&A

0回答

922閲覧

動的に生成されたボタンオブジェクトを押すと別のオブジェクトが呼び出されるようにしたい

toki_3598

総合スコア2

C#

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

Unity

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

0グッド

0クリップ

投稿2021/02/21 12:04

前提・実現したいこと

スクリプトで生成されたボタン状のカレンダーを押すとメモ帳が出てきて日付ごとにメモを保存できるようにしたい。

発生している問題・エラーメッセージ

NullReferenceException: Object reference not set to an instance of an object MemoPanel.Start () (at Assets/Script/MemoPanel.cs:17)
Assets\Script\Calendar.cs(23,24): error CS0117: 'GameObject' does not contain a definition for 'memoGameObject'

該当のソースコード

↓このサイトの作り方を参考にカレンダーを作成しました。
https://qiita.com/hire1105/items/b23e905bbcc062f70376

↓①カレンダーのスクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using System; 6public class Calendar : MonoBehaviour 7{ 8 public GameObject canvas;//エディタから指定 9 public GameObject prefab;//エディタから指定 10 public static DateTime SelectDate; 11 private DateTime D_Date; 12 private int startday; 13 14 void Start() 15 { 16 17 for (int i = 0; i < 42; i++) 18 { 19 GameObject button = Instantiate(prefab, canvas.transform)as GameObject; 20 button.GetComponent<Button>(); 21 button.AddComponent<MemoPanel>(); 22 GameObject.memoGameObject= GameObject.Find("Memotyou"); 23 24 } 25 SelectDate = DateTime.Now; 26 CalendarController(); 27 28 29 } 30 private void CalendarController() 31 { 32 int days = 1; 33 int overday = 1; 34 35 D_Date = new DateTime(SelectDate.Year, SelectDate.Month, 1); //SelectDateの月の最初の日付 36 int year = SelectDate.Year; //年 37 int month = SelectDate.Month; //月 38 int day = SelectDate.Day; //日 39 //最初の日付の曜日を取得 40 DayOfWeek firstDate = D_Date.DayOfWeek; 41 //何日まであるか 42 int monthEnd = DateTime.DaysInMonth(year, month); 43 //前月が何日まであるか 44 SelectDate = SelectDate.AddMonths(-1); 45 month = SelectDate.Month; 46 SelectDate = SelectDate.AddMonths(1); 47 int lastmonth = DateTime.DaysInMonth(year, month); 48 switch (firstDate) 49 { 50 case DayOfWeek.Sunday: 51 startday = 0; 52 break; 53 case DayOfWeek.Monday: 54 startday = 1; 55 break; 56 case DayOfWeek.Tuesday: 57 startday = 2; 58 break; 59 case DayOfWeek.Wednesday: 60 startday = 3; 61 break; 62 case DayOfWeek.Thursday: 63 startday = 4; 64 break; 65 case DayOfWeek.Friday: 66 startday = 5; 67 break; 68 case DayOfWeek.Saturday: 69 startday = 6; 70 break; 71 } 72 int lastmonthdays = lastmonth - startday + 1; 73 74 for (int i = 0; i < 42; i++) 75 { 76 if (i >= startday) 77 { 78 if (days <= monthEnd) 79 { 80 //文字を入れる 81 Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); 82 DateTime tmp = D_Date;//一時変数 83 DayOfWeek num = tmp.DayOfWeek; 84 //土曜日青・日曜日赤 85 switch (num) 86 { 87 case DayOfWeek.Sunday: 88 DAY.GetChild(0).GetComponent<Text>().color = Color.red; 89 break; 90 case DayOfWeek.Saturday: 91 DAY.GetChild(0).GetComponent<Text>().color = Color.blue; 92 break; 93 default: 94 DAY.GetChild(0).GetComponent<Text>().color = Color.black; 95 break; 96 97 } 98 DAY.GetChild(0).GetComponent<Text>().text = D_Date.Day.ToString(); 99 GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; 100 button.GetComponent<Button>().onClick.RemoveAllListeners(); 101 button.GetComponent<Button>().onClick.AddListener(() => { set_Date(tmp); }); 102 D_Date = D_Date.AddDays(1); 103 days++; 104 } 105 else 106 { 107 Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); 108 DAY.GetChild(0).GetComponent<Text>().color = Color.gray; 109 DAY.GetChild(0).GetComponent<Text>().text = overday.ToString(); 110 GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; 111 button.GetComponent<Button>().onClick.RemoveAllListeners(); 112 overday++; 113 } 114 } 115 else 116 { 117 Transform DAY = GameObject.Find("GameObject").transform.GetChild(i); 118 DAY.GetChild(0).GetComponent<Text>().color = Color.gray; 119 DAY.GetChild(0).GetComponent<Text>().text = lastmonthdays.ToString(); 120 GameObject button = GameObject.Find("GameObject").transform.GetChild(i).gameObject; 121 button.GetComponent<Button>().onClick.RemoveAllListeners(); 122 lastmonthdays++; 123 } 124 125 } 126 void set_Date(DateTime date) 127 { 128 Debug.Log(date); 129 //値を保存する処理など 130 } 131 } 132 133 134} 135 136 137 138

実行時に生成されるカレンダー
カレンダーオブジェクトのインスペクター情報
イメージ説明
↓②ボタン状のカレンダーを押したときにメモ帳オブジェクトが出てくるスクリプト

using UnityEngine; using UnityEngine.UI; public class MemoPanel : MonoBehaviour { // インスペクターから指定する public GameObject memoGameObject; public Button button; private void Start() { bool isActive = false; // ボタンが押されたら、InputFieldゲームオブジェクトのアクティブ/非アクティブを切り替える button.onClick.AddListener(() => { isActive = !isActive; memoGameObject.SetActive(isActive); }); } }

カレンダーを押したら出てくるメモ帳画面
(OKボタンを押したらメモ内容を保存できるようにしたい)
イメージ説明

試したこと

プレハブ化したボタンオブジェクトに②のスクリプトをつけたのですがインスペクターでメモ帳ゲームオブジェクトをmemoGameObjectに指定できなかったので、動的に生成されたボタンオブジェクトには他のオブジェクトが指定できないのかなと思い①のスクリプトから②のスクリプトを呼び出そうとしたのですが上記のエラーメッセージが出てきてしまい、どうすればいいのかわからなくなってしまいました。

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

Unity2019.4.10f1

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問