今回はPhysics2D.Linecast( startPosition, endPosition, collisionLayer)を工夫して使うことで解決しました!
Linecastは startPosition - endPosition の座標に当たり判定を発生させることができます。
これにより、自身の上下左右に任意のレイヤー(collisionLayer)との当たり判定を出すことができます。
またちょっとしたことですが、今回は自身と同じTag、Layerをもっているオブジェクトが対象なので自身との当たり判定を防止する必要がありました。
ここでLinecastのstartPosition,endPositionをうまく設定することで自身から少し話した位置に当たり判定を発生させることができました。
下のコードではテストとして上下左右の判定のみコーディングしていますがこのコードのBool値を活用することでブロック破壊に条件を追加できるようになりそうです!
C#
1 using UnityEngine ;
2
3 public class Test : MonoBehaviour
4 {
5 public LayerMask Layer ;
6
7 void Update ( )
8 {
9 BlockChacker ( ) ;
10 }
11
12 public void BlockChacker ( )
13 {
14 Vector3 startU = transform . position + transform . up * 0.51f ;
15 Vector3 startD = transform . position - transform . up * 0.51f ;
16 Vector3 startL = transform . position - transform . right * 0.51f ;
17 Vector3 startR = transform . position + transform . right * 0.51f ;
18
19 Vector3 endU = transform . position + transform . up * 0.52f ;
20 Vector3 endD = transform . position - transform . up * 0.52f ;
21 Vector3 endL = transform . position - transform . right * 0.52f ;
22 Vector3 endR = transform . position + transform . right * 0.52f ;
23
24 Debug . DrawLine ( startU , endU , Color . green ) ;
25 Debug . DrawLine ( startD , endD , Color . red ) ;
26 Debug . DrawLine ( startL , endL , Color . blue ) ;
27 Debug . DrawLine ( startR , endR , Color . yellow ) ;
28
29 bool upHit = Physics2D . Linecast ( startU , endU , Layer ) . collider != null ;
30 bool downHit = Physics2D . Linecast ( startD , endD , Layer ) . collider != null ;
31 bool leftHit = Physics2D . Linecast ( startL , endL , Layer ) . collider != null ;
32 bool rightHit = Physics2D . Linecast ( startR , endR , Layer ) . collider != null ;
33
34 if ( ! upHit ) Debug . Log ( "上のブロックがなくなった!!" ) ;
35 if ( ! downHit ) Debug . Log ( "下のブロックがなくなった!!" ) ;
36 if ( ! leftHit ) Debug . Log ( "左のブロックがなくなった!!" ) ;
37 if ( ! rightHit ) Debug . Log ( "右のブロックがなくなった!!" ) ;
38 }
39 }