Unity3d手机端俄罗斯方块滑动操作
前言
最近跟着视频做了一个俄罗斯方块的案例,但是感觉在电脑上玩没啥意思,所以决定改成手机版。
一、屏幕设置
1.屏幕分辨率
屏幕设置成了1080*1980
2.使用效果图
操作方法图
二、使用步骤
1.用到的参数
代码如下(示例):
private float stepTime = 0.8f; // 下落一格需要的时间
private Transform pivot; // 图形的中心点
private int multiple = 30; // 下落倍数
private float slideTimer = 0; // 滑动计时器
private bool isRotate = true; // 是否可以旋转
Vector3 slideInitialPos; // 滑动的初始位置
Vector3 slideEndPos; // 滑动的结束位置
2.控制函数
代码如下(示例):
/// <summary>
/// 手机版移动控制
/// </summary>
private void AndroidMoveControl()
{
float h = 0;
slideEndPos = Vector3.zero;
if (Input.GetMouseButtonDown(0))
{
Vector3 clickPos = Input.mousePosition;
slideInitialPos = clickPos; //将初始位置置为点击的位置
if (clickPos.x <= (Screen.width / 3) && clickPos.y <= Screen.height - 410) //点击左侧屏幕
{
h = -1;
}
if (clickPos.x >= (Screen.width / 3) * 2 && clickPos.y <= Screen.height - 410) //点击右侧屏幕
{
h = 1;
}
if (h != 0)
{
Vector3 pos = transform.position;
pos.x += h;
transform.position = pos;
if (Ctrl.Instence.model.IsValidMapPosition(this.transform) == false) //如果超出边界
{
pos.x -= h;
transform.position = pos;
}
else
{
Ctrl.Instence.audioManager.PlayControl();
}
return; //控制图形左右移动时,不能进行其他操作
}
}
else if (Input.GetMouseButton(0)) //手指按在屏幕上
{
slideTimer += Time.deltaTime; //记录滑动时间
slideEndPos = Input.mousePosition; //记录滑动结束位置
}
else if (Input.GetMouseButtonUp(0)) //判断手指是否抬起
{
slideEndPos = Input.mousePosition; //记录滑动结束位置
slideInitialPos = Vector3.zero; //将滑动初始位置置零
isRotate = true; //结束滑动时可以旋转
stepTime = 0.8f; //恢复正常速度
slideTimer = 0; //滑动时间置为0
}
if (slideInitialPos.x >= (Screen.width / 3) && slideInitialPos.x <= (Screen.width / 3) * 2) //判断是否处于可滑动范围
{
if (slideInitialPos.y >= (Screen.height / 2)) //在中间上半部分进行滑动
{
if (isRotate && slideInitialPos.y - slideEndPos.y <= -120) //则进行变换
{
//进行旋转
transform.RotateAround(pivot.position, Vector3.forward, -90);
if (Ctrl.Instence.model.IsValidMapPosition(this.transform) == false) //如果超出边界
{
transform.RotateAround(pivot.position, Vector3.forward, 90);
}
else
{
Ctrl.Instence.audioManager.PlayControl();
}
isRotate = false; //在结束旋转前,不能再次旋转
return;
}
}
if (slideInitialPos.y <= (Screen.height / 2)) //在中间下半部分进行滑动
{
if (slideTimer >= 0.4f && slideInitialPos.y - slideEndPos.y >= 60) //如果滑动了0.4s以上,且向下滑动超过60的距离,则开始加速
{
stepTime = 0.8f / multiple;
}
return;
}
}
}
总结
包含这个函数的脚本,挂载到了需要控制的图形的Prefab上,项目打包到手机上之后,虽然可以正常使用,但总觉得还是不够灵活,需要再进行些修改。