Unity2d轮转图


1.创建一个父物体,生成一个image的预制体

代码如下:

首先计算出圆的周长,半径,弧度

using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;

public class Set2dRotation : MonoBehaviour,IDragHandler,IEndDragHandler
{
    public Image prefeb;
    public int num = 14;
    public float space = 10;
    public float max = 1;
    public float min = 0.5f;
    float l, r, ang;
    public float dec = 10;
    float allang = 0;
    public List<GameObject> list = new List<GameObject>();
    public List<Transform> trans = new List<Transform>();
    // Start is called before the first frame update
    void Start()
    {
        l = num * (prefeb.rectTransform.sizeDelta.x +space);
        r=l/(2*Mathf.PI);
        ang=2*Mathf.PI/num;
        Move();
    }
public void Move()
    {
        for(int i = 0; i < num; i++)
        {
            if(list.Count<=i)
            {
                list.Add(Instantiate(prefeb.gameObject, transform));
                trans.Add(list[i].transform);
            }
            float x = Mathf.Sin(i * ang + allang) * r;
            float z = Mathf.Cos(i * ang + allang) * r;
            float p = (z + r) / (r + r);
            float scale = max * (1 - p) + min * p;
            list[i].transform.localPosition = new Vector3(x, 0, 0);
            list[i].transform.localScale = Vector3.one * scale;
        }
        trans.Sort((a, b) => 
        {
            if (a.localScale.x<b.localScale.x)
            {
                return -1;
            }
            else if(a.localScale.x == b.localScale.x)
            {
                return 0;
            }
            else
            {
                return 1;
            }
        });
        for (int i = 0; i < trans.Count; i++)
        {
            trans[i].SetSiblingIndex(i);
        }
    }

物体添加到集合中,根据物体的大小进行排序

 public void OnDrag(PointerEventData eventData)
    {
        allang -= eventData.delta.x / r;
        Move();
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        float dis = eventData.delta.x;
        float time=Mathf.Abs(dis / dec);
        DOTween.To((a) =>
        {
            allang -= a / r;
            Move();
        }, dis, 0, time).OnComplete(() => 
        {
            float moveang = Mathf.Asin(trans[num - 1].localPosition.x / r);
            float moveanging = Mathf.Abs(moveang * r / dec);
            DOTween.To((b) =>
            {
                allang = b;
                Move();
            },allang,allang+moveang,moveanging);
        });
    }

由于是ui物体,所以直接使用拖拽接口,运用dotween插件实现惯性缓动效果并且实现对齐效果

效果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity 2D统计Unity引擎中用于可视化数据的工具。它可以帮助开发者以形化的方式呈现数据,并提供分析和理解数据的能力。 使用Unity 2D统计,开发者可以轻松地创建折线、柱状、饼等不同类型的统计表。开发者可以自定义表的外观,包括颜色、大小、标签等,以使统计表更符合项目需求和美观。 通过Unity 2D统计,开发者可以将数据可视化,更直观地了解数据的分布和变化趋势。比如,开发者可以用柱状显示销售数据,通过不同柱子的高度来比较不同时间段的销售额;或者用折线显示用户数量随时间的变化趋势,从而了解用户增长的速度和趋势。 除了数据可视化外,Unity 2D统计还提供了一些分析功能,如数据筛选、排序、筛选条件设置等。开发者可以根据需要使用这些功能来深入分析数据,从而更好地理解和运用数据。 Unity 2D统计的优势是其与Unity引擎的无缝集成。开发者可以直接在Unity编辑器中创建和编辑统计表,将其嵌入到游戏界面中,与其他游戏元素一起呈现给玩家。这使得统计表能够更好地嵌入到游戏中,提供数据的可视化和分析功能。 综上所述,Unity 2D统计是一款功能强大的数据可视化工具,能够帮助开发者以形化的方式呈现和分析数据。它的灵活性和与Unity引擎的集成使其在游戏开发中具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值