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

回答編集履歴

1

コメントと質問編集を受けて追記

2017/02/24 06:17

投稿

sakura_hana
sakura_hana

スコア11429

answer CHANGED
@@ -6,4 +6,48 @@
6
6
  これで「現在地から1辺の長さが1unityの立方体の範囲内にあるColliderの配列」が取得出来ます。
7
7
  (立方体の大きさ(Vector3の大きさ)は適宜変更してください)
8
8
 
9
- この後取得したColliderのtransform.positionと自身のtransform.positionの位置を比較したりベクトルを求めれば「存在しているのはどの方向にあるオブジェクトか(=所定の方向にあるオブジェクトの有無)」が分かると思います。
9
+ この後取得したColliderのtransform.positionと自身のtransform.positionの位置を比較したりベクトルを求めれば「存在しているのはどの方向にあるオブジェクトか(=所定の方向にあるオブジェクトの有無)」が分かると思います。
10
+
11
+ 2017/02/24 13:16のコメントと質問編集を受けて追記
12
+ ---
13
+
14
+ 他にも方法はありますが、分かりやすい方法で書きます。
15
+
16
+ ```C#
17
+ //当たっているColliderを全て取得
18
+ Collider[] colList = Physics.OverlapBox(transform.position, new Vector3(1.0f, 1.0f, 1.0f);
19
+
20
+ int countA = 0; //説明1
21
+ 
foreach (Collider item in colList) { //説明2
22
+ if (item.transform.position == transform.position + Vector3(0, -1, 0)) {
23
+ countA ++; //説明3
24
+ }
25
+ if (item.transform.position == transform.position + Vector3(-1,-1,0)) {
26
+ countA ++;
27
+ }
28
+ if (item.transform.position == transform.position + Vector3(-1,0,0)) {
29
+ countA ++;
30
+ }
31
+ }
32
+
33
+ if (countA == 3) { //説明4
34
+ //処理Aを実行する
35
+ }
36
+ ```
37
+
38
+ 何をしているのかというと……
39
+ 1.処理Aの条件は3つあるので、条件を数える「countA」という変数を作ります。
40
+ 2.「foreach」は「colList(=取得したColliderの配列)を1つ1つitemに入れて{ }内の処理を実行を繰り返す」命令です。
41
+ 3.「itemの位置」が「自分(=水色のキューブ)の位置+指定位置」だったら、処理Aの条件を1つ満たしたとみなし、countAを1増加させます。
42
+ 
4.全てのColliderの位置を確認後、countAの値を確認して条件を達成していたら処理Aを実行します。
43
+
44
+ ※「同じ位置に複数のオブジェクトが存在しない」ことを前提にしています。
45
+ ※動作確認はしていないので、問題がある場合は適宜修正してください。
46
+ ※処理負荷は考慮していません。
47
+
48
+ 処理B、処理Cも同じ要領で行えるので考えてみてください。
49
+ (countB、countCという変数と位置を調べる条件分岐を増やしてカウントする)
50
+ また、if文をもっとスマートに書く方法もあるので慣れてきたら調べてみてください。
51
+
52
+ なお、丸投げ質問とみなされるので次からは何が分からないのかを具体的に書くとよいと思います。
53
+ (例えば「取得したColliderの位置の取得が分からない」「位置の取得は出来るが、比較する方法が分からない」など)