2017-05-23 18 views
0

假設我有一個UI畫布,它被設置爲'世界空間',並且絕對位於我的立方體上方的世界中。如何在統一的世界單位中將Canvas設置爲特定尺寸?

我的立方體在運行時調整大小。

沒有縮放畫布,我如何設置畫布的大小以匹配我的立方體的已知世界單位寬度?

我知道,你可以使用設置在「畫布單位的畫布:

var rect = canvas.GetComponent<RectTransform>(); 
rect.sizeDelta = new Vector2(200, 200); 

然而,200x200的是帆布的單位,而不是世界的單位;我的立方體寬4個單位; sizeDelta應該設置爲什麼?

我認爲這與CanvasScale組件有關,但我無法弄清楚; referenceUnitsPerPixel是100,這是完全錯誤的比例因子,並且dynamicPixelsPerUnit就像1,這也是錯誤的。

回答

2

你可以簡單地做到這一點:

  • 設置帆布組件渲染模式屬性世界(你已經這樣做)
  • 刪除CanvasScaler組件
  • 現在你的畫布是一個3D對象:設置其大小用RectTransform寬度高度

只要記住你的帆布不會非常小的尺寸元素處理(默認圖片是100x100這將比你的帆布)大得多。

希望這有助於

+0

我不太明白爲什麼這會起作用(或者更重要的是,Canvas Scaler實際上是這樣做,使得它現在不工作),但這完全有效,謝謝! – Doug

+1

基本上,** CanvasScaler **在這裏可以自動調整您的用戶界面到多種屏幕尺寸/分辨率。在你的情況下(以及大多數情況下,當_RenderMode_設置爲_World_時),不需要調整它,因爲你可以用世界單位調整它:例外情況可能是例如3D HUD的寬度,如果你希望它「填充「4:3,16:9或21:9屏幕上的整個屏幕。希望我已經清楚了:否則我會試着在我的回答中進一步解釋它:) – Kardux

0

如果您希望它具有以米爲單位的特定寬度,則可以使用meter_size/canvas_width來計算所需的比例。例如,如果您希望它的寬度爲2米,Canvas寬度爲800,則您將擁有2/800 = 0.0025。然後,您將X,Y和Z上的「畫布上的矩形變換」的「縮放」屬性設置爲0.0025,以確保其均勻縮放。

https://docs.unity3d.com/Manual/HOWTO-UIWorldSpace.html

+1

你的答案--->「你再設置變換的矩形的Scale屬性」 ......我的問題--->「**無需縮放**畫布。 ..' – Doug

+0

我會保留它,因爲它的統一首選設置世界畫布的大小的方式 – Anders

+0

如果你想在這裏留下答案,當然,但回答一個問題的解決方案*特別要求*不是在問題中使用正確值得下調。這不是一個最佳實踐討論網站;這是一個Q/A網站,你只是平坦的沒有看到這個問題。另外,請*不要*污衊這個問題。 – Doug