Unityでぷよぷよを作ってみた 7
スポンサードリンク
壁蹴り
壁が邪魔でぷよが回転できないとき、1列ずれてから回転するようにする。
private enum PuyoDirection { Top = 0, Right = 1, Bottom = 2, Left = 3 } public void TurnLeft(Vector3 rotatePosition) { transform.RotateAround(transform.TransformPoint(rotatePosition), new Vector3(0, 0, 1), 90); if (!CanMove()) { var dir = GetDirection(); if (!KickWall(dir)) { transform.RotateAround(transform.TransformPoint(rotatePosition), new Vector3(0, 0, 1), -90); } } } public void TurnRight(Vector3 rotatePosition) { transform.RotateAround(transform.TransformPoint(rotatePosition), new Vector3(0, 0, 1), -90); if (!CanMove()) { var dir = GetDirection(); if (!KickWall(dir)) { transform.RotateAround(transform.TransformPoint(rotatePosition), new Vector3(0, 0, 1), 90); } } } //壁蹴り private bool KickWall(PuyoDirection puyoDir) { if (puyoDir == PuyoDirection.Left) { if (!CanMoveTo(Vector3.right)) return false; MoveRight(); } else if (puyoDir == PuyoDirection.Right) { if (!CanMoveTo(Vector3.left)) return false; MoveLeft(); } else if (puyoDir == PuyoDirection.Bottom) { if (!CanMoveTo(Vector3.up)) return false; transform.position += Vector3.up; } return true; } //移動判定後元の位置に戻す private bool CanMoveTo(Vector3 dir) { bool canMove; transform.position += dir; canMove = CanMove(); transform.position -= dir; return canMove; } //子ぷよの方向を取得 private PuyoDirection GetDirection() { var a = transform.rotation.eulerAngles.z; if (a == 90) return PuyoDirection.Left; if (a == 270) return PuyoDirection.Right; if (a == 180) return PuyoDirection.Bottom; return PuyoDirection.Top; }