首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Unity中正确移动游戏对象?

如何在Unity中正确移动游戏对象?
EN

Stack Overflow用户
提问于 2017-05-04 13:38:46
回答 3查看 3.3K关注 0票数 0

我想移动一个文本对象,代码部分如下所示。

代码语言:javascript
复制
GameObject.transform.position = new Vector3(-210, -200, 0);

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

EN

回答 3

Stack Overflow用户

发布于 2017-05-04 14:41:03

如果你正在谈论unity ui文本,你应该这样做。

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2017-05-04 15:31:49

所有UI对象(文本、图像等)以canvas对象为父对象。Canvas根据其屏幕空间设置的不同表现如下:

画布的大小可以使用其矩形变换手动设置。

默认设置是Screen Space - Overlay,这就是您在不同分辨率上为文本对象获得不同位置值的原因。

unity UI元素使用RectTransform。来自unity docs

矩形变换组件是变换组件的2D布局副本。Transform表示单点,Rect Transform表示可放置UI元素的矩形。如果矩形变换的父级也是矩形变换,则子矩形变换还可以指定相对于父矩形应如何定位和调整大小。

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

代码语言:javascript
复制
textObject.rectTransform.anchoredPosition = new Vector3 (-10, -10, 0);

引用rect transform script API

票数 1
EN

Stack Overflow用户

发布于 2017-05-04 16:51:53

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

因此,如果父对象位于Vector(0,0,0),则世界位置和局部位置将相同。分辨率没有任何问题。您需要设置与父对象相关的值。

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

代码语言:javascript
复制
    anObject.transform.localPosition = new Vector3 (X, Y, Z);

虽然没有什么能阻止你在2d工作流程中使用相同的东西,但RectTransforms在简单的转换中使用了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43774662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档