回答編集履歴
3
回答を差し替えました。
answer
CHANGED
@@ -1,31 +1,17 @@
|
|
1
|
-
|
1
|
+
__※エラーの箇所を誤解していたので、回答を差し替えました。__
|
2
2
|
|
3
|
+
回答の前に1点指摘を。
|
3
4
|
```C#
|
4
|
-
|
5
|
+
GameObject searchTag(GameObject nowEnemy,string tagName){ // nowEnemyではなく、
|
5
|
-
float tmpDis = 0;
|
6
|
-
float nearDis = 0;
|
7
|
-
GameObject targetObj = null;
|
8
|
-
|
9
|
-
|
6
|
+
GameObject searchTag(GameObject player,string tagName){ // playerでは?
|
10
|
-
tmpDis = Vector2.Distance (obs.transform.position, nowEnemy.transform.position);
|
11
7
|
```
|
12
8
|
|
13
|
-
|
9
|
+
で、本題です。
|
14
|
-
というわけで、nullの場合(ターゲットが撃破されている場合)は、敵機一覧の最初の敵を仮の候補として用意します。次のような感じです。
|
15
10
|
|
16
|
-
```C#
|
17
|
-
|
11
|
+
> エラー箇所はVector3 diff = (nearEnemy.transform.position - this.transform.position);の方でした。
|
18
|
-
float tmpDis = 0;
|
19
|
-
float nearDis = 0;
|
20
|
-
GameObject targetObj = null;
|
21
12
|
|
22
|
-
// ここから変更あり
|
23
|
-
var enemies = GameObject.FindGameObjectsWithTag(tagName);
|
24
|
-
if (nowEnemy == null) {
|
25
|
-
|
13
|
+
nearEnemyがどの時点でnullになるかデバッガで確認し、その原因を調べたり考えたりしてみてください。
|
26
|
-
}
|
27
|
-
foreach (GameObject obs in enemies) {
|
28
|
-
// 変更ここまで
|
29
|
-
```
|
30
14
|
|
31
|
-
|
15
|
+
予想ですがおそらく、敵機が0になった結果、searchTagメソッドのGameObject.FindGameObjectsWithTag(tagName)の部分で取得できる敵機がなく、targetObjが初期値nullのままになってしまったのかなと思います。
|
16
|
+
|
17
|
+
もしそうであれば、敵機がいない場合はそちらを向かないよう、if文で制御すればいいかと思います。
|
2
エラーへの対処について
answer
CHANGED
@@ -26,4 +26,6 @@
|
|
26
26
|
}
|
27
27
|
foreach (GameObject obs in enemies) {
|
28
28
|
// 変更ここまで
|
29
|
-
```
|
29
|
+
```
|
30
|
+
|
31
|
+
苦言ではなく、アドバイスなのですが、エラーはちゃんと理解するとよいですよ。コードのどこでエラーがでているかを確認し、どういったエラーか、なぜそのエラーがでたのかということを調べ、どの仕組みがよくなかったのかを考えることをしなければなりません。エラーによっては、「よくわからないがとりあえずこうしとけ」と解決する場合もなくはないですが、基本的にはコードを組んだ側の仕組みの問題ですので、なんかわからないけどエラーでた みたいな感想はいろいろ調べて、それでもわからなかった後になります。
|
1
微修正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ここが問題の箇所です。「既に破壊された敵機に対して、その他の敵機のうちより近いものを探す」ということをされていますよね。ここで、既に破壊された敵機はいないわけで、nowEnemyを参照できず
|
1
|
+
ここが問題の箇所です。「既に破壊された敵機に対して、その他の敵機のうちより近いものを探す」ということをされていますよね。ここで、既に破壊された敵機はいないわけで、nowEnemy.transformを参照できずエラーになっているのですよね。
|
2
2
|
|
3
3
|
```C#
|
4
4
|
GameObject searchTag(GameObject nowEnemy,string tagName){
|