【Unity】2D展示弧形滚动条

编程入门 行业动态 更新时间:2024-10-15 10:15:15

【Unity】2D展示<a href=https://www.elefans.com/category/jswz/34/1759498.html style=弧形滚动条"/>

【Unity】2D展示弧形滚动条

2D 弧形滚动条

public List<GameObject> songItems = new List<GameObject>();
    public List<GameObject> rightSongItems = new List<GameObject>();
    //List<float> itemAngles = new List<float>();
    List<double> drageAngles = new List<double>();
    List<int> cengNums = new List<int>() { 1, 2, 3, 4, 5, 4, 3, 2, 1 };

    int songIdex = 0;
    //List<int> itemIndexs = new List<int>() { 0, 1, 2, 3, 4, 5, 6,7,8};
    float piAngle = 0.6f;

    public GameObject openAiBtn = null;
    private void Awake()
    {

    }
    private void Start()
    {
        //left
        for (int i = 0; i < songItems.Count; i++)
        {
            //double angle = Util.GetPIAngle(songItems[i].transform.localPosition);
            double angle = Math.PI * (piAngle + 0.1f * i);
            var vct = Util.GetAngleToPos(angle) * distance;
            songItems[i].transform.localPosition = vct;
            rightSongItems[i].transform.localPosition = new Vector3(-vct.x, vct.y);

            drageAngles.Add(angle);
            //itemAngles.AddRange(drageAngles);
            songItems[i].transform.SetSiblingIndex(cengNums[i]);
            rightSongItems[i].transform.SetSiblingIndex(cengNums[i]);
            var num = GetSongIdex(i - 4);
            //Debug.Log("songIndex" + num);
            songItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + num].songName;

            rightSongItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + num].songName;
        }
        RefeshDebug();
        //ClickOpenAI();
        GetVctToOlure((float)(5 * 0.1f * Math.PI / addNum));

        h_Index = 2;
        InitBtn();
    }

    void RefeshDebug()
    {
        openAiBtn.SetActive(Manager.isDebug);
    }
    private void OnEnable()
    {
        h_Index = 2;
        RefreshDown();
        DebugEvent.Register(RefeshDebug);
    }

    int GetSongIdex(int num)
    {
        if (num < 0)
        {
            num += Manager.Instance.songEasyDatas.Count;
        }
        else if (num >= Manager.Instance.songEasyDatas.Count)
        {
            num -= Manager.Instance.songEasyDatas.Count;
        }
        //Debug.Log("Reture_Song" + num);
        return num;
    }

    void Update()
    {
        BaseUpdate();
    }
    int numX = 0;
    public float addNum = 0.000002f;
    public float distance = 500;

//拖拽输入
    //逆向围绕中心点移动
    public void GetVctToOlure(float num)
    {
        List<GameObject> listItems = new List<GameObject>();
        for (int i = 0; i < songItems.Count; i++)
        {
            listItems.Add(songItems[i]);
            double fAngle = drageAngles[i];
            fAngle -= addNum * num;


            if (fAngle < 0.55f * Math.PI)
            {
                fAngle += (float)(0.9f * Math.PI);
                //Debug.Log("+fAngle-" + fAngle);
                RefreshIndex(1);
                //isUpdate = true;
                songItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex + 4)].songName;
                rightSongItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex + 4)].songName;
            }
            if (fAngle > 1.45f * Math.PI)
            {
                fAngle -= (float)(0.9f * Math.PI);
                //Debug.Log("+fAngle+" + fAngle);
                RefreshIndex(-1);
                //isUpdate = true;
                songItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex - 4)].songName;
                rightSongItems[i].transform.Find("Text").GetComponent<Text>().text = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex - 4)].songName;
            }

            drageAngles[i] = fAngle;

            var vct = Util.GetAngleToPos(fAngle) * distance;
            songItems[i].transform.localPosition = vct;
            rightSongItems[i].transform.localPosition = new Vector3(-vct.x, vct.y);
        }
        for (int i = 0; i < listItems.Count - 1; i++)
        {
            for (int j = 0; j < listItems.Count - 1 - i; j++)
            {
                if (listItems[j].transform.localPosition.y > listItems[j + 1].transform.localPosition.y)
                {
                    var temp = listItems[j];
                    listItems[j] = listItems[j + 1];
                    listItems[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < listItems.Count; i++)
        {
            listItems[i].transform.SetSiblingIndex(cengNums[i]);
            if (i == 4)
            {
                lightNum = int.Parse(listItems[i].name);
            }
        }
        for (int i = 0; i < songItems.Count; i++)
        {
            int numIndex = songItems[i].transform.GetSiblingIndex();
            rightSongItems[i].transform.SetSiblingIndex(numIndex);
        }

        RreshIndex();
    }


    void RefreshIndex(int num)
    {
        int numA = GetSongIdex(songIdex += num);
        songIdex = numA;
        Debug.Log("fact" + numA);
    }
 

更多推荐

【Unity】2D展示弧形滚动条

本文发布于:2024-03-05 01:03:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710898.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:弧形   滚动条   Unity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!