teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

質問者環境で発生する現象の確認を行ったため、結果を追記

2017/06/10 06:11

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -49,4 +49,74 @@
49
49
  また、念のため確認しますが、プロジェクトのフォルダ構成は`Resources/prefab2/ButtonItem`となっていますでしょうか。もしprefab2フォルダがResourcesフォルダの中にない場合、`Resources.Load`では見つからないかもしれません。
50
50
 
51
51
  参考1:[Unity - スクリプトリファレンス: Button](https://docs.unity3d.com/jp/540/ScriptReference/UI.Button.html)
52
- 参考2:[Unity - スクリプトリファレンス: Resources.Load](https://docs.unity3d.com/jp/540/ScriptReference/Resources.Load.html)
52
+ 参考2:[Unity - スクリプトリファレンス: Resources.Load](https://docs.unity3d.com/jp/540/ScriptReference/Resources.Load.html)
53
+
54
+ [追記]
55
+ 質問者さんのおっしゃる、インスペクタで参照させたはずのButtonがスクリプトから見るとnullになる...という現象についてどうなるか試したのですが、私の環境ではうまく再現できませんでした。
56
+ 条件としては、
57
+
58
+ - Image(名前はImageItem)の下にButton(名前はButtonItem)を配置
59
+ - ButtonItemはスクリプト(Item.cs)をアタッチした上でプレハブ化しており、ヒエラルキー上のButtonItemはプレハブのインスタンスとなり、青い文字で表示されている
60
+ - プロジェクトビュー内のButtonItemプレハブを選択し、インスペクタでItemコンポーネントのprefabに、同じくインスペクタに表示されているButtonコンポーネントをドラッグ(itemObjTransformについてはImageをプレハブ化していないためNoneのままとした...今回の件とはおそらく関係ない?)
61
+ - シーンビュー内のButtonItemインスタンスを選択しインスペクタで内容を確認、Itemのprefabには「ButtonItem (Button)」と表示される(おそらく関係ないが、念のためitemObjTransformにImageItemをドラッグしてセット...項目が太字になってインスタンス固有の値がセットされたことを示していた)
62
+ - Item.csはほぼそのままだが、確認のためにStart内でprefabをコンソールに出力
63
+ ```C#
64
+ using System.Collections;
65
+ using System.Collections.Generic;
66
+ using UnityEngine;
67
+ using UnityEngine.UI;
68
+
69
+ public class Item : MonoBehaviour
70
+ {
71
+
72
+ public Button[] items = new Button[10];
73
+
74
+
75
+ public Button prefab;
76
+
77
+ public Transform itemObjTransform;
78
+
79
+ void Start()
80
+ {
81
+ //prefab = Resources.Load ("prefab2/ButtonItem") as Button;
82
+ Debug.Log(prefab);
83
+ }
84
+
85
+
86
+ public int SetItem(string name)
87
+ {
88
+
89
+ int number = 0;
90
+ Debug.Log(prefab);
91
+ for (int i = 0; i < 10; i++)
92
+ {
93
+ if (items[i] == null)
94
+ {
95
+ number = i;
96
+ break;
97
+ }
98
+ number = i;
99
+ }
100
+
101
+
102
+ items[number] = Instantiate(prefab, new Vector3(1, 1, 1), Quaternion.identity);
103
+ items[number].transform.SetParent(itemObjTransform);
104
+ items[number].transform.localScale = Vector3.one;
105
+ items[number].GetComponent<Text>().text = name;
106
+
107
+
108
+ return number;
109
+
110
+ }
111
+ }
112
+ ```
113
+
114
+ このような状態でプレイモードボタンを押したところ、コンソール出力は
115
+ ```
116
+ ButtonItem (UnityEngine.UI.Button)
117
+ UnityEngine.Debug:Log(Object)
118
+ ```
119
+ となり、特にnullになってしまっている様子はありませんでした。何か実験条件が違っていますでしょうか?
120
+
121
+ ※実行時の様子(キャプチャの都合上、マウスポインタが二重に表示されてしまいました)
122
+ ![実行時の様子](a7477ee309560d924a286daf4ccd94e5.gif)