无法在运行时通过正确对齐在面板上实例化对象

时间:2017-02-05 00:24:20

标签: unity3d panel instantiation

我试图在运行时将渲染器从左到右精灵映射到面板上。我已经尝试在将面板设置为父级之前和之后设置位置,并且似乎无法使其工作。对象会在面板中间,屏幕中间或屏幕外的某处产生。我想我只是不理解坐标之间的基础变化。

到目前为止,这是我的代码:

public class LoadPanel : MonoBehaviour {

    public List<GameObject> spriteRendererList = new List<GameObject>();
    public GameObject spritePanel;

    void Start () {
        Sprite[] spriteArray = Resources.LoadAll<Sprite>("sprites");
        Vector3 panelPos = spritePanel.transform.position;
        RectTransform panelRT = spritePanel.GetComponent<RectTransform>();
        float panelWidth = panelRT.rect.width;

        for (int i = 0; i < spriteArray.Length;;  i++)
        {
             Vector3 panelItemPos = new Vector3(panelPos.x + i * 5, panelPos.y, 0);
             Instantiate(spriteRendererList[i], panelItemPos, Quaternion.identity);
             spriteRendererList[i].transform.SetParent(spritePanel.transform);
             spriteRendererList[i].transform.position = panelPos + new Vector3((panelPos.x-panelWidth)/2 + i*10,0,0);
        }
}

任何人都可以帮助我解决我所缺少的问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过使用getWorldCorners()函数来确定面板的正确位置和宽度/长度。仍然不确定为什么以前的方法不起作用,但getWorldCorners应该解决这个问题。