Esempio n. 1
0
    void UpdatePosition()
    {
        int childCount = transform.childCount;

        // Calculate size
        float width  = 0;
        float height = 0;

        Vector2 size;

        for (int i = 0; i < childCount; i++)
        {
            Transform child = transform.GetChild(i);

            if (child.gameObject.activeSelf)
            {
                size = child.GetComponent <SpriteRenderer>().sprite.rect.size * 0.01f;

                width += size.x + _gap;

                if (size.y > height)
                {
                    height = size.y;
                }
            }
            else
            {
                break;
            }
        }

        width -= _gap;

        Vector3 position = _anchor.GetPosition(width, height, _offsetX, _offsetY);

        Sprite sprite;
        float  leftExtent;
        float  bottomExtent;

        for (int i = 0; i < childCount; i++)
        {
            Transform child = transform.GetChild(i);

            if (child.gameObject.activeSelf)
            {
                sprite       = child.GetComponent <SpriteRenderer>().sprite;
                leftExtent   = sprite.pivot.x / sprite.pixelsPerUnit;
                bottomExtent = sprite.pivot.y / sprite.pixelsPerUnit;

                position.x += leftExtent;
                position.y += bottomExtent;

                child.transform.localPosition = position;

                position.x += sprite.bounds.size.x - leftExtent + _gap;
                position.y -= bottomExtent;
            }
            else
            {
                break;
            }
        }
    }