【Unity】2D展示弧形滚动条
创始人
2025-06-01 01:51:35

2D 弧形滚动条

public List songItems = new List();
    public List rightSongItems = new List();
    //List itemAngles = new List();
    List drageAngles = new List();
    List cengNums = new List() { 1, 2, 3, 4, 5, 4, 3, 2, 1 };

    int songIdex = 0;
    //List itemIndexs = new List() { 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 = Manager.Instance.songEasyDatas[1001 + num].songName;

            rightSongItems[i].transform.Find("Text").GetComponent().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 listItems = new List();
        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 = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex + 4)].songName;
                rightSongItems[i].transform.Find("Text").GetComponent().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 = Manager.Instance.songEasyDatas[1001 + GetSongIdex(songIdex - 4)].songName;
                rightSongItems[i].transform.Find("Text").GetComponent().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);
    }
 

相关内容

热门资讯

【非凡2025·精彩答卷】郧西... 2025年,在县委县政府的坚强领导下,全县上下实干拼搏、克难奋进,统筹高水平保护与高质量发展,规模能...
向明立人丨小小旅行家:脚步丈量... 脚 步 丈 量 界 眼界点亮成长 (小小旅行家) 世 当课本里的“景点”变成脚下的路,当地图...
中国最古老的驿站悬泉置 悬泉置这个名字,最初是在央视纪录片上看到,对“置”这个字的使用比较惊奇。古代汉字的含义比较特别,很多...
四川人,第一次来保定旅游,这些... 未曾踏足这座小城的人,大抵也听过它的名字——保定。 你或许未曾与之相遇,却很难不知晓,它曾承载一省的...
一只帝王蟹的跨国漂流之旅   北纬53度,俄罗斯勘察加半岛。成群的帝王蟹在800米深的深海中游走,它们正等待着开启一场跨国“鲜...