我想移动一个文本对象,而代码的一部分如下。
GameObject.transform.position = new Vector3(-210, -200, 0);
当我以Unity执行并检查GameObject的POSX时,其值将变为-1170(1920x1080(,-1653.566(16:9(。但是Posy可以正常工作。我已经将参考卷积设置为1920x1080,我认为它可能与分辨率设置有关。有什么不对的吗?谢谢。
如果您在谈论Unity 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对象(文本,图像等(均由Canvas Object unity归属。帆布根据其屏幕空间设置的行为不同 -
-
屏幕空间 - 覆盖:如果调整了屏幕或更改分辨率,则画布将自动更改大小以匹配此尺寸。
-
屏幕空间 - 相机:如果调整了屏幕,更改分辨率或相机胶合动物更改,则画布将自动更改大小以匹配。
-
屏幕空间 - 世界:画布将以场景中的任何其他对象行为。可以使用其RECT变换手动设置画布的大小。
默认设置为屏幕空间 - 覆盖这是您在不同分辨率上获得文本对象的不同位置值的原因。
UNITY UI元素使用RectTransform
。来自Unity Docs
RECT变换组件是2D布局 变换组件。其中转换代表一个点,rect 变换表示可以放置UI元素的矩形 里面。如果矩形转换的母体也是一个一个一个转换,则 儿童矩形变换还可以指定应如何定位 相对于父矩形大小。
so,要设置UI元素的位置,请使用RectTransform
的anchoredPosition
变量,该变量将其相对于锚点参考点设置此矩形的枢轴的位置。
textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 0);
引用rect transform脚本api。
在Unity中,您在检查器中看到的转换值相对于GameObject的父。但是,当您尝试为游戏对象的位置设置值(通过分配transform.position = ...(时,您正在处理相对于世界中心(即矢量(0,0,0((的位置。这对于您是否要处理3D还是2d。
是正确的。因此,如果父对象在向量(0,0,0(,则世界和本地位置将相同。该分辨率没有任何问题。您需要相对于父母设置值。
这是您为对象设置值的方式。
anObject.transform.localPosition = new Vector3 (X, Y, Z);
尽管没有什么可以阻止您在2D工作流程中使用相同的功能,但在简单的变换上使用了recttransforms。