2017-05-04 178 views
-1

我想要移動一個Text對象,並且代碼的一部分如下。如何正確移動Unity中的一個gameobject?

GameObject.transform.position = new Vector3(-210, -200, 0); 

當我執行,並檢查遊戲物體的在Unity POSX,其值變爲-1170(在1920×1080),-1653.566(16:9)。但posY可以正常工作。我將參考卷積設置爲1920x1080,我認爲這可能與分辨率設置有關。有什麼不對的嗎?謝謝。

+0

上面提到的'GameObject'作爲一個孩子附加到另一個'GameObject'上嗎? – Hristo

+0

嗯,我剛剛在C#中聲明瞭一個'GameObject'變量,並在Unity中拖動Canvas的文本。 – Yoohao

+0

@Yoohao如果你在C#中編寫代碼,你不應該用[unityscript]標記你的問題。這是一種不同的編程語言。 – PJvG

回答

3

如果你在談論統一ui文本,你應該這樣做。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class UITestSO : MonoBehaviour 
{ 

    public Text textObject; 
    void Start() 
    { 

     //Position relative to parent transform 
     textObject.rectTransform.localPosition = new Vector3 (-210, -200, 0); 

     //Position in world space 
     textObject.rectTransform.position = new Vector3 (-210, -200, 0); 
    } 
} 
1

所有UI對象(文本,圖像等)均由畫布對象以單元格爲父元素。帆布行爲有所基於它的屏幕空間設置如下 -

  1. 屏幕空間 - 重疊:如果調整屏幕大小或分辨率的變化,畫布會自動改變大小以符合這一點。

  2. 屏幕空間 - 相機:如果屏幕的大小時,會更改分辨率,或相機視錐的變化,畫布會自動改變大小以匹配爲好。

  3. 屏幕空間 - 世界:畫布的行爲與場景中的任何其他物體一樣。可以使用Rect變換手動設置Canvas的大小。

默認設置爲屏幕空間 - 覆蓋這是你對不同的決議文本對象獲得不同的位置值的原因。

Unity UI元素使用RectTransform。來自統一文檔

Rect變換組件是 變換組件的2D佈局副本。 Transform代表單個點,Rect Transform代表一個矩形,UI元素可以放置在內部。如果Rect變換的父親也是Rect變換,則子Rect變換也可以指定它應該如何定位 並且相對於父矩形的大小。

所以,UI元素使用RectTransformanchoredPosition變量,它設置該相對於錨定參考點RectTransform的樞軸的位置來設定位置。

textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 0); 

參考rect transform script API

0

在Unity中,您在檢查器中看到的變換值與gameobject的父對象相關。但是,當您嘗試爲gameobject的位置設置值(通過賦值transform.position = ...)時,您正在處理相對於世界中心的位置(即Vector(0,0,0))。這對你是否正在處理3d或2D是適用的。

所以,如果父對象是在向量(0,0,0),世界和本地位置將是相同的。決議沒有任何問題。你需要設置相對於父母的值。

這是您如何設置對象的值。

anObject.transform.localPosition = new Vector3 (X, Y, Z); 

雖然沒有什麼使用相同的2D工作流程阻止你,RectTransforms使用了簡單的變換。

相關問題