Shape脚本,控制每个形状的操作
using UnityEngine;
public class Shape : MonoBehaviour
{
private bool canFall = true;//能否下落
private float fallTimer;//下落的计时器
private float fallTimeval = 0.5f;//下落的时间间隔
/// <summary>
/// 初始化形状
/// </summary>
/// <param name="pos"></param>
/// <param name="color"></param>
public void Init(Vector2 pos, Color color)
{
transform.position = pos;
foreach (Transform child in transform)
{
if (child.GetComponent<SpriteRenderer>() != null)
{
child.GetComponent<SpriteRenderer>().color = color;
}
}
}
private void Update()
{
if (canFall == false)
{
return;
}
//控制下落
if (fallTimer >= fallTimeval)
{
//下落
Fall();
fallTimer = 0;
}
else
{
fallTimer += Time.deltaTime;
}
//控制加速下落
ControlUpspeed();
//控制左右移动
ControlMovement();
//控制旋转
ControlRotate();
}
/// <summary>
/// 控制左右移动
/// </summary>
private void ControlMovement()
{
float h = 0;
if (Input.GetKeyDown(KeyCode.RightArrow))
{
h = 1;
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
h = -1;
}
Vector3 curPos = transform.position;
Vector3 targetPos = curPos;
targetPos.x += h;
transform.position = targetPos;
if (GameController.Instance.IsValidPos(transform) == false)
{
targetPos.x -= h;
transform.position = targetPos;
}
}
/// <summary>
/// 控制旋转
/// </summary>
private void ControlRotate()
{
if (Input.GetKeyDown(KeyCode.UpArrow))
{
Transform rotateTrans = transform.Find("CenterPos");
transform.RotateAround(rotateTrans.position, Vector3.forward, -90);
if (GameController.Instance.IsValidPos(transform) == false)
{
transform.RotateAround(rotateTrans.position, Vector3.forward, 90);
}
}
}
/// <summary>
/// 控制加速
/// </summary>
private void ControlUpspeed()
{
if (Input.GetKeyDown(KeyCode.DownArrow))
{
fallTimeval = 0.05f;
}
if (Input.GetKeyUp(KeyCode.DownArrow))
{
fallTimeval = 0.5f;
}
}
/// <summary>
/// 下落
/// </summary>
private void Fall()
{
Vector3 curPos = transform.position;
Vector3 targetPos = curPos;
targetPos.y -= 1;
transform.position = targetPos;
if (GameController.Instance.IsValidPos(transform) == false)
{
targetPos.y += 1;
transform.position = targetPos;
FallToBottom();
}
}
/// <summary>
/// 下落到底部
/// </summary>
private void FallToBottom()
{
canFall = false;
GameController.Instance.CurShape = null;
//方块下落到底部时将每个方块位置添加到地图数组中
GameController.Instance.AddEachBlockTransToMapArray(transform);
if (GameController.Instance.IsGameover())
{
GameManager.Instance.Gameover();
}
}
}
更多俄罗斯方块精彩文章请点击专题:俄罗斯方块游戏集合 进行学习。










