4 min to read
Canvas 組件(屬性、靜態方法、公共方法、繼承成員、Operators)
只是筆記,搬運自:
Untiy 笔记 - Canvas 組件(属性、静态方法、公共方法、继承成员、Operators) - 知乎
這只是一個整合和翻譯,利用寫筆記的方式去理解 Unity
翻譯至 Unity - Scripting API: Canvas ,有修改/添加額外的內容
▌Overview 一下
Properties 屬性:
- additionalShaderChannels 獲取或設定 additionalShaderChannels 成員
- cachedSortingLayerValue 基於 SortingLayerID 的緩存計算值
- isRootCanvas 是否根 Canvas
- normalizedSortingGridSize Canvas 可渲染區域拆分為的標準化網格的大小。
- overridePixelPerfect 允許嵌套 Canvas 覆蓋從父 Canvas 繼承的 pixelPerfect 設置
- overrideSorting 允許嵌套Canvas 忽略父繪製順序並在頂部或下面繪製
- pixelPerfect 是否為了精確,在沒有抗鋸齒的情況下呈現UI ?
- pixelRect 獲取 Canvas 的渲染矩形(render rect)
- planeDistance 相機與UI 元件的距離,Canvas 生成的距離相機多遠
- referencePixelsPerUnit 每被認為是默認的單位像素的數量
- renderMode Canvas 的 Render Mode 成員
- renderOrder 將畫布發送到場景的渲染順序 (只讀)
- rootCanvas 返回最接近 root 的 Canvas
- scaleFactor 用於縮放整個畫布,同時仍然使其適合屏幕
- sortingLayerID Canvas 排序圖層的唯一 ID
- sortingLayerName Canvas 排序圖層的名稱
- sortingOrder Canvas 在排序圖層中的順序
- targetDisplay 選擇渲染到指定的顯示(Display)的目標
- worldCamera 渲染/事件相機
Static Methods 靜態方法:
- ForceUpdateCanvases 強制所有 Canvas 更新其內容
- GetDefaultCanvasMaterial 返回可用於在 Canvas 上渲染常規元素的默認材質
- GetETC1SupportedCanvasMaterial 獲取或生成 ETC1 材質
Events:
- willRenderCanvases 在 Canvas 渲染髮生之前調用的事件
Inherited Members:
Properties, Public Methods, Static Methods, Operators :
(不是本文核心,略去。)
▌以下正文,有一些較詳細的解釋
▌Properties 屬性
獲取或設定 additionalShaderChannels 成員
基於 SortingLayerID 的緩存計算值。
是否根 Canvas ?
Canvas 可渲染區域拆分為的標準化網格的大小
在渲染期間,Canvas 將可渲染區域(所有 UI 元素的邊界)拆分為網格 這是該網格的標準化大小
例如,如果您的可渲染區域為 100 個單位且 sortedGridNormalizedSize 為 0.1f, 則每個網格單元格將為 10 個單位
注意:值 0 將默認為 0.1f
允許嵌套 Canvas 覆蓋從父 Canvas 繼承的 pixelPerfect 設置
允許嵌套 Canvas 忽略父繪製順序並在頂部或下面繪製
Canvas 中的元素與像素對齊,僅適用於 renderMode 是 Screen Space
是否為了精確,在沒有抗鋸齒的情況下呈現 UI ?
啟用 Pixel Perfect 可以使元素看起來更清晰並防止模糊 但是,如果有許多縮放或旋轉的元件,或細微的動畫位置或縮放 禁用 Pixel Perfect 可能會比較好,因為移動將會更平滑
有額外的性能開銷。
獲取 Canvas 的渲染矩形(render rect)
如果處於疊加模式(Screen Space - Overlay),則這將是屏幕尺寸。
如果處於世界模式(World Space )下,這將是相機屏幕視口 rect。
相機與 UI 元件的距離,Canvas 生成的距離相機多遠。
每被認為是默認的單位像素的數量。
Canvas 的 Render Mode 成員。
配合 RenderMode.ScreenSpaceCamera RenderMode.ScreenSpaceOverlay RenderMode.WorldSpace 使用
將畫布發送到場景的渲染順序 (只讀)
注意:目前只有 Screen Space - Overlay 是正確地排序 Screen Space - Camera 和 World Space 是根據與攝像機的距離進行發射和排序
返回最接近 root 的 Canvas,方法是檢查每個父級並返回找到的最後一個canvas 如果沒有找到其他畫布,則畫布將自行返回
另請參見:isRootCanvas。
用於縮放整個畫布,同時仍然使其適合屏幕
僅適用於 renderMode 是屏幕空間(Screen Space)
Canvas 排序圖層的唯一 ID
Canvas 排序圖層的名稱
Canvas 在排序圖層中的順序
選擇渲染到指定的顯示 (Display) 的目標,e.g. Display1, Display4, Display8
此設置使 Canvas 渲染到指定的顯示中。支持的輔助顯示器(例如監視器)的最大數量為 8
在 Screen Space - Camera,作為 Render Camera 渲染相機
在 World Space ,作為 Event Camera 事件相機
▌Static Methods 靜態方法
強制所有 Canvas 更新其內容
Canvas 在渲染之前在幀的末尾執行其佈局和內容生成計算 以確保它基於該幀期間可能發生的所有最新更改 這意味著在 Start 回調和第一個 Update 回調中,Canvas 下的佈局和內容可能不是最新的
依賴於最新佈局或內容的代碼可以在執行依賴於它的代碼之前調用此方法以確保它
返回可用於在 Canvas 上渲染常規元素的默認材質
獲取或生成 ETC1 材質
▌Events
在 Canvas 渲染髮生之前調用的事件
這允許您延遲處理/更新基於畫布的元素,直到它們呈現之前
▌Inherited Members
▌Properties
啟用
已啟用會更新,禁用則相反(停止更新)
行為是否已激活且已啟用?
GameObject 可以是活動的或不活動的 同樣,可以啟用或禁用腳本
如果GameObject處於活動狀態且具有啟用的腳本
則 isActiveAndEnabled 將返回true
。否則false
返回
此組件附加到的遊戲對象,組件總會有一個被附加的遊戲對象
這個遊戲對象的標籤
附加到此 GameObject 的 Transform
隱藏對象,使用場景保存還是用戶可修改?
配合 HideFlags.HideAndDontSave 使用
GameObject 不會顯示在層次結構中,也不會保存到場景中, 也不會被 Resources.UnloadUnusedAssets 卸載。 這最常用於由腳本創建的遊戲對象,並且完全由腳本控制。
對象的名稱
組件與遊戲對象和所有附加組件共享相同的名稱
如果一個類從 MonoBehaviour 派生,它會繼承了 name 字段 如果此類也附加到 GameObject,則 name 字段將設置為該 GameObject 的名稱
▌Public Methods
在此遊戲對像或其任何子對象的每個 MonoBehaviour 上調用名為 methodName 的方法
這個遊戲對像被這個標籤標記的嗎?
如果遊戲對像有附加這個組件,則返回 Type 類型的組件,如果沒有,則返回 null
使用深度優先搜索返回 GameObject 或其任何子節點中 Type 類型的組件
返回 GameObject 或其任何父項中的Type類型的組件
返回 GameObject 中 Type 類型的所有組件
返回 GameObject 或其任何子項中Type類型的所有組件
返回 GameObject 或其任何父項中Type類型的所有組件
在此遊戲對像中的每個 MonoBehaviour 上調用名為 methodName 的方法
調用名為 methodName 的方法 在此遊戲對像中的每個 MonoBehaviour 以及在每個祖先上
獲取指定類型的組件(如果存在)
返回對象的實例 ID
返回 GameObject 的名稱
▌Static Methods
刪除遊戲對象,組件或資產
void Destroy(Object obj, float t = 0.0F);
該對象 obj
現在將被銷毀,或者 t
從現在開始指定時間
如果obj
是Component ,它將從GameObject 中刪除該組件並將其銷毀
如果obj
是GameObject 會破壞GameObject
它的所有組件和所有轉換 GameObject 的子節點
實際對象破壞始終延遲到當前 Update 循環之後,但始終在渲染之前完成
立即銷毀對象 obj。強烈建議您使用 Destroy
加載新場景時,請勿銷毀目標對象
此方法調用 Object.FindObjectOfType 並返回與該類型匹配的對象 如果沒有對象與該類型匹配,則返回 null
返回 Type 類型的第一個活動加載 Object
FindObjectOfType 將不返回 Assets(網格,紋理,預製件……)或非活動對象 它用於定位 GameObject
這不會返回具有 HideFlags.DontSave 設置的 Object
請注意,此功能非常慢。不建議每幀使用此功能。在大多數情況下,您可以使用單例模式
返回與該類型匹配的 Object []
它不會返回任何資產(網格,紋理,預製件……)或非活動對象
不會返回具有 HideFlags.DontSave 設置的對象
使用 Resources.FindObjectsOfTypeAll 可以避免這些限制
請注意,此功能非常慢。不建議每幀使用此功能。在大多數情況下,您可以使用單例模式
克隆對象原始並返回克隆對象
此函數以與編輯器中的“複製”命令類似的方式創建對象的副本
如果您正在克隆 GameObject 那麼您也可以選擇指定其位置和旋轉(否則默認為原始 GameObject 的位置和旋轉)
如果您正在克隆一個 Component 那麼它附加的 GameObject 也將被克隆,再次使用可選的位置和旋轉
克隆GameObject 或Component 時,所有子對象和組件也將被克隆 其屬性設置與原始對象的屬性相同
默認情況下為父級新對象的值將為 null,因此它不會是原始對象的 “兄弟”(sibling) 但是,您仍然可以使用重載方法設置父級
如果指定了父級並且未指定位置和旋轉 則如果 instantiateInWorldSpace 參數為 true 則原始位置和旋轉將用於克隆對象的本地位置和旋轉,或其世界位置和旋轉
如果指定了位置和旋轉,它們將用作對像在世界空間中的位置和旋轉
克隆時 GameObject 的活動狀態將被傳遞 因此如果原始文件處於非活動狀態,則克隆也將在非活動狀態下創建
▌Operators
對象存在嗎?
比較兩個對像是否引用不同的對象
比較兩個對象引用以查看它們是否引用同一對象