回答編集履歴
3
修正
test
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
###最後に
|
76
76
|
|
77
|
-
Unityは自身でnewしなくてもインスタンスが生成されるのでそこが難しく感じたのかなと思い今回の回答を考えました。実は今回1つ大きな間違いがあります。それは、Hierarchy上に無くてもコード上でMonoBehaviourが継承されていたり参照
|
77
|
+
Unityは自身でnewしなくてもインスタンスが生成されるのでそこが難しく感じたのかなと思い今回の回答を考えました。実は今回1つ大きな間違いがあります。それは、Hierarchy上に無くてもコード上でMonoBehaviourが継承されていたり参照したUnity APIをはすべてインスタンスとういことです。Hierarchy上にあるかないかは関係ないのです。なぜスクリプト上ではなくHierarchy上で考えてほしいかと申しますと、2つ目の**Hierarchy上からアタッチされているかいないか**があるからです。
|
78
78
|
|
79
79
|
|
80
80
|
|
2
修正
test
CHANGED
@@ -64,9 +64,25 @@
|
|
64
64
|
|
65
65
|
|
66
66
|
|
67
|
+
###スクリプトで考えてみる
|
68
|
+
|
69
|
+
MonoBehaviourはnewできません。理由はUnityが自動でnew(インスタンス化)するからです。
|
70
|
+
|
71
|
+
やってみると分かるのですが、Hierarchy上ではMonoBehaviourを継承したクラス以外アタッチできません。ここからHierarchy上のものはすべてインスタンスということがわかります。
|
72
|
+
|
73
|
+
|
74
|
+
|
67
75
|
###最後に
|
68
76
|
|
69
|
-
|
77
|
+
Unityは自身でnewしなくてもインスタンスが生成されるのでそこが難しく感じたのかなと思い今回の回答を考えました。実は今回1つ大きな間違いがあります。それは、Hierarchy上に無くてもコード上でMonoBehaviourが継承されていたり参照するUnity APIをはすべてインスタンスとういことです。実はHierarchy上にあるかないかは関係ないのです。なぜスクリプト上ではなくHierarchy上で考えてほしいかと申しますと、2つ目の**Hierarchy上からアタッチされているかいないか**があるからです。
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
**「Hierarchy上に存在するまたはアタッチする=newされメモリ上に展開される」**ということなので、あまり使わないものをアタッチしていると知らないうちにメモリに大きな影響を与えていることがあります。今回のことを理解していると「よく使うからHierarchy上にアタッチしておこう」や「チュートリアルは1度しか使わないからResources.loadで読み込もう」など前もってメモリに優しい設計ができるからです。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
長々とすみません。以上です。
|
70
86
|
|
71
87
|
|
72
88
|
|
1
修正
test
CHANGED
@@ -14,13 +14,11 @@
|
|
14
14
|
|
15
15
|
これでUnityが自動的に行うインスタンスの大体を理解できると思います。
|
16
16
|
|
17
|
-
|
18
|
-
|
19
17
|
それを考慮して該当コードを考えてみるとこんな感じです。
|
20
18
|
|
21
19
|
|
22
20
|
|
23
|
-
###GameObject.Find()はHierarchy上のオブジェクトを参照する
|
21
|
+
###GameObject.Find()はHierarchy上のオブジェクトを参照するメソッドなので参照できるオブジェクトはすべてインスタンス
|
24
22
|
|
25
23
|
```C#
|
26
24
|
|