[Unity]NGUI插件的坐標(biāo)系統(tǒng)和Anchor錨點

[Unity]技術(shù)學(xué)習(xí)路線圖(長期更新)

最近開發(fā)項目使用自定義NGUI組件控件的功能比較多,對NGUI系統(tǒng) 內(nèi)的坐標(biāo)系統(tǒng)和錨點做個總結(jié)

NGUI坐標(biāo)系統(tǒng)及錨點

坐標(biāo)系統(tǒng)圖解

坐標(biāo).jpg
坐標(biāo).jpg

操作圖
操作圖
  • NGUI插件默認(rèn)以父節(jié)點的中心點(0,0)為原點
  • NGUI插件默認(rèn)以父節(jié)點的右側(cè)為x軸正向
  • NGUI插件默認(rèn)以父節(jié)點的上側(cè)為y軸正向

框架類結(jié)構(gòu)

NGUI框架內(nèi)支持SetRect函數(shù)的類結(jié)構(gòu)
NGUI框架內(nèi)支持SetRect函數(shù)的類結(jié)構(gòu)

在腳本代碼中修改游戲?qū)ο蟮木匦挝恢?code>Rect

  • NGUIRects.cs修改UIRect腳本的位置Position

    
    using System;
    using UnityEngine;
    
    public sealed class NGUIRects
    {
        private NGUIRects ()
        {
        }
    
        //重置UIRect組件對象的位置
        public static void CenterByPosition(UIRect rect,Vector2 center)
        {
            if (rect == null) {
                return;
            }
            
            Vector3 v = new Vector3 (center.x, center.y);
            rect.transform.localPosition = v;
        }
    
        //根據(jù)Vector2增量改變UIRect組件對象的位置
        public static void CenterByIncrement(UIRect rect,Vector2 vector)
        {
            if (rect == null) {
                return;
            }
            if (vector.Equals(Vector2.zero)) {
                return;
            }
    
            Vector3 v = new Vector3 (vector.x, vector.y);
            rect.transform.localPosition += v;
        }
    }
    
    
  • NGUIRects.cs修改UIRect腳本的位置Size

    public static void SizeBySize(UIRect rect,Vector2 size)
    {
        if (rect == null) {
            return;
        }
    
        if (size.Equals(Vector2.zero)) {
            return;
        }
    
        Vector3 center = rect.transform.localPosition;
        
        //首先修改物體的大小
        rect.SetRect (0f, 0f, size.x, size.y);
        
        //防止中心位置不發(fā)生改變
        rect.transform.localPosition = center;
    }
    
    

錨點圖解

錨點操作圖
錨點操作圖

框架類結(jié)構(gòu)

UIAnchor
UIAnchor

AnchorPoint
AnchorPoint

在腳本代碼中修改游戲?qū)ο蟮木匦挝恢?code>Anchor

  • 使用默認(rèn)的leftAnchor、rightAnchor、bottomAnchor、topAnchor(即4個方向同時相對于同一個Transform)

    public UISprite test_sprite;
    ...
    if (test_sprite.isFullyAnchored) 
    {
        test_sprite.SetAnchor (anchor_sprite.gameObject, 1, 2, 3, 4);
    }
    
實現(xiàn)在Inspector中的效果
實現(xiàn)在Inspector中的效果
  • 使用自定義的leftAnchor、rightAnchorbottomAnchor、topAnchor(即4個方向可以相對于自定義的Transform)

    public UISprite test_sprite;
    public Transform leftAnchorTarget;
    public Transform rightAnchorTarget;
    public Transform topAnchorTarget;
    public Transform bottomAnchorTarget;
    ...
    
    test_sprite.leftAnchor.Set (leftAnchorTarget, 0f, 20f);
    test_sprite.rightAnchor.Set (rightAnchorTarget, 0.5f, -30f);
    test_sprite.topAnchor.Set (topAnchorTarget, 0.5f, 20f);
    test_sprite.bottomAnchor.Set (bottomAnchorTarget, 1f, 20f);
    
    • 解釋一下AnchorPoint內(nèi)的Set的三個參數(shù)的作用

      • target:Transform

        • 指定某個方向的相對于的Transform組件
      • relative:float

        • 如果是水平方向的約束錨點:leftAnchor、rightAnchor

          • Target游戲?qū)ο?code>Transform組件的左邊的relative的值是0;

          • Target游戲?qū)ο?code>Transform組件的中心的relative的值是0.5;

          • Target游戲?qū)ο?code>Transform組件的右邊的relative的值是1;

          • 其他的relative值是自定義位置;

        • 如果是垂直方向的約束錨點:topAnchor、bottomAnchor

          • Target游戲?qū)ο?code>Transform組件的下邊的relative的值是0;

          • Target游戲?qū)ο?code>Transform組件的中心的relative的值是0;

          • Target游戲?qū)ο?code>Transform組件的上邊的relative的值是0;

          • 其他的relative值是自定義位置;

      • absolute:float

        • 偏移量的值;

如若有無,請聯(lián)系我

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容