移动滑杆控制(UGUI实现)Unity3D

最近学习,碰到个移动滑杆控制操作的代码,写的不错,在这里和大家分享一下
UI:
移动滑杆控制(UGUI实现)Unity3D

首先用UGUI创建个滑杆
移动滑杆控制(UGUI实现)Unity3D
做好UI,添加个脚本,脚本中需要实现三个接口分别是:

移动滑杆控制(UGUI实现)Unity3D
功能主要是实现拖拽和起始、结束时所触发的事件,具体可以在官网了解一下。

  • 滑杆要实现的功能有滑杆会出现手点击屏幕的位置,中心点(即控制角色移动)会随拖拽而移动,手离开屏幕滑杆会归回原位。
    代码实现如下:
public class TouchDrag : MonoBehaviour, IDragHandler,IPointerDownHandler,IPointerUpHandler
{
    public Transform touchPoint;
    public Transform touchBg;

    private Vector2 startPos;
    private float pointDis;//滑杆半径

    private void Update()
    {
    	//这一步是为了解决滑杆半径可能会随屏幕变化而改变的自适应操作
    	//我的前面文章也有类似的介绍
        pointDis = Screen.height * 1.0f / 
        Constants.ScreenStandardHeight * Constants.ScreenOPDis;
    }

    public void OnDrag(PointerEventData eventData)
    {
        //半径长度
        Vector2 r = eventData.position-(Vector2)touchBg.position;
        float len = r.magnitude;
        //中心点是否超过滑杆半径
        //超过则做出限制
        if(len>pointDis)
        {
            r = Vector2.ClampMagnitude(r, pointDis);
            touchPoint.position = (Vector2)touchBg.position + r;
        }
        else
        {
        //没有超出圆盘,正常赋值触碰位置
            touchPoint.position = eventData.position;
        }

    }

    public void OnPointerDown(PointerEventData eventData)
    {
        /*  这里可以看出eventData.position的坐标和Input.mousePosition是相同的
        Debug.Log("Evenpos: " + eventData.position);
        Debug.Log("Mousepos: " + Input.mousePosition);
        */
		
        startPos = touchBg.position;
        touchBg.position = eventData.position;
    }

    public void OnPointerUp(PointerEventData eventData)
    {
    //结束  将圆盘归位
        touchPoint.localPosition = Vector3.zero;
        touchBg.position = startPos;
    }
}

上述代码已给出详细注释。自适应那里,如果是按一定分辨率播放的话,可以不做处理直接赋值半径长度即可。 主要是拖拽时的处理让人头凉,这种处理应该还不错。

上一篇:图像修复】基于matlab GUI Lucy_Richardson迭代法图像修复【含Matlab源码 846期】


下一篇:matlab gui matlab gui 鼠标点击显示图像颜色值