Example #1
0
        /// <summary>
        /// 异步加载一个部位
        /// </summary>
        /// <param name="path"></param>
        /// <param name="person"></param>
        /// <param name="pos"></param>
        /// <param name="scale"></param>
        /// <param name="part"></param>
        /// <param name="cb"></param>
        private void GetOnePartAsync(string path, GameObject person, Vector3 pos, Vector3 scale, PartData part, Action <GameObject> cb = null)
        {
            PartType partType = part.PType;

            UIHelper.instance.LoadPrefabAsync(path, person.transform, pos, scale, false, null, (obj) => {
                obj.transform.SetParent(person.transform);
                RawImage img = obj.transform.Find("img_item").GetComponent <RawImage>();
                Texture2D t  = new Texture2D(500, 500, TextureFormat.RGBA32, false);
                t.filterMode = FilterMode.Point;
                t.LoadImage(part.ImgBytes);
                t.Apply(false);
                img.texture = t;
                img.SetNativeSize();
                obj.transform.localScale = scale;

                //调整父节点的大小
                float w = img.GetComponent <RectTransform>().sizeDelta.x;
                float h = img.GetComponent <RectTransform>().sizeDelta.y;
                obj.transform.GetComponent <RectTransform>().sizeDelta = new Vector2(w, h);

                DisplayPartItem item = obj.AddComponent <DisplayPartItem>();
                item.partType        = part.PType;
                item.Init();

                if (cb != null)
                {
                    cb(person);
                }
            });
        }
Example #2
0
        /// <summary>
        /// 同步获取一个人物并计算出最低点
        /// </summary>
        /// <returns>The person object.</returns>
        /// <param name="part">Part.</param>
        public GameObject GetPersonObjWithFlag(PartDataWhole whole, out float minPosY)
        {
            float           minY         = float.MaxValue;
            List <PartData> part         = whole.PartDataList;
            GameObject      person       = new GameObject("person");
            Transform       transBody    = person.transform;
            Transform       parentBody   = null;
            GameObject      parentObj    = null;
            GameObject      bodyRectTemp = null;

            if (whole.JoinType == JoinType.Animal)
            {
                string bodypath = "Prefabs/display|display_item_animalbody";
                parentObj  = UIHelper.instance.LoadPrefab(bodypath, person.transform, Vector3.zero, Vector3.one);
                parentBody = parentObj.transform.Find("img_item").transform;
                DisplayPartItem item = parentObj.gameObject.AddComponent <DisplayPartItem>();
                item.partType = PartType.AnimalBody;
            }
            for (int i = 0; i < part.Count; i++)
            {
                PartType partType = part[i].PType;
                if (partType == PartType.Pixels || partType == PartType.drawPixels)
                {
                    continue;
                }
                Vector3    pos   = new Vector3(part[i].Pos[0], part[i].Pos[1], part[i].Pos[2]);
                Vector3    scale = new Vector3(part[i].Scale[0], part[i].Scale[1], part[i].Scale[2]);
                GameObject obj;
                Debug.Log(partType + "   " + pos);
                string path = "Prefabs/display|display_item_" + partType.ToString().ToLower();
                if (partType == PartType.LeftEye || partType == PartType.RightEye || partType == PartType.Mouth)
                {
                    if (whole.JoinType == JoinType.Animal)
                    {
                        obj = UIHelper.instance.LoadPrefab(path, transBody, pos, scale);
                    }
                    else
                    {
                        obj = UIHelper.instance.LoadPrefab(path, person.transform, pos, scale);
                        obj.transform.SetParent(transBody);
                    }
                }
                else if (partType == PartType.Head || partType == PartType.TrueBody)
                {
                    obj = UIHelper.instance.LoadPrefab(path, parentBody, pos, scale);
                    if (bodyRectTemp == null)
                    {
                        bodyRectTemp = obj;
                    }
                }
                else
                {
                    obj = UIHelper.instance.LoadPrefab(path, person.transform, pos, scale);
                    obj.transform.SetParent(transBody);
                }
                //给后面的节点指定父节点
                if (partType == PartType.Head || partType == PartType.Body)
                {
                    transBody = obj.transform.Find("img_item").transform;
                }

                //使用RawImage
                RawImage  img = obj.transform.Find("img_item").GetComponent <RawImage>();
                Texture2D t   = new Texture2D(500, 500, TextureFormat.RGBA32, false);
                t.filterMode = FilterMode.Point;
                t.LoadImage(part[i].ImgBytes);
                t.Apply(false);
                img.texture = t;
                img.SetNativeSize();
                //调整父节点的大小
                float w = img.GetComponent <RectTransform>().sizeDelta.x;
                float h = img.GetComponent <RectTransform>().sizeDelta.y;
                obj.transform.GetComponent <RectTransform>().sizeDelta = new Vector2(w, h);

                DisplayPartItem item = obj.AddComponent <DisplayPartItem>();
                item.partType = part[i].PType;
                item.Init();

                //最低点计算
                float bottom = obj.GetComponent <RectTransform>().anchoredPosition.y - h / 2;

                if (partType == PartType.Body)
                {
                    float j = Utils.GetPicHeightRate(t);
                    bottom = h / 2 - h * (1 - j);
                }
                if (minY > bottom)
                {
                    minY = bottom;
                }
            }
            if (whole.JoinType == JoinType.Animal && parentObj != null)
            {
                float offsetHeight = bodyRectTemp.transform.localPosition.y;
                parentObj.transform.SetAsLastSibling();
                parentBody.GetComponent <RectTransform>().sizeDelta = new Vector2(bodyRectTemp.GetComponent <RectTransform>().sizeDelta.x, bodyRectTemp.GetComponent <RectTransform>().sizeDelta.y - offsetHeight);//bodyRectTemp.GetComponent<RectTransform>().sizeDelta;
                parentObj.GetComponent <RectTransform>().sizeDelta  = new Vector2(bodyRectTemp.GetComponent <RectTransform>().sizeDelta.x, bodyRectTemp.GetComponent <RectTransform>().sizeDelta.y - offsetHeight);
                parentBody.GetComponent <RectTransform>().anchorMin = new Vector2(0.5f, 0);
                parentBody.GetComponent <RectTransform>().anchorMax = new Vector2(0.5f, 0);
                parentBody.GetComponent <RectTransform>().pivot     = new Vector2(0.5f, 0);
            }
            GameObject flagObj = new GameObject("flag_bottom");

            flagObj.transform.SetParent(person.transform);
            flagObj.transform.localPosition = new Vector3(0, minY, 0);

            curPerson = person;
            GetListDiaplayItem(person.transform);
            minPosY = minY;
            return(person);
        }