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

質問編集履歴

4

 

2017/07/19 02:59

投稿

sukiyakigozens
sukiyakigozens

スコア28

title CHANGED
File without changes
body CHANGED
@@ -31,4 +31,54 @@
31
31
  Main Cameraから、いったんスクリプトをRemoveして再度Main Cameraにアタッチするとエラーなしで動作するのはなぜでしょうか?
32
32
  (Unity再起動後にエラーが出てしまいますが)
33
33
 
34
- ご教授よろしくおねがいいたします。
34
+ ご教授よろしくおねがいいたします。
35
+
36
+ -----------------------
37
+ 再追記
38
+
39
+ スクリプトはこのような感じで、パネルの中にボタンが何個かあり、押された時の動作が書かれてます。
40
+ オブジェクト自体は、インスタンシエイトで作成はしておらず、すでにヒエラルキー上に置いてあります。
41
+ StartからAwakeに変えましたら、Main Camera上でもエラーが出なくなりました。
42
+ ```ここに言語を入力
43
+ public class SceneChanger : MonoBehaviour
44
+ {
45
+ GameObject _level1;
46
+
47
+ void Awake () //元はStartでした
48
+ {
49
+ _level1 = GameObject.Find("Canvas/popUp/level1");
50
+ _level1.GetComponent<Button>().onClick.AddListener(() => OnClickBtnLevel1(_level1));
51
+ }
52
+
53
+ void OnClickBtnLevel1(GameObject obj)
54
+ {
55
+ SceneManager.LoadScene ("101");
56
+ }
57
+ }
58
+ ```
59
+ 実はさらにもうひとつ別のスクリプト(下記)がありまして、(同じくMain Camera内にアタッチ)
60
+ Startにてボタンの親(名前:popUp)を消す命令を入れておりました。
61
+ そのせいで上のスクリプトでは子が見つからないというのが原因でした。
62
+ 上のスクリプトはAwake使用によりStartより先に読まれるようです。
63
+ ご指摘いただいたとおり実行の順番の問題でした。
64
+ ```ここに言語を入力
65
+ public class PopUpOpen : MonoBehaviour
66
+ {
67
+ GameObject popUp_all;
68
+
69
+ void Start()
70
+ {
71
+ popUp_all = GameObject.Find("Canvas/popUp");
72
+ popUp_all.SetActive (false);
73
+ }
74
+ }
75
+ ```
76
+ すいません、さらに質問させてください。
77
+ 少し外れますが、
78
+ Main Cameraにアタッチの別のスクリプト内にて(例:Other.CS)
79
+ 上記とまったく同じオブジェクト(popUp_all) を再度、Canvas/popUpとパスをたどって参照する場合、
80
+ その際、Other.CS内での呼び名は「popUp_all」は上記スクリプトで一度使用しているので
81
+ 「popUp_all_2」と名前を変える必要がありますでしょうか?
82
+ または同じ名前(popUp_all) でも問題ありませんでしょうか?
83
+
84
+ ベストアンサーにさせていただきたいので、回答欄にご記入いただけまでしょうか?

3

追記

2017/07/19 02:59

投稿

sukiyakigozens
sukiyakigozens

スコア28

title CHANGED
@@ -1,1 +1,1 @@
1
- Main Cameraにスクリプトをによるエラー(Unity5.6 / 2D / ugui)
1
+ Unity5.6 / 2D / ugui - Main Cameraにスクリプトをアタッチするとエラー
body CHANGED
@@ -1,37 +1,34 @@
1
1
  ###前提・実現したいこと
2
- Main Cameraにスクリプトを貼りたいがエラーが出てしいます。
2
+ Main Cameraにスクリプトをアタッチするとエラーが出てしいます。(Unity初心者です。)
3
- (複数スクリプトを数カ所にるのではなく、Main Cameraにまとめる事ができるならばまとめたいです。)
3
+ (複数存在するスクリプトを数カ所に分けてアタッチするのではなく、可能な限りMain Cameraにまとめる事ができるならばまとめたいです。)
4
4
 
5
5
  ###発生している問題・エラーメッセージ
6
- ボタンに関してのスクリプトをMain Camera に貼ってあると下記エラーがでます。
6
+ ボタンに関してのスクリプトをMain Camera にアタッチしてあると下記エラーがでます。
7
7
  ```
8
8
  Object reference not set to an instance of an object
9
9
  ```
10
- スクリプトをいったんRemoveし、再度Main Cameraに貼り直しすとエラーが出ません。
10
+ スクリプトをいったんRemoveし、再度Main Cameraにアタッチすとエラーが出ません。
11
11
  (このことからスクリプトには問題ないように思えます。)
12
12
  しかしながらUnityを再起動すると同じエラーが出ます。
13
13
 
14
14
  ###試したこと
15
- Main Cameraではなく、Canvasにるとエラーがでません。(Unityを再起動してもエラーでません)
15
+ Main Cameraではなく、Canvasにアタッチするとエラーがでません。(Unityを再起動してもエラーでません)
16
16
 
17
17
  質問させてください。
18
18
 
19
- 質問1
19
+ 質問
20
- Main Cameraにスクリプトを貼らないほうがよいということでしょうか?
20
+ Main Cameraにアタッチしてもよいスクリプトと、アタッチしてはいけないスクリプトというものがありますでしょうか?
21
-
22
- 質問2
21
+ (後から見た時にわかりやすいように、できるかぎりスクリプトをアタッチする場所をまとめたいです。)
23
- 現在、Main Cameraには他のスクリプト(Admobのスクリプト)が貼ってあり、
22
+ 現在、Main Cameraには他のスクリプト(Admobのスクリプト)がアタッチしてあり、
24
23
  問題なく動作しているようなのですが、
25
- Main Cameraに貼ってもよいスクリプトと、そうでないスクリプトというものがありますでしょうか?
26
- (後から見た時にわかりやすいように、できるかぎりスクリプトを貼る場所をまとめたいです。)
27
24
 
28
- ご教授よろしくおねがいいたします。
29
-
30
25
  追記
31
26
  _obj = GameObject.Find("Canvas/Panel/obj");
32
27
  という様な、Canvasの中に位置するobjを参照するコードを使用しております。
33
- それが原因でCanvasにるべきだったのでしょうか?
28
+ それが原因でCanvasにアタッチするべきだったのでしょうか?
34
29
 
35
30
  しかしながら、
36
- いったんスクリプトをRemoveして再度Main Cameraにると動作するのはなぜでしょうか?
31
+ Main Cameraから、いったんスクリプトをRemoveして再度Main Cameraにアタッチするとエラーなしで動作するのはなぜでしょうか?
37
- (Unity再起動後にエラーが出てしまいますが)
32
+ (Unity再起動後にエラーが出てしまいますが)
33
+
34
+ ご教授よろしくおねがいいたします。

2

追記

2017/07/18 21:12

投稿

sukiyakigozens
sukiyakigozens

スコア28

title CHANGED
File without changes
body CHANGED
@@ -7,26 +7,22 @@
7
7
  ```
8
8
  Object reference not set to an instance of an object
9
9
  ```
10
- スクリプトをいったんRemoveし、
11
- 再度Main Cameraに貼り直しするとエラーがません。
10
+ スクリプトをいったんRemoveし、再度Main Cameraに貼り直しするとエラーがません。
12
11
  (このことからスクリプトには問題ないように思えます。)
12
+ しかしながらUnityを再起動すると同じエラーが出ます。
13
13
 
14
14
  ###試したこと
15
- Main Cameraではなく、Canvasに貼るとエラーがでません。
15
+ Main Cameraではなく、Canvasに貼るとエラーがでません。(Unityを再起動してもエラーでません)
16
- (Unityを再起動してもエラーでません)
17
16
 
18
17
  質問させてください。
19
18
 
20
19
  質問1
21
- Main Cameraにはスクリプトを
22
- 貼らないほうがよいということでしょうか?
20
+ Main Cameraにはスクリプトを貼らないほうがよいということでしょうか?
23
21
 
24
-
25
22
  質問2
26
23
  現在、Main Cameraには他のスクリプト(Admobのスクリプト)が貼ってあり、
27
24
  問題なく動作しているようなのですが、
28
- Main Cameraに貼ってもよいスクリプトと
29
- そうでないスクリプトというものがありますでしょうか?
25
+ Main Cameraに貼ってもよいスクリプトと、そうでないスクリプトというものがありますでしょうか?
30
26
  (後から見た時にわかりやすいように、できるかぎりスクリプトを貼る場所をまとめたいです。)
31
27
 
32
28
  ご教授よろしくおねがいいたします。
@@ -38,4 +34,4 @@
38
34
 
39
35
  しかしながら、
40
36
  いったんスクリプトをRemoveして再度Main Cameraに貼ると動作するのはなぜでしょうか?
41
- (Unity再起動後にエラーがますが)
37
+ (Unity再起動後にエラーが出てしいますが)

1

追記

2017/07/17 18:30

投稿

sukiyakigozens
sukiyakigozens

スコア28

title CHANGED
File without changes
body CHANGED
@@ -29,4 +29,13 @@
29
29
  そうでないスクリプトというものがありますでしょうか?
30
30
  (後から見た時にわかりやすいように、できるかぎりスクリプトを貼る場所をまとめたいです。)
31
31
 
32
- ご教授よろしくおねがいいたします。
32
+ ご教授よろしくおねがいいたします。
33
+
34
+ 追記
35
+ _obj = GameObject.Find("Canvas/Panel/obj");
36
+ という様な、Canvasの中に位置するobjを参照するコードを使用しております。
37
+ それが原因でCanvasに貼るべきだったのでしょうか?
38
+
39
+ しかしながら、
40
+ いったんスクリプトをRemoveして再度Main Cameraに貼ると動作するのはなぜでしょうか?
41
+ (Unity再起動後にエラーがでますが)