Unity で テトリス風ゲームを作ってみる#4
前回の続き
ブロックの移動、フィールド/ブロックの衝突判定はどうするか決まったので、今回はテトリミノの回転について考える。
テトリミノの回転
Trasnfrom のRotation でGameObject を回転させる手はあるが、回転の中心がPivot 位置になっているため、回転後にテトリミノの位置を修正する必要があるのと、ブロックのテクスチャも回転してしまうので、この手法は今回は取らない。
今回はテトリミノの種類も7種類と少ないので、力技で実現することを考える。
上図のように、各テトリミノの各回転角におけるブロック位置を配列であらかじめ準備しておき、回転時は各ブロック位置を移動することで回転を表現する。
疑似コードにすると下記のイメージのようにあらかじめ配列を準備。
- var blockLocation = new int[] {
- {
- {
- {0,0},{1,0},{2,0},{0,1} // 0°
- },{
- {0,0},{1,0},{1,1},{1,2} // 90°
- },{
- // 180°と270°
- }
- }
回転のイベントを受け取るたびに、ブロックの配置情報を上記の配列から取得しブロックGameObject の位置を変更する方式でプロト実装してみた結果が下記。
回転後のブロック位置のフィールド上にブロックがあるか衝突判定を行って回転できるかどうかもチェックする必要あり。
次の記事