2017-05-04 62 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使用了简单的变换。

相关问题