我想要移动一个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