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

回答編集履歴

3

回答を差し替えました。

2018/10/21 08:08

投稿

退会済みユーザー
answer CHANGED
@@ -1,31 +1,17 @@
1
- ここが問題の箇所です。「既に破壊された敵機に対して、その他の敵機のうちより近を探す」ということをされていますよね。ここで、既に破壊された敵機はいないわけで、nowEnemy.transform参照できずエラーになっているのですよね
1
+ __※エラーの箇所を誤解していので、回答差し替えました__
2
2
 
3
+ 回答の前に1点指摘を。
3
4
  ```C#
4
- GameObject searchTag(GameObject nowEnemy,string tagName){
5
+ GameObject searchTag(GameObject nowEnemy,string tagName){ // nowEnemyではなく、
5
- float tmpDis = 0;
6
- float nearDis = 0;
7
- GameObject targetObj = null;
8
-
9
- foreach (GameObject obs in GameObject.FindGameObjectsWithTag(tagName)) {
6
+ GameObject searchTag(GameObject player,string tagName){ // playerでは?
10
- tmpDis = Vector2.Distance (obs.transform.position, nowEnemy.transform.position);
11
7
  ```
12
8
 
13
- ということはnullの場合の処理を書けばよいとおもいませんか?
9
+ 本題です。
14
- というわけで、nullの場合(ターゲットが撃破されている場合)は、敵機一覧の最初の敵を仮の候補として用意します。次のような感じです。
15
10
 
16
- ```C#
17
- GameObject searchTag(GameObject nowEnemy,string tagName){
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
- nowEnemy = enemies[0]; // 適当に書いてるので、[0]じゃれません
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

エラーへの対処について

2018/10/21 08:07

投稿

退会済みユーザー
answer CHANGED
@@ -26,4 +26,6 @@
26
26
  }
27
27
  foreach (GameObject obs in enemies) {
28
28
  // 変更ここまで
29
- ```
29
+ ```
30
+
31
+ 苦言ではなく、アドバイスなのですが、エラーはちゃんと理解するとよいですよ。コードのどこでエラーがでているかを確認し、どういったエラーか、なぜそのエラーがでたのかということを調べ、どの仕組みがよくなかったのかを考えることをしなければなりません。エラーによっては、「よくわからないがとりあえずこうしとけ」と解決する場合もなくはないですが、基本的にはコードを組んだ側の仕組みの問題ですので、なんかわからないけどエラーでた みたいな感想はいろいろ調べて、それでもわからなかった後になります。

1

微修正

2018/10/21 04:32

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- ここが問題の箇所です。「既に破壊された敵機に対して、その他の敵機のうちより近いものを探す」ということをされていますよね。ここで、既に破壊された敵機はいないわけで、nowEnemyを参照できずnull参照でエラーになっているのですよね。
1
+ ここが問題の箇所です。「既に破壊された敵機に対して、その他の敵機のうちより近いものを探す」ということをされていますよね。ここで、既に破壊された敵機はいないわけで、nowEnemy.transformを参照できずエラーになっているのですよね。
2
2
 
3
3
  ```C#
4
4
  GameObject searchTag(GameObject nowEnemy,string tagName){