虚拟摇杆

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

//用ScrollCircle代替ScrollRect组件,达到在一个圆形范围内拖动的效果
public class ScrollCircle : ScrollRect {

    protected float mRadius = 0f;
    protected float mWidth, bWidth, contentWidth;
    // Use this for initialization
    protected override void Start () {
        base.Start();
        //bWidth 为整个摇杆宽度占画布宽度的比例
        bWidth = (transform as RectTransform).anchorMax.x - (transform as RectTransform).anchorMin.x;
        //contentWidth为摇块宽度占摇杆背景宽度的比例
        contentWidth = content.anchorMax.x - content.anchorMin.x;
        GetRadius();
    }

    // Update is called once per frame
    void Update()
    {
        GetRadius();
    }

    public override void OnDrag(PointerEventData eventData)
    {
        base.OnDrag(eventData);
        var contentPosition = this.content.anchoredPosition;
        if (contentPosition.magnitude > mRadius)
        {
            contentPosition = contentPosition.normalized * (mRadius);
            SetContentAnchoredPosition(contentPosition);
        }
    }

    //获取摇块能够移动的范围
    public void GetRadius()
    {
        //mWidth 为整个摇杆的宽度
        mWidth = transform.GetComponentInParent<Canvas>().pixelRect.width * bWidth;
        //mRadius 为摇块能够移动的最大距离
        mRadius = mWidth * 0.5f * (1 - contentWidth);
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容