質問編集履歴

4

画像の削除

2019/02/23 11:49

投稿

ITATI
ITATI

スコア14

test CHANGED
File without changes
test CHANGED
@@ -156,8 +156,6 @@
156
156
 
157
157
  ↓字が小さいですが、左下端に取得されたオブジェクト名が表示されています。
158
158
 
159
- ![イメージ説明](6466e560623c134138e9b943f6ddfcdf.gif)
160
-
161
159
 
162
160
 
163
161
  //足元チェック用----------------------------------------------------------------------------+

3

画像の削除

2019/02/23 11:49

投稿

ITATI
ITATI

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  実現したいこと
2
2
 
3
- ![イメージ説明](322d072cab151b5ed9fbe6df7ae3d940.png)
3
+
4
4
 
5
5
  上の画像の右に発射されている16本の赤いRayが、壁に衝突すると青いRayになるようにしたいと考えています。
6
6
 

2

新しく把握できた情報の追加

2019/02/23 11:48

投稿

ITATI
ITATI

スコア14

test CHANGED
File without changes
test CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
  ### 発生している問題
12
12
 
13
- このRayを発射する為にキャラクターの当たり判定を外側のコライダー(Is triggerにチェック)で囲んでいますが、
13
+ このRayを発射する為にキャラクターの当たり判定を外側のコライダー(Is triggerにチェック、レイヤー”Char”)で囲んでいますが、
14
14
 
15
15
  それがRayと重なっている為、以下のソースでは常に青いRayが表示される様です。
16
16
 
17
- int layerMask = LayerMask.GetMask(new string[] { "char" });
17
+ int layerMask = LayerMask.GetMask(new string[] { "Object" });
18
18
 
19
19
  でマスクに成功していると思うのですが、改善しません。
20
20
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  CalculateRaySpacing();
58
58
 
59
- int layerMask = LayerMask.GetMask(new string[] { "char" });
59
+ int layerMask = LayerMask.GetMask(new string[] { "Object" });
60
60
 
61
61
 
62
62
 
@@ -178,6 +178,30 @@
178
178
 
179
179
 
180
180
 
181
+ 06/12:
182
+
183
+ 次の様にソースを書き換え、マスクを無効にしても、Objectを認識する場合があることが分かりました。
184
+
185
+ おそらくObjectの配置を調整したものが偶然認識できるようになっっていたものと思われます。
186
+
187
+ ```
188
+
189
+ //足元チェック用----------------------------------------------------------------------------+
190
+
191
+ RaycastHit2D check;
192
+
193
+ check = Physics2D.Raycast(raycastOrigins.bottomRight - Vector2.down * horizontalRaySpacing, Vector2.right * -1 / 2, layerMask);
194
+
195
+ //↓
196
+
197
+ check = Physics2D.Raycast(raycastOrigins.bottomRight - Vector2.down * horizontalRaySpacing, Vector2.right * -1 / 2);
198
+
199
+ ```
200
+
201
+ このことから、レイヤーマスクが機能していないものと思われます。
202
+
203
+
204
+
181
205
  ### 補足情報(FW/ツールのバージョンなど)
182
206
 
183
207
  Unity 2018.1.1f1

1

06/09 11: 00 ソースにRay発射元コライダー角座標の設定を行う部分を追加、”試したこと”に補足しました。

2018/06/11 15:48

投稿

ITATI
ITATI

スコア14

test CHANGED
File without changes
test CHANGED
@@ -98,17 +98,73 @@
98
98
 
99
99
  }
100
100
 
101
+
102
+
103
+ //以下はRay発射元コライダー角座標の設定を行うもの
104
+
105
+ void UpdateRaycastOrigins()//Drawrayで直接角座標(vector2)を定義する事ができない為、ここに定義
106
+
101
- ```
107
+ {
108
+
109
+ Bounds bounds = collider.bounds;//ワールド座標でのコライダーのbounds範囲情報取得
110
+
111
+ bounds.Expand/*設定した amount によって sizeを変更*/(skinWidth/*コライダーの幅*/ * -2);
112
+
113
+ raycastOrigins.bottomLeft = new Vector2(bounds.min.x, bounds.min.y); //左下座標
114
+
115
+ raycastOrigins.bottomRight = new Vector2(bounds.max.x, bounds.min.y); //右下座標
116
+
117
+ raycastOrigins.topLeft = new Vector2(bounds.min.x, bounds.max.y); //左上座標
118
+
119
+ raycastOrigins.topRight = new Vector2(bounds.max.x, bounds.max.y); //左上座標
120
+
121
+ }
122
+
123
+ struct RaycastOrigins
124
+
125
+ {
126
+
127
+ public Vector2 topLeft, topRight, bottomLeft, bottomRight;
128
+
129
+ }
130
+
131
+ void CalculateRaySpacing()//数値に従い幅内のレイ数を振り分ける計算
132
+
133
+ {
134
+
135
+ Bounds bounds = collider.bounds;
136
+
137
+ bounds.Expand(skinWidth * -2);
102
138
 
103
139
 
104
140
 
141
+ horizontalRayCount = Mathf.Clamp(horizontalRayCount, 2, int.MaxValue);
142
+
143
+ verticalRayCount = Mathf.Clamp(verticalRayCount, 2, int.MaxValue);
144
+
145
+
146
+
147
+ horizontalRaySpacing = bounds.size.y / (horizontalRayCount - 1) ;
148
+
149
+ verticalRaySpacing = bounds.size.x / (verticalRayCount - 1);
150
+
151
+ }
152
+
153
+ ```
154
+
105
155
  ### 試したこと
156
+
157
+ ↓字が小さいですが、左下端に取得されたオブジェクト名が表示されています。
158
+
159
+ ![イメージ説明](6466e560623c134138e9b943f6ddfcdf.gif)
160
+
161
+
106
162
 
107
163
  //足元チェック用----------------------------------------------------------------------------+
108
164
 
109
165
  より下のソースにより、オブジェクト名の取得に成功している為、おそらくlayerMaskは機能しています。
110
166
 
111
- ![ジ説明](6466e560623c134138e9b943f6ddfcdf.gif)
167
+ ※layerMaskが失敗しているときはPlayer( "char" レ)のGameobjectしか取得しませんでした。
112
168
 
113
169
  ただし、オブジェクトに接触していないときは常にPlayer( "char" レイヤー)のGameobjectが取得されてしまいます。
114
170