我想移动一个文本对象,代码部分如下所示。
GameObject.transform.position = new Vector3(-210, -200, 0);当我执行并检查Unity中GameObject的posX时,它的值变成了-1170( 1920x1080),-1653.566(16:9)。但是posY可以正常工作。我将参考卷积设置为1920x1080,我认为这可能与分辨率设置有关。有什么不对劲吗?谢谢。
发布于 2017-05-04 14:41:03
如果你正在谈论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);
}
}发布于 2017-05-04 15:31:49
所有UI对象(文本、图像等)以canvas对象为父对象。Canvas根据其屏幕空间设置的不同表现如下:
画布的大小可以使用其矩形变换手动设置。
默认设置是Screen Space - Overlay,这就是您在不同分辨率上为文本对象获得不同位置值的原因。
unity UI元素使用RectTransform。来自unity docs
矩形变换组件是变换组件的2D布局副本。Transform表示单点,Rect Transform表示可放置UI元素的矩形。如果矩形变换的父级也是矩形变换,则子矩形变换还可以指定相对于父矩形应如何定位和调整大小。
因此,要设置UI元素的位置,请使用RectTransform的anchoredPosition变量,该变量设置此RectTransform的轴心相对于锚定参考点的位置。
textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 0);发布于 2017-05-04 16:51:53
在Unity中,您在检查器中看到的变换值相对于游戏对象的父对象。但是,当您尝试为游戏对象的位置设置值(通过指定transform.position = ...)时,您正在处理相对于世界中心的位置(即向量(0,0,0))。无论你是在处理3d还是2d,这一点都是正确的。
因此,如果父对象位于Vector(0,0,0),则世界位置和局部位置将相同。分辨率没有任何问题。您需要设置与父对象相关的值。
这是为对象设置值的方式。
anObject.transform.localPosition = new Vector3 (X, Y, Z);虽然没有什么能阻止你在2d工作流程中使用相同的东西,但RectTransforms在简单的转换中使用了。
https://stackoverflow.com/questions/43774662
复制相似问题