【问题标题】:How to move an gameobject in Unity properly?如何在 Unity 中正确移动游戏对象?
【发布时间】:2017-05-04 16:51:53
【问题描述】:

我想移动一个Text对象,部分代码如下。

GameObject.transform.position = new Vector3(-210, -200, 0);

当我在 Unity 中执行并检查 GameObject 的 posX 时,它的值变为 -1170(in 1920x1080), -1653.566(16:9)。但是 posY 可以正常工作。我已经将参考卷积设置为 1920x1080,我认为它可能与分辨率设置有关。有什么问题吗?谢谢。

【问题讨论】:

  • 上面提到的GameObject小时候是不是附在另一个GameObject上的?
  • 嗯,我刚刚在 C# 中声明了一个 GameObject 变量并在 Unity 中拖动 Canvas 的文本。
  • @Yoohao 如果您使用 C# 编码,则不应使用 [unityscript] 标记您的问题。这是一种不同的编程语言。

标签: c# unity3d unity5


【解决方案1】:

如果你在谈论统一的 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);
    }
}

【讨论】:

    【解决方案2】:

    所有的 UI 对象(文本、图像等)都是统一的画布对象。 Canvas 的行为会根据其屏幕空间设置而有所不同,如下所示 -

    1. 屏幕空间 - 叠加:如果调整屏幕大小或更改分辨率,Canvas 将自动更改大小以匹配此内容。

    2. 屏幕空间 - 相机:如果调整屏幕大小、更改分辨率或相机视锥体发生变化,画布也会自动更改大小以匹配。

      李>
    3. 屏幕空间 - 世界: 画布的行为与场景中的任何其他对象一样。可以使用其 Rect Transform 手动设置 Canvas 的大小。

    默认设置是屏幕空间 - 叠加,这就是您在不同分辨率下获得不同位置值的文本对象的原因。

    unity UI 元素使用RectTransform。来自统一文档

    矩形变换组件是 2D 布局对应的 变换组件。其中Transform表示一个点,Rect Transform 表示一个可以放置 UI 元素的矩形 里面。如果 Rect Transform 的父级也是 Rect Transform, 子 Rect Transform 也可以指定它应该如何定位 并相对于父矩形调整大小。

    因此,要设置 UI 元素的位置,请使用RectTransformanchoredPosition 变量,该变量设置此 RectTransform 的枢轴相对于锚参考点的位置。

    textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 0);
    

    参考rect transform script API

    【讨论】:

      【解决方案3】:

      在 Unity 中,您在检查器中看到的变换值是相对于游戏对象的父对象的。但是,当您尝试为游戏对象的位置设置值(通过分配 transform.position = ...)时,您正在处理相对于世界中心的位置(即 Vector(0,0,0))。无论您是在处理 3d 还是 2d,这都适用。

      因此,如果父对象位于 Vector(0,0,0),则世界和本地位置将相同。决议没有任何问题。您需要设置相对于您的父母的值。

      这是您为对象设置值的方式。

          anObject.transform.localPosition = new Vector3 (X, Y, Z);
      

      虽然没有什么可以阻止您将其用于 2d 工作流程,但 RectTransforms 用于简单的变换。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多