簡體   English   中英

unity2d轉換和實例化UI對象的位置

[英]unity2d transform and position of instantiated UI object

根據文檔 (為方便起見, 下面引用)

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

如果我實例化一個預制並傳遞一個變換作為第二個參數,那么新實例化的游戲對象將是傳遞的變換的特定游戲對象的子對象,對嗎? 但是我認為應該根據父對象調整新實例化的游戲對象的位置。

我將UI-Image制作為預制件:posX,posY的配置和錨定如下:

在此處輸入圖片說明

在層次結構中:

在此處輸入圖片說明

以及實例化的C#腳本片段:

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

結果是新實例化的對象具有奇怪的PosX和PosY: 在此處輸入圖片說明 為什么會這樣呢? 誰改變了PosX和PosY? 我誤會了嗎?

為什么會這樣呢? 誰改變了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 版本中的注釋注意

核心:使用Object.Instantiate(Object,Transform)現在將默認使用Object位置作為本地位置。 這與5.4行為不同,后者使用“對象”位置作為世界。

我想實例化一個相對於其父對象的對象時所要做的事情是:

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

試試這個,希望它對您有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM