齿轮式列表实现代码

来源:互联网 发布:linux互斥锁 实现 编辑:程序博客网 时间:2024/05/21 17:24

项目中要实现一个齿轮式滚动显示列表的代码,并且要求列表围绕着齿轮循环显示

研究了一晚上调试成功代码,贴出来备忘

工程中的样子如图


这里滚动齿轮子弹也会跟着上下拨动,我用一个椭圆形运算将子弹列表的坐标设置到椭圆上,外面加了个Panel用作遮罩,效果是实现出来了,但是并不是很完美,但是至少NGUI中的scroll view是无法动态排列的

附上相关代码


using UnityEngine;[ExecuteInEditMode]//编辑模式下执行public class BeGear : MonoBehaviour{    public GameObject ShowList;//挂载子物体列表    public Vector2 RadiusOffset = new Vector2(180, 360);    public float Threshold = 0;    Camera m_camera;    void Start()    {        m_camera = FindObjectOfType<UIRoot>().transform.FindChild("Camera").GetComponent<Camera>();        var boxCollider = gameObject.AddMissingComponent<BoxCollider>();        var widget = GetComponent<UIWidget>();        boxCollider.size = new Vector3(widget.width, widget.height, 0);        boxCollider.isTrigger = true;        //初始化排列子物体        gearRotate(m_camera, Vector2.zero, ShowList.transform, RadiusOffset, Threshold);    }    void OnDrag(Vector2 delta)    {        //拖拽时自动排列子物体        gearRotate(m_camera, UICamera.currentTouch.pos, ShowList.transform, RadiusOffset, Threshold);    }    void gearRotate(Camera uiCamera, Vector2 touchPos, Transform target, Vector2 radiusOffset, float threshold)    {        UICamera.currentCamera = uiCamera;        var anchor = transform.localPosition;        var uiPos = uiCamera.ScreenToWorldPoint(new Vector3(touchPos.x, touchPos.y, 0f));        var axis = uiCamera.transform.InverseTransformPoint(uiPos) - anchor;        var eulerAngles = Mathf.Atan2(axis.y, axis.x) / Mathf.PI * 180 + 90;        var half = (float)target.childCount / 2;        transform.localEulerAngles = new Vector3(0, 0, eulerAngles);        for (var i = 0; i < target.childCount; i++)        {            var angle = (i - half) * 45 + eulerAngles;            var axisX = Mathf.Cos(angle * Mathf.Deg2Rad) * radiusOffset.x;            var axisY = Mathf.Sin(angle * Mathf.Deg2Rad) * radiusOffset.y;            target.GetChild(i).localPosition = new Vector3(axisX, axisY, 0);            target.GetChild(i).gameObject.SetActive(!(axisX < threshold));        }    }}



0 0
原创粉丝点击