unity 鼠标或者触摸 左移右移 图片移动

Unity 实现左移右移切换图片

最近发现项目中经常用到一组图片根据鼠标左滑右滑 图片移动的功能 所以简单的整理了下 以后项目中用着比较方便 也是自己的一个记录吧

首先 要知道 在屏幕中 检测鼠标有两种 一种是UNITY本身的方法   Input.mousePosition 还有一种是射线检测 涉及到3D场景 我这边写的是关于2D的移动检测  第一要知道 检测鼠标是左移还是右移 先获取到鼠标的触摸点 要根据两点判断 开始点跟结束点 开始点在结束点的左边  就是图片向右边滑动的动画  开始点在结束点的右边 就是图片向左滑动的动画  还有图片移动的 一般显示的场景中只有一张图片  其余的都是不显示的 或者说被遮挡的  这就要用到Unity的 Mask组件  这就是挡着其余不显示的界面UI

像这样的总结点设置 Game下的子节点就是需要移动的图片 可以设置成动态加载 看功能的实际需求 

这样设置好了之后就开始写功能代码了 首先 先写检测鼠标左移还是右移的 代码 需要有两个座标 开始座标跟结束座标 我这边写了个最简单的设置 不需要检测其他复杂的操作 只需要判断鼠标按下跟擡起的两种状态 判断前后座标的位置 上代码

设置变量

    Vector2 startpos;
    Vector2 start,end;

    bool IsMouse = false;

update中的代码判断
//鼠标初始触摸位置
        startpos.x = Input.mousePosition.x;
        startpos.y = Input.mousePosition.y;

        if (Input.GetMouseButtonDown(0))
        {
            start = startpos;
            IsMouse = false;
        }
        if (Input.GetMouseButtonUp(0))
        {
            end = startpos;
            IsMouse = true;
        }
        //判断左移还是右移
        if (IsMouse)
        {
            LeftOrRight();
        }

还有判断左移右移的方法

 void LeftOrRight()
    {
        DOTween.KillAll();
        if (start.x - end.x < 0)
        {
            Right = true;
            //Debug.Log("right");
        }
        if (start.x - end.x > 0)
        {
            Left = true;
            //Debug.Log("left");
        }
        IsMouse = false;
    }

这样就将鼠标的左移还是右移的判断简单的可以识别了 而且这样检测有个比较好的 就是短距离也能判断出来

之后根据这些左移还是右移 在UPDATA中开始实现图片的移动 同样移动图片只需要执行一次 所以要加bool变量控制次数

    bool Right = false;
    bool Left = false;
    int Index = 0;

因为我的功能需要是多张图片 来回左右切换 所以我也加了个int值判断当前是哪一张图片显示区域 而切换移动的动画 我使用的是dotween编写 可能是比较方便快捷吧

 //往右移动画
        if (Right && Index >= 0)
        {
            Index--;
            if (Index < 0)
            {
                Index = 0;
            }
            //Debug.Log(Index);
            MoveGame.transform.DOLocalMove(gamevec[Index],1f);
            Right = false;
        }
//往左移动画
        if (Left && Index < MoveGame.transform.childCount)
        {
            Index++;
            if (Index > MoveGame.transform.childCount - 1)
            {
                Index = MoveGame.transform.childCount - 1;
            }
            //Debug.Log(Index);       
            MoveGame.transform.DOLocalMove(gamevec[Index],1f);
            Left = false;
        }

左移右移的动画就是根据int值跟bool判断的  往左移的动画就是index++,反之--,当然dotween动画有个不好的地方 就是动画未做完 在做一个动画  位置会发生变化  所以我们在判断左还是右的时候就将所有的动画kill掉 这样就实现了左移右移切换图片了 实现的效果 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章