Beispiel #1
0
        //-------∽-★-∽------∽-★-∽--------∽-★-∽ApplyGameObjectParam∽-★-∽--------∽-★-∽------∽-★-∽--------//

        public override void ApplyGameObjectParam(GameObject go, JsonData data)
        {
            base.ApplyGameObjectParam(go, data);


            if (HasParam(data, PATTERN_SHRINK) == true)
            {
                //SHRINK按钮
                go.AddComponent <KButtonShrinkable>();
            }
            else
            {
                go.AddComponent <KButton>();
            }


            bool shouldResetPivot = true;   //需要重置轴点

            if (HasParam(data, PATTERN_ANCHOR))
            {
                //有锚点参数
                string param = GetParam(data, PATTERN_ANCHOR);
                if (param.Contains(PARAM_CENTER) && param.Contains(PARAM_MIDDLE))
                {
                    //居中
                    shouldResetPivot = false;
                }
            }

            if (shouldResetPivot && !HasParam(data, PATTERN_PIVOT))
            {
                //没有轴点参数
                KuiUtil.SetPivotSmart(go.GetComponent <RectTransform>(), new Vector2(0.5f, 0.5f), true);
            }
        }
Beispiel #2
0
        //-------∽-★-∽------∽-★-∽--------∽-★-∽Pivot∽-★-∽--------∽-★-∽------∽-★-∽--------//

        private void SetPivot(GameObject go, JsonData data)
        {
            var   s      = GetParam(data, PATTERN_PIVOT);
            Match m      = PATTERN_PIVOT.Match(s);
            float pivotX = Int32.Parse(m.Groups[2].Value) / 10.0f;

            pivotX = Mathf.Clamp01(pivotX);
            float pivotY = Int32.Parse(m.Groups[3].Value) / 10.0f;

            pivotY = Mathf.Clamp01(pivotY);
            RectTransform rect = go.GetComponent <RectTransform>();

            KuiUtil.SetPivotSmart(rect, new Vector2(pivotX, pivotY), true);
        }
Beispiel #3
0
        private void CenterFitChildren(GameObject go)
        {
            KInputField input       = go.GetComponent <KInputField>();
            GameObject  placeholder = input.placeholder.gameObject;
            GameObject  inputtext   = input.textComponent.gameObject;

            var parentTransform      = go.GetComponent <RectTransform>(); //把inputtext变成这个尺寸, 然后居中对齐
            var placeholderTransform = placeholder.GetComponent <RectTransform>();
            var inputtextTransform   = inputtext.GetComponent <RectTransform>();

            //placeholderTransform.sizeDelta = parentTransform.rect.size;
            //placeholderTransform.anchoredPosition = new Vector2(placeholderTransform.anchoredPosition.x, 0);

            inputtextTransform.sizeDelta = parentTransform.rect.size;
            //inputtextTransform.anchoredPosition = new Vector2(inputtextTransform.sizeDelta.x * 0.5f, -inputtextTransform.sizeDelta.y * 0.5f);
            KuiUtil.SetAnchorSmart(inputtextTransform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f));
            inputtextTransform.anchoredPosition = new Vector2(-inputtextTransform.sizeDelta.x * 0.5f, inputtextTransform.sizeDelta.y * 0.5f);
        }
    static public int SetPivotSmart_s(IntPtr l)
    {
        try
        {
            GameObject self = (GameObject)checkSelf(l);

            float x, y;
            checkType(l, 2, out x);
            checkType(l, 3, out y);

            RectTransform rectTrans = ComponentUtil.NeedComponent_ <RectTransform>(self);
            KuiUtil.SetPivotSmart(rectTrans, new Vector2(x, y), true);

            pushValue(l, true);
            return(1);
        }
        catch (Exception e)
        {
            return(error(l, e));
        }
    }
Beispiel #5
0
        //-------∽-★-∽------∽-★-∽--------∽-★-∽Anchor∽-★-∽--------∽-★-∽------∽-★-∽--------//

        public void SetAnchor(GameObject go, JsonData stateData)
        {
            string param = GetParam(stateData, PATTERN_ANCHOR);

            param = param.ToLower();
            param = param.Replace(PARAM_PREFIX, "");

            RectTransform rectTransform = go.GetComponent <RectTransform>();
            Vector2       anchorMin     = new Vector2();
            Vector2       anchorMax     = new Vector2();

            if (param == PARAM_STRETCH)
            {
                anchorMin.Set(0, 0);
                anchorMax.Set(1, 1);
                if (go.transform.parent == null || go.transform.parent.name.Contains("Canvas"))
                {
                    Vector3 oldPos = rectTransform.position;
                    rectTransform.sizeDelta = Vector2.zero;
                    rectTransform.anchorMin = anchorMin;
                    rectTransform.anchorMax = anchorMax;
                    rectTransform.position  = oldPos;
                    return;
                }
            }
            else
            {
                //左中右
                if (param.Contains(PARAM_LEFT))
                {
                    anchorMin.x = anchorMax.x = 0;
                }
                else if (param.Contains(PARAM_CENTER))
                {
                    anchorMin.x = anchorMax.x = 0.5f;
                }
                else if (param.Contains(PARAM_RIGHT))
                {
                    anchorMin.x = anchorMax.x = 1;
                }
                else
                {
                    anchorMin.x = 0;
                    anchorMax.x = 1;
                }

                //上中下
                if (param.Contains(PARAM_UPPER))
                {
                    anchorMin.y = anchorMax.y = 1;
                }
                else if (param.Contains(PARAM_MIDDLE))
                {
                    anchorMin.y = anchorMax.y = 0.5f;
                }
                else if (param.Contains(PARAM_LOWER))
                {
                    anchorMin.y = anchorMax.y = 0;
                }
                else
                {
                    anchorMin.y = 0;
                    anchorMax.y = 1;
                }
            }

            if (param.Contains(PARAM_CENTER) && param.Contains(PARAM_MIDDLE))
            {
                KuiUtil.SetPivotSmart(rectTransform, new Vector2(0.5f, 0.5f), true);
            }

            KuiUtil.SetAnchorSmart(rectTransform, anchorMin, anchorMax);
        }
        /// <summary>
        /// 执行切片
        /// </summary>
        /// <param name="atlasPath"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="clipType"></param>
        public static void ClipAtlas(string atlasPath, float width, float height, string clipType)
        {
            if (!atlasPath.EndsWith(".png") || atlasPath.EndsWith(".tag"))
            {
                Debug.LogError("--->> 目前仅支持.png/.tga");
                return;
            }

            JsonData jsonData = GetJsonData(atlasPath, clipType);

            TextureImporter importer = AssetImporter.GetAtPath(atlasPath) as TextureImporter;
            Dictionary <string, SpriteMetaData> nameDic = TransNameDic(importer.spritesheet);


            List <SpriteMetaData> metaDatasNew = new List <SpriteMetaData>();

            SpriteMetaData[] metaDatas = importer.spritesheet;
            for (int i = 0; i < metaDatas.Length; i++)
            {
                SpriteMetaData source = metaDatas[i];

                string clipName; //切片名称

                if (IsClipName(source.name))
                {
                    //是切片数据,不会为它生成切片
                    AddToMetaDatas(metaDatasNew, source, false);
                    continue;
                }
                else
                {
                    clipName = GetClipName(source.name, clipType); //切片名称

                    metaDatasNew.Add(source);
                }


                SpriteMetaData clipData = new SpriteMetaData();

                Rect source_rect = source.rect;
                clipData.name = clipName;


                if (jsonData != null && jsonData.Keys.Contains(clipName))
                {
                    //json里有数据
                    JsonData data = jsonData[clipName];

                    JsonData rectData  = data["rect"];
                    JsonData pivotData = data["pivot"];


                    Rect    rectOld     = new Rect(source_rect.x + (int)rectData["offetX"], source_rect.y + (int)rectData["offetY"], (int)rectData["width"], (int)rectData["height"]);
                    Vector2 pivotOld    = new Vector2((float)(double)pivotData["x"], (float)(double)pivotData["y"]); //中点取json里面的
                    Vector2 pivotPosOld = KuiUtil.CalcPivotPos(rectOld, pivotOld);

                    Rect rectNew = KuiUtil.CalcRectByPivot(pivotPosOld, pivotOld, new Size(width, height));

                    //偏移坐标取之前的,尺寸取这次的
                    //Rect rect = new Rect(source_rect.x + (int)rectData["offetX"], source_rect.y + (int)rectData["offetY"], width, height);
                    Rect rect = new Rect(rectNew.x, rectNew.y, width, height);
                    clipData.rect  = rectNew;
                    clipData.pivot = pivotOld;

                    Debug.Log("切片数据被覆盖\t" + atlasPath + " " + clipType);
                }
                else
                {
                    Rect rect = new Rect(source_rect.x + (source_rect.width - width) / 2, source_rect.y + (source_rect.height - height) / 2, width, height);

                    clipData.rect  = rect;
                    clipData.pivot = new Vector2(0.5f, 0.5f);
                }

                AddToMetaDatas(metaDatasNew, clipData, true);
            }

            if (metaDatasNew.Count > 0)
            {
                importer.spritesheet = metaDatasNew.ToArray();
                EditorUtility.SetDirty(importer);
                importer.SaveAndReimport();

                SaveJsonData(atlasPath, importer.spritesheet);
            }

            AssetDatabase.SaveAssets();
        }