Unity3d手机端俄罗斯方块操作探索1

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上,项目打包到手机上之后,虽然可以正常使用,但总觉得还是不够灵活,需要再进行些修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值