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