Beispiel #1
0
        public AdvCommandSetPivot(StringGridRow row, AdvSettingDataManager dataManager)
            : base(row)
        {
            targetName = this.ParseCell <string>(AdvColumnName.Arg1);

            string strPivotX = ParseCell <string>(AdvColumnName.Arg2);

            switch (strPivotX)
            {
            case AdvCommandKeyword.Left:
                pivotX = 0.0f;
                break;

            case AdvCommandKeyword.Center:
                pivotX = 0.5f;
                break;

            case AdvCommandKeyword.Right:
                pivotX = 1.0f;
                break;

            default:
                pivotX = this.ParseCell <float>(AdvColumnName.Arg2);
                break;
            }

            string strPivotY = ParseCell <string>(AdvColumnName.Arg3);

            switch (strPivotY)
            {
            case AdvCommandKeyword.Bottom:
                pivotY = 0.0f;
                break;

            case AdvCommandKeyword.Center:
                pivotY = 0.5f;
                break;

            case AdvCommandKeyword.Top:
                pivotY = 1.0f;
                break;

            default:
                pivotY = this.ParseCell <float>(AdvColumnName.Arg3);
                break;
            }

            x         = this.ParseCellOptional <float>(AdvColumnName.Arg4, 0.0f);
            y         = this.ParseCellOptional <float>(AdvColumnName.Arg5, 0.0f);
            pivotType = this.ParseCellOptional(AdvColumnName.Arg6, AdvGraphicObjectPivotType.SpritePos);
        }
Beispiel #2
0
        //ピボットの中心となる対象のローカル座標で取得
        Vector3 GetPivotTargetInSpriteSpace(float pivotX, float pivotY, float offsetX, float offsetY, AdvGraphicObjectPivotType pivotType)
        {
            var childTransform     = TargetObject.transform;
            var childRectTransform = childTransform as RectTransform;

            if (childRectTransform == null)
            {
                Debug.LogError(this.gameObject.name + "is not RectTransform type");
                return(Vector3.zero);
            }
            //ピボットを対象のローカル座標に返還
            Vector3 local = childRectTransform.PivotToLocalPoint(new Vector2(pivotX, pivotY));

            switch (pivotType)
            {
            case AdvGraphicObjectPivotType.SpritePos:
            {
                //子オブジェクトのスケール値を無視する形に
                Vector2 scale = childRectTransform.localScale;
                if (Mathf.Approximately(0, scale.x))
                {
                    scale.x = 1;
                }
                if (Mathf.Approximately(0, scale.y))
                {
                    scale.y = 1;
                }
                local.x += offsetX / scale.x;
                local.y += offsetY / scale.y;
            }
            break;

            case AdvGraphicObjectPivotType.SpritePosLocal:
            {
                //指定の値だけずらす
                local.x += offsetX;
                local.y += offsetY;
            }
            break;

            case AdvGraphicObjectPivotType.SpritePosNoSize:
                //ここではオフセット適用しない
                break;

            default:
                Debug.LogError(pivotType + " is Failed");;
                break;
            }
            var world = childTransform.LocalPointToWorldPoint(local);

            switch (pivotType)
            {
            case AdvGraphicObjectPivotType.SpritePosNoSize:
                //ここでオフセット適用
                world.x += offsetX / Layer.Manager.PixelsToUnits;
                world.y += offsetY / Layer.Manager.PixelsToUnits;
                break;

            default:
                break;
            }
            return(world);
        }
Beispiel #3
0
        //ピボットの中心となるポイントをワールド座標で取得
        Vector3 GetPivotTargetWorldPoint(float pivotX, float pivotY, float offsetX, float offsetY, AdvGraphicObjectPivotType pivotType)
        {
            switch (pivotType)
            {
            case AdvGraphicObjectPivotType.WorldSpace:
                //ワールドスペースの場合のピボット点を取得
                return(GetPivotTargetInWorldSpace(pivotX, pivotY, offsetX, offsetY));

            default:
                return(GetPivotTargetInSpriteSpace(pivotX, pivotY, offsetX, offsetY, pivotType));
            }
        }
Beispiel #4
0
        internal void SetPivot(float pivotX, float pivotY, float offsetX, float offsetY, AdvGraphicObjectPivotType pivotType)
        {
            if (TargetObject == null)
            {
                return;
            }

            if (pivotType == AdvGraphicObjectPivotType.Direct)
            {
                //直接指定する場合
                rectTransform.SetPivotKeepRect(new Vector2(pivotX, pivotY));
                return;
            }

            //その他の場合は、いったん目標のポイントのワールド座標を取得して、それをpivot座標に変換する
            Vector3 worldPoint = GetPivotTargetWorldPoint(pivotX, pivotY, offsetX, offsetY, pivotType);
            Vector2 pivot      = rectTransform.WorldPointToPivot(worldPoint);

            rectTransform.SetPivotKeepRect(pivot);
        }