unity知識點 專項四 一文徹底說清楚(錨點(anchor)、中心點(pivot)、位置(position)之間的關系)

一 概述

想要使UI控件在屏幕中達到正確的顯示效果,比如自適應屏幕尺寸、固定邊距等等,首先要理清楚幾個基本概念和設置:錨點(anchor)、中心點(pivot)、位置(position)、UI縮放模式、父物件的transform設置

二???Anchor、Pivot與Position

2.1??Anchor (結論anchor以父物件為坐標參考系)

  • anchor可以理解為是該控件所在的平面坐標系原點,在屏幕縮放或者形變的過程中,控件本身自始至終都是參照其anchor的位置進行相對移動。就像是船與船錨的關系。
  • anchor可以設置一個坐標(x, y),這個坐標的參考系是該控件所屬的父層級,比如,如果直接在Canvas層級底下擺放控件,那么整個屏幕就是其父層級。不論這個父層級的比例高矮、像素多大,它的坐標范圍都會被鉗制在0-1之間,如果希望子物件的錨點位于父物件的正中間,那么子物件的錨點坐標需要設置為(0.5, 0.5)。

2.2 Pivot(結論pivot 以自身為坐標參考系)

  • pivot雖然被翻譯為中心點,但容易造成誤解,因為pivot并不一定在物體中心,甚至可以超出物件的范圍。可以理解為軸點(繞該點旋轉),或者是吸附點(用該點去吸附目標位置)
  • pivot也具有一個坐標 (x, y),這個坐標的參考系是控件本身(子層級),原點位于控件的最左下角,(1, 1)點位于最右上角

2.3 Position(結論 position是pivot與anchor的相對距離

這里和anchoredPosition的位置計算方法類似

  • position提供的信息是pivot與anchor的相對距離,例如坐標 (50,125)就代表:該控件的pivot位于自身anchor的x軸正方向50像素,y軸正方向125像素處。不論屏幕的比例、像素如何變化,pivot與anchor將始終保持(50, 125)的向量值
  • 通過圖示可以清楚的看到,anchor以父物件為坐標參考系,pivot 以自身為坐標參考系,position代表二者的距離

三?顯示窗口與屬性面板

通過圖2可以看到:

  1. 不論錨點、中心點位于何處,控件的顯示位置依然在最中央
  2. anchor只能手動拖動到父物件的邊界,它的活動范圍取決于父物件的大小(如果直接設置坐標,可以超出這個范圍)
  3. pivot的位置不受限制,所以前面提到,“中心點”的翻譯并不貼切

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖二

但是令人尷尬的事情發生了,當屏幕的比例發生變化時,控件并沒有跟隨屏幕自適應(圖3)。不過可以注意到:

  1. 錨點依然位于父層級的左下角,錨點與父物件的相對位置沒有發生改變
  2. pivot與錨點的相對位置沒有發生改變
  3. 控件與pivot的相對位置沒有發生改變

通過梳理他們三者的關系,可以嘗試這樣一種思路:1.設置錨點坐標(0.5, 0.5),使其處于父物件的中心,不論屏幕如何變化,錨點都在中心位置。2.設置pivot坐標為(0.5, 0.5),使其處于子物件中心。3.設置PosX=0, PosY=0,使錨點到pivot的向量值歸零,吸附到一起。問題解決

點開Transform中的面板(圖4),這里可以快速設置錨點的位置,另外兩個必須要注意的按鍵是 shift 和 alt,可以有效提高我們的效率:shift+點擊 可以同時設置錨點與pivot;alt+點擊 可以同時設置錨點與position;兩個鍵同時按下則可以快速設置三個屬性

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖四

shift+alt+點擊,所有屬性會快速定位到對應的位置(圖5)。如果我們的目標位置在某一個空白處,則可以手動拖拽anchor,然后將PosX,PosY設置為(0, 0),消除pivot與anchor的相對距離,控件便會自動吸附到錨點處。由于pivot默認在控件的中心位置(0.5, 0.5),所以不需要額外設置。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖五

四 注意點 check points

4.1 UI縮放模式

找到 Canvas-UI Scale Mode,下拉菜單中有三種選項,分別是:constant pixel size/ scale with screen size/ constant phsical size。也就是保持像素/跟隨縮放/保持物理距離,該縮放模式與transform設置可以形成多種排列組合結果,所以就不舉例了。如果效果不正確,記得檢查該處設置即可

4.2 父物件的transform設置

通常不會將所有的UI控件都放在Canvas層級下,而是會有類似 Canvas-grandpa-father-son 的層級管理,所以應當注意之中的 grandpa、father的尺寸(寬度width*高度height),如果最底下的son控件需要根據整個屏幕自適應,那么須確保grandpa與father已填充了屏幕尺寸。(如圖4所示,可以通過alt+點擊最右下角,填充整個屏幕)

五 思考

5.1 題目描述

現在需要在屏幕右下角放置一個button,有兩種設計模式,一種是永遠保持與屏幕邊框20像素;另一種是永遠在屏幕右下角1/10距離處,應該如何實現?

5.2 分析方案

對于第一種模式,我們需要將pivot移動到控件的右下角(1, 0),將anchor移動到屏幕的右下角(1,0),然后將position(相對距離)設置為 PosX=-20, PosY=20, 使pivot位于錨點x軸負方向20像素,y軸正方向20像素處見下圖

對于第二種模式,pivot設置為(1,0),錨點設置為(0.9,0.1),PosX=0, PosY=0,將pivot吸附到錨點如下圖

六?localPosition與anchoredPosition(3D)的區別 見下面鏈接

unity知識點 專項一 localPosition與anchoredPosition(3D)的區別-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42056.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42056.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42056.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡連接線相關問題

問題1; 直通線為什么兩頭都是T568B?是否可以兩臺T5568A?或者任意線序,只需兩頭一致? 不行,施工規范規定。(原因;網線最長距離100m,實際用起來要把網線包管,走…

【分布式系統】Filebeat+Kafka+ELK 的服務部署

目錄 一.實驗準備 二.配置部署 Filebeat 三.配置Logstash 四.驗證 一.實驗準備 結合之前的博客中的實驗 主機名ip地址主要軟件es01192.168.80.101ElasticSearches02192.168.80.102ElasticSearches03192.168.80.103ElasticSearch、Kibananginx01192.168.80.104nginx、Logs…

iperf3: error - unable to connect to server: No route to host

1.確認iperf3版本是否統一。 2.確認防火墻是否關閉。 關閉防火墻 : systemctl stop firewalld 查看防火墻狀態: systemctl status firewalld 3.重新建起鏈接

Java進階----接口interface

接口 接口概述 接口是一種規范,使用接口就代表著要在程序中制定規范. 制定規范可以給不同類型的事物定義功能,例如: 利用接口,給飛機、小鳥制定飛行規范,讓其都具備飛行的功能;利用接口,給鼠…

SMU Summer 2024 Contest Round 1

A.Hcode OnlineJudge 給出一個N面骰子和整數K,擲出1-N之間的每個數的概率相同,每次擲出一次,記為成績,若成績小于K,則開始拋硬幣,硬幣朝上則數翻倍,反之則為0,概率都為0.5。當數大于…

自動駕駛算法———車道檢測(一)

“ 在本章中,我將指導您構建一個簡單但有效的車道檢測管道,并將其應用于Carla 模擬器中捕獲的圖像。管道將圖像作為輸入,并產生車道邊界的數學模型作為輸出。圖像由行車記錄儀(固定在車輛擋風玻璃后面的攝像頭)捕獲。…

【ZIP壓縮大揭秘】輕松掌握ZIP分卷壓縮包的高效解壓秘籍!

在這個信息爆炸的時代,文件大小常常成為我們分享與存儲的絆腳石。幸運的是,ZIP分卷壓縮技術如同一把鑰匙,巧妙地將龐然大物分解成小巧易管理的部分。但面對這一串分卷壓縮包,你是否也曾迷茫于如何高效解壓,恢復文件的完…

解碼Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前綴的全面指南

📖 正文 1 字符串前加’r’ 表示原始字符串,消除轉義 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面這個列子中,如果不在路徑字符串前面加r那么,路徑中的空格就會出現問題 print(rD:\01 programming\09python\py…

全志A527 T527 cat /proc/cupinfo沒有Serial問題

1.前言 我們有些客戶是使用cpuinfo節點去獲取系統的cpuid的,如下: cat /proc/cupinfo processor : 0 BogoMIPS : 48.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp CPU impleme…

系統吃swap問題排查

目錄 背景 問題 分析并解決 1.控制線程數 2.更換IO組件 3.Linux進程信息文件分析 總結加餐 參考文檔 背景 隔壁業務組系統是簡單的主從結構,寫索引的服務(主)叫primary, 讀索引并提供搜索功能的服務(從)叫replica。業務線同步數據并不是平滑的&…

離散化及其在 Pandas 中的實現方法

目錄 1.什么是離散化? 2.離散化類型 3.示例代碼 3.1連續變量離散化 3.2定性變量離散化 4.運行結果 4.1連續變量離散化 4.2定性變量離散化 1.什么是離散化? 離散化是將連續數據或分類數據轉換為離散類別的過程,方便后續的數據分析和機…

static的理論學習

在說到static之前,需要先明確變量類型: 而在聊到變量類型之前我們可以將變量的兩個屬性好好學一學 變量的兩個屬性 作用域(scope): 從內存的角度來看,就是變量存放在棧(stack)中&…

在 JavaScript 中,??(雙問號運算符)和 ?.(可選鏈運算符)區別

在 JavaScript 中,??(雙問號運算符)和 ?.(可選鏈運算符)是兩種不同的運算符,用于處理不同的情況: 雙問號運算符 (??): ?? 運算符是空值合并運算符(Nullish Coalescing Oper…

Android C++系列:Linux進程(一)

1. 進程概念 我們知道,每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信 息,Linux內核的進程控制塊是task_struct結構體。現在我們全面了解一下其中都有哪 些信息。 進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表示,其實就是一個非 負整數。進程的…

TypeError: Cannot read properties of null (reading ‘nextSibling‘)

做項目用的Vue3Vite, 在畫靜態頁面時,點擊菜單跳轉之后總是出現如下報錯,百思不得其解。看了網上很多回答,也沒有解決問題,然后試了很多方法,最后竟然發現是template里邊沒有結構的原因。。。 原來我的index.vue是這樣…

android.bp 編譯 順序

在Android平臺上,.bp 文件是用來定義Android編譯系統中的編譯規則的。Android編譯系統是基于Blueprint的,.bp 文件中定義的規則決定了如何編譯和打包應用程序。 在Android編譯系統中,.bp 文件中的規則通常是按照它們在文件中的順序來執行的。…

ELK+Filebeat+Kafka+Zookeeper

本實驗基于ELFK已經搭好的情況下 ELK日志分析 架構解析 第一層、數據采集層 數據采集層位于最左邊的業務服務器集群上,在每個業務服務器上面安裝了filebeat做日志收集,然后把采集到的原始日志發送到Kafkazookeeper集群上。第二層、消息隊列層 原始日志發…

conda和pip

1.眾所周知,pip的確是python官方(PyPA)推薦的Python軟件包安裝管理工具,在安裝Python軟件包時,第一反應應該是pip。正是由于pip是Python官方推薦的“正統”工具,所以pip只專注于Python軟件包之間的依賴&…

Matlab手搓線性回歸-非正規方程法

原理:wxb,x是輸入,求得的結果與真實值y求均方誤差。 采用鏈式法則求導 參數更新,梯度下降法(批量梯度下降) 隨機生成數據: m100;生成100個數據,并添加隨機噪聲 clear; …

基于flask的貓狗圖像預測案例

📚博客主頁:knighthood2001 ?公眾號:認知up吧 (目前正在帶領大家一起提升認知,感興趣可以來圍觀一下) 🎃知識星球:【認知up吧|成長|副業】介紹 ??如遇文章付費,可先看…