我想要移動一個Text對象,並且代碼的一部分如下。如何正確移動Unity中的一個gameobject?
GameObject.transform.position = new Vector3(-210, -200, 0);
當我執行,並檢查遊戲物體的在Unity POSX,其值變爲-1170(在1920×1080),-1653.566(16:9)。但posY可以正常工作。我將參考卷積設置爲1920x1080,我認爲這可能與分辨率設置有關。有什麼不對的嗎?謝謝。
我想要移動一個Text對象,並且代碼的一部分如下。如何正確移動Unity中的一個gameobject?
GameObject.transform.position = new Vector3(-210, -200, 0);
當我執行,並檢查遊戲物體的在Unity POSX,其值變爲-1170(在1920×1080),-1653.566(16:9)。但posY可以正常工作。我將參考卷積設置爲1920x1080,我認爲這可能與分辨率設置有關。有什麼不對的嗎?謝謝。
如果你在談論統一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);
}
}
所有UI對象(文本,圖像等)均由畫布對象以單元格爲父元素。帆布行爲有所基於它的屏幕空間設置如下 -
屏幕空間 - 重疊:如果調整屏幕大小或分辨率的變化,畫布會自動改變大小以符合這一點。
屏幕空間 - 相機:如果屏幕的大小時,會更改分辨率,或相機視錐的變化,畫布會自動改變大小以匹配爲好。
屏幕空間 - 世界:畫布的行爲與場景中的任何其他物體一樣。可以使用Rect變換手動設置Canvas的大小。
默認設置爲屏幕空間 - 覆蓋這是你對不同的決議文本對象獲得不同的位置值的原因。
Unity UI元素使用RectTransform
。來自統一文檔
Rect變換組件是 變換組件的2D佈局副本。 Transform代表單個點,Rect Transform代表一個矩形,UI元素可以放置在內部。如果Rect變換的父親也是Rect變換,則子Rect變換也可以指定它應該如何定位 並且相對於父矩形的大小。
所以,UI元素使用RectTransform
的anchoredPosition
變量,它設置該相對於錨定參考點RectTransform的樞軸的位置來設定位置。
textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 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使用了簡單的變換。
上面提到的'GameObject'作爲一個孩子附加到另一個'GameObject'上嗎? – Hristo
嗯,我剛剛在C#中聲明瞭一個'GameObject'變量,並在Unity中拖動Canvas的文本。 – Yoohao
@Yoohao如果你在C#中編寫代碼,你不應該用[unityscript]標記你的問題。這是一種不同的編程語言。 – PJvG