回答編集履歴

2

groupsをpublicからprivateに変更

2017/09/14 08:14

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -52,7 +52,7 @@
52
52
 
53
53
  public Enemy enemy;
54
54
 
55
- public Group[] groups; // 追加
55
+ private Group[] groups; // 追加
56
56
 
57
57
 
58
58
 

1

修正案を追記

2017/09/14 08:14

投稿

fiveHundred
fiveHundred

スコア9803

test CHANGED
@@ -5,3 +5,89 @@
5
5
 
6
6
 
7
7
  すでにシーン上に存在するGroupを取得したい場合、単体なら``FindObjectOfType<Group>()``を、複数存在する場合は``FindObjectsOfType<Group>()``を使ってください。
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ 追記:
16
+
17
+ frodo821さんが修正案を挙げておりますが、そもそもisValidGridPos()をstaticにすること自体が適切ではない気がします。
18
+
19
+ なので、私の修正案としては、以下のようになります。
20
+
21
+ Groupは複数あるつもりで書きました。
22
+
23
+ Groupが1つの場合でも動作をするとは思いますが、その場合は``FindObjectOfType<Group>()``を使ったほうが直感的でしょう。
24
+
25
+
26
+
27
+ Group.cs
28
+
29
+ ```C#
30
+
31
+ public bool isValidGridPos() // staticを削除
32
+
33
+ {
34
+
35
+ //(中略)
36
+
37
+ }
38
+
39
+ ```
40
+
41
+
42
+
43
+ BattleManager.cs
44
+
45
+ ```C#
46
+
47
+ public class BattleManager : MonoBehaviour {
48
+
49
+
50
+
51
+ //メンバ
52
+
53
+ public Enemy enemy;
54
+
55
+ public Group[] groups; // 追加
56
+
57
+
58
+
59
+ // Use this for initialization
60
+
61
+ void Start () {
62
+
63
+ groups = FindObjectsOfType<Group>(); // 追加(重い処理なので、Update()ではなく、ここで行う)
64
+
65
+ }
66
+
67
+
68
+
69
+ // Update is called once per frame
70
+
71
+ void Update (){
72
+
73
+ foreach (Group group in groups) // foreachループを追加(全てのGroupに対して実行する)
74
+
75
+ {
76
+
77
+ if(group.isValidGridPos())//ここに関数を渡したい
78
+
79
+ {
80
+
81
+ enemy.Damage(10.0f);
82
+
83
+ }
84
+
85
+ }
86
+
87
+ }
88
+
89
+ }
90
+
91
+ ```
92
+
93
+