示例#1
0
        /// <summary>
        /// sets the anchor bounds based on parent bounds
        /// </summary>
        /// <param name="r">parent bounds</param>
        public void SetPosition(Bounds r)
        {
            //calculate new bounds based on the min and max proportions
            Bounds = new Bounds(new Vector2(r.center.x + ((max.x + min.x - 1) / 2) * r.size.x,
                                            r.center.y + ((max.y + min.y - 1) / 2) * r.size.y),
                                new Vector2(r.size.x * Mathf.Abs(max.x - min.x),
                                            r.size.y * Mathf.Abs(max.y - min.y)));

            //move to the new center position
            transform.position = Bounds.center;

            //scale any UI sprites to match the bounds
            SpriteRenderer render = GetComponent <SpriteRenderer>();

            if (render != null)
            {
                render.size = Bounds.size;
            }

            //set the layout for this Anchor
            DUILayout layout = GetComponent <DUILayout>();

            if (layout)
            {
                layout.SetAnchors();
            }

            //recursively call set position on any child objects
            List <DUIAnchor> duias = new List <DUIAnchor>();

            for (int i = 0; i < transform.childCount; i++)
            {
                DUIAnchor a = transform.GetChild(i).GetComponent <DUIAnchor>();
                if (a != null)
                {
                    duias.Add(a);
                }
            }
            foreach (DUIAnchor duia in duias)
            {
                duia.SetPosition(Bounds);
            }
        }
示例#2
0
        public void SetAnchors()
        {
            anchor = GetComponent <DUIAnchor>();

            List <DUIAnchor> duias = new List <DUIAnchor>();

            for (int i = 0; i < transform.childCount; i++)
            {
                duias.Add(transform.GetChild(i).GetComponent <DUIAnchor>());
            }

            //calculate the offset between anchors
            Vector2 offset = new Vector2(layout == DUILayoutType.Horizontal ? 1.0f / (duias.Count) : 0,
                                         layout == DUILayoutType.Vertical ? 1.0f / (duias.Count) : 0);

            //set the min and max of every anchor based on anchor
            for (int i = 0; i < duias.Count; i++)
            {
                switch (layout)
                {
                case DUILayoutType.Vertical:
                    duias[i].SetMinMax(Vector2.up - (i * offset), Vector2.one - ((i + 1) * offset));
                    break;

                case DUILayoutType.Horizontal:
                    duias[i].SetMinMax(i * offset, ((i + 1) * offset) + Vector2.up);
                    break;
                }

                DUILayout duil = duias[i].GetComponent <DUILayout>();
                if (duil != null)
                {
                    duil.SetAnchors();
                }
            }
        }
示例#3
0
文件: DUI.cs 项目: SavvyEdu/Atom
        private void Awake()
        {
            Camera cam = Camera.main;

            //Orthographic setup
            if (cam.orthographic)
            {
                cameraHeight = cam.orthographicSize;
            }
            //Perspective setup
            else
            {
                //make sure vertical fov is 60
                cam.fieldOfView = 60;
                cameraHeight    = (transform.position.z - cam.transform.position.z) / Mathf.Sqrt(3);
            }

            //calculate width based on height
            cameraWidth = cameraHeight * Screen.width / Screen.height;

            //recursively call set position on any child objects
            List <DUIAnchor> duias = new List <DUIAnchor>();

            for (int i = 0; i < transform.childCount; i++)
            {
                DUIAnchor a = transform.GetChild(i).GetComponent <DUIAnchor>();
                if (a != null)
                {
                    duias.Add(a);
                }
            }
            foreach (DUIAnchor duia in duias)
            {
                duia.SetPosition(new Bounds(Vector2.zero, new Vector2(DUI.cameraWidth, DUI.cameraHeight) * 2));
            }
        }
示例#4
0
 private void Awake()
 {
     parentAnchor = transform.parent.GetComponent <DUIAnchor>();
 }