【问题标题】:unity2d transform and position of instantiated UI objectunity2d 实例化 UI 对象的变换和位置
【发布时间】:2017-09-03 16:26:40
【问题描述】:

根据the document(为方便起见,以下引用)

public static Object Instantiate(Object original, Transform parent);

如果我实例化一个预制件并将一个转换作为第二个参数传递,那么新实例化的游戏对象将是所传递转换的特定游戏对象的子对象,对吗?但是我假设新实例化的游戏对象的位置应该根据父级进行调整。

我制作了一个 UI-Image 作为预制件:使用 posX、posY 配置和锚定如下:

在层次结构中:

以及实例化C#脚本sn-p:

GameObject pageIcon = transform.parent.FindChild("PageIcon").gameObject;
Instantiate(unSelectDot, pageIcon.transform);

结果是新实例化的对象有一个奇怪的 PosX 和 PosY: 为什么会这样?谁改变了 PosX 和 PosY?我是不是误会了什么?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    当我想实例化一个相对于其父对象的对象时,我会怎么做:

    Instantiate(unSelectDot, GameObject.Find("PageIcon").transform);
    

    试试这个,希望对你有用

    【讨论】:

      【解决方案2】:

      为什么会这样?谁改变了 PosX 和 PosY?我有没有 有什么误解?

      此问题的解决方案取决于您的 Unity 版本。

      Unity 5.5 之前,当您执行 Instantiate(unSelectDot, pageIcon.transform); 时,GameOject 将在 世界空间 中实例化,而不是在预制件的位置。

      Unity 5.5及以上版本,当你Instantiate(unSelectDot, pageIcon.transform);时,GameOject默认使用Object位置作为本地位置。

      很可能你使用的是Unity 5.5下的Unity版本。在这种情况下,将false 传递给Instantiate 函数的第三个参数。

      Instantiate(unSelectDot, pageIcon.transform, false);
      

      如果这不起作用,请尝试true。虽然,false 应该这样做。

      来自 Unity 5.5 的注释release Note

      核心:使用 Object.Instantiate(Object, Transform) 现在将使用 对象位置默认为本地位置。这是一个变化 来自 5.4 的行为,它使用对象位置作为世界。

      【讨论】:

      • 嗨,@Programmer,很抱歉响应延迟,周末无法上网,事实证明,当我使用Instantiate(unSelectDot, pageIcon.transform, false); 时,预制件将按预期实例化,还要注意我正在使用 Unity 5.5.2f1,发行说明很难理解,可能是 Object 代表 Object 谁进行实例化?干杯!无论如何,谢谢!
      • “可能是 Object 代表进行实例化的 Object 吗?” 我不这么认为。 Object 参数是预制件。虽然,文件有时是错误的,但这种情况很少见。只要将fasle 传递给参数即可解决问题,您就不必再担心了
      猜你喜欢
      • 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-02-04
      相关资源
      最近更新 更多