Unity中锚点的动态设置


问题背景

在做签到系统时,需求给的效果图如下

 

效果图像这样,中间是模型,周围其他是签到框这样的布局,我想动态生成各个动态框,涉及到一个定位问题,锚点的设置(动态去设置每个item的位置)

实现方法

SetInsetAndSizeFromParentEdge();

此方法属于RectTransform里面得函数,(如果想更多了解RectTransform的话前面我有分析,https://www.cnblogs.com/answer-yj/p/10623304.html),这个函数有三个参数,第一个参数RectTransform.Edge.Left,是指左边的边界,第三个参数是图片的尺寸(有些地方说这是长度,但是我觉得有可能长有可能宽,需要看RectTransform.Edge的值),第二个参数是离边界的距离。注意第三个参数,这是图片尺寸,以第一个参数决定是图片的哪个尺寸

实现代码

        for (int i = 1; i < 8; i++)
        {
            GameObject go = Instantiate(Resources.Load<GameObject>("Prefab"));
            go.transform.SetParent(GameObject.Find("GameObject").transform);
            go.transform.localPosition = Vector3.zero;
            RectTransform rectTransform = go.GetComponent<RectTransform>();
            switch (i)
            {
                case 1:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, 207);
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 209);
                    break;
                case 2:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, 0, 207);
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 209);
                    break;
                case 3:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 209);
                    break;
                case 4:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 209);
                    break;
                case 5:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 207);
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, 0, 209);
                    break;
                case 6:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 207);
                    break;
                case 7:
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Bottom, 0, 207);
                    rectTransform.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Right, 0, 209);
                    break;
            }
        }

就这样实现了所需布局。

(新手上路,欢迎指正)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM