簡體   English   中英

unity UI 中 rect 變換的位置

[英]Position of rect Transform in unity UI

我在使用 Unity 的 UI rectTransform 進行編程時發現了一個非常令人困惑的問題:

在檢查器中,我們可以發現 RectTransform 的位置被設置為(0,0,0) 在此處輸入圖片說明

但是在Start()的代碼中,當我打印位置時:

parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().localPosition);

這會給我一個位置:

parentObject rectTransform :Panel: (0.0, -562.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)

當我們嘗試獲取position而不是localPosition時,事情會更加混亂:

parentObject rectTransform :Panel: (621.0, 1365.5, 0.0)
UnityEngine.Debug:Log(Object)
NewWorkerController:Start() (at Assets/Scripts/NewWorkerController.cs:60)

我還在 playMode 期間檢查了這個 rectTransform 的 posX 和 posY 這表明它沒有被改變(一直顯示(0,0,0)

那有什么問題?

您在RectTransform組件中看到的不是本地位置。 手冊說:

定位UI元素

UI元素通常使用其Rect變換定位。 如果UI元素是布局組的子元素,它將自動定位並且可以跳過定位步驟。

定位矩形變換時,首先確定它是否具有或應該具有任何拉伸行為是有用的。 當anchorMin和anchorMax屬性不相同時,會發生拉伸行為。

對於非拉伸矩形變換,通過設置anchoredPosition和sizeDelta屬性可以最輕松地設置位置。 anchoredPosition指定樞軸相對於錨點的位置。 sizeDelta與沒有拉伸時的大小相同。

對於拉伸Rect變換,使用offsetMin和offsetMax屬性設置位置可能更簡單。 offsetMin屬性指定rect的左下角相對於左下錨點的角。 offsetMax屬性指定rect右上角相對於右上角的角

資料來源: https//docs.unity3d.com/Manual/HOWTO-UICreateFromScripting.html

在您的情況下,您有一個非拉伸矩形變換。 因此,嘗試打印錨定位置:

parentObject = transform.parent.gameObject;
Debug.Log("parentObject rectTransform :" + parentObject.GetComponent<RectTransform>().anchoredPosition);

減少混淆並更好地了解更改 RectTransform 如何影響腳本中看到的值的一種方法。 (例如場景/檢查器設置的變化如何反映在腳本成員變量中)

  1. 創建單獨的檢查器屬性窗口:單擊 RectTransform 中的 3 個點並選擇“屬性...”
  2. 打開調試模式:在應該彈出的新窗口中...單擊整個窗口的最高級別 3 個點並選擇“調試”您現在可以使用具有 RectTransform 的對象並查看成員變量如何調試窗口(與腳本中可訪問的變量相同)顯示您的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM