zoukankan      html  css  js  c++  java
  • 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;
                }
            }

    就这样实现了所需布局。

    (新手上路,欢迎指正)

  • 相关阅读:
    [哈工大操作系统]一、环境配置
    [算法笔记]带权并查集
    C++:Reference to non-static member function must be called
    [算法笔记]并查集
    C++:string.size()比较问题
    [算法笔记]二分总结
    【LeetCode每日一题】2020.10.15 116. 填充每个节点的下一个右侧节点指针
    1Manjaro的安装
    【《你不知道的JS(中卷②)》】一、 异步:现在与未来
    【LeetCode每日一题】2020.7.14 120. 三角形最小路径和
  • 原文地址:https://www.cnblogs.com/answer-yj/p/10640897.html
Copyright © 2011-2022 走看看