【问题标题】:Unity Transform position isn't changing positionUnity Transform 位置没有改变位置
【发布时间】:2016-05-11 08:11:32
【问题描述】:

我正在尝试将边框的位置更改为刚好在屏幕顶部之外。我通过占据屏幕顶部,然后添加对象的一半比例来做到这一点(因为它在中间居中)。但是,当我这样做时,什么都没有改变。我打印出坐标,它说它移动了,但它没有。这是我的代码(来自 WallScalar 类中的 Start() 方法)。

注意:以下代码是 WallScalar 类中唯一的代码,此脚本应用于“Top”游戏对象。

      transform.position = 
      new Vector3(0, Camera.main.orthographicSize + (transform.localScale.y / 2), 1);

      print("yCoor: " + transform.position.y);

由于对象的比例为 1,并且顶部位于 y = 5,因此应将对象放置在 y = 5.5f 处。使用该打印语句,它说它位于 y = 5.5f 但它没有在我的屏幕上移动。这是一张图片,了解更多详情:

如您所见,它说它已移至 yCoor = 5.5f,但它没有,因为当我手动为 y 键入 5.5 时,它不可见,它就在屏幕外。 任何帮助解决这个问题将不胜感激。

更新:如果我输入打印语句,例如

      print("yCoorU: " + transform.position.y);

在我的更新方法中,它读取 y = 5,所以有些东西迫使它回到 5,但知道没有其他任何东西可以调用脚本正在应用于的“顶部”游戏对象。

【问题讨论】:

  • 墙标量脚本有什么作用?也许它把你的墙移回 5?
  • @UriPopov 我将编辑和澄清,这就是您在上面看到的代码所在的位置。
  • 您的正交相机的尺寸是多少?
  • 另一个问题。墙壁是 Top 在 0,0,0 处的父对象吗?
  • @UriPopov 是,大小为 5

标签: c# unity3d


【解决方案1】:

所以,我发现你必须禁用要更改位置的对象,设置位置然后启用它。

Player.SetActive(false);
Player.transform.position = new Vector3(PositionX, PositionY, PositionZ);
Player.SetActive(true);

这可能是因为在游戏过程中,您尝试移动的玩家或对象处于静态模式。

奇拉格沙阿

【讨论】:

    【解决方案2】:

    由于您要除以 int,我认为 transform.localScale.y / 2 的结果可能是 0 而不是 0.5(尽管我不明白为什么您的打印会给出正确的值)

    【讨论】:

    • **Camera.main.orthographicSize**+ (transform.localScale.y / 2)。您忘记了 +Camera.main.orthographicSize 部分。所以在这里获得浮动并不奇怪。
    • 我不认为这有什么不同。括号中的部分可能会转换为 int
    • 我读错了你的答案。我的评论是对我不明白为什么你的印刷品会给出正确的价值的回复。我以为你说我不明白为什么你的打印会给出一个浮点值。我再次阅读它并意识到它是不同的东西......
    【解决方案3】:

    我设法通过将父对象的 Y 值设为 0.5 来复制您的问题。确保您的父对象位于 0,0,0

    【讨论】:

    • 是的,我仔细检查了
    • 我能想到的唯一一件事是父母的规模可能会影响它。
    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2015-03-17
    • 1970-01-01
    相关资源
    最近更新 更多