예제 #1
0
파일: Snap.cs 프로젝트: spikar1/OrtoGirl
    public static Vector3 FindSnapPosition(Vector3 position, Vector3 scale)
    {
        var newSnapPosition = Vector3Extensions.Round(10 * position) / (10);
        var newSnapScale    = scale.Round();

        if (newSnapScale.x % 1 != 0)
        {
            newSnapScale.x -= newSnapScale.x % 1;
        }
        if (newSnapScale.y % 1 != 0)
        {
            newSnapScale.y -= newSnapScale.y % 1;
        }
        if (newSnapScale.z % 1 != 0)
        {
            newSnapScale.z -= newSnapScale.z % 1;
        }



        position.x = Snap.FindSnapPosition(newSnapPosition.x, newSnapScale.x, position.x);
        position.y = Snap.FindSnapPosition(newSnapPosition.y, newSnapScale.y, position.y);
        position.z = Snap.FindSnapPosition(newSnapPosition.z, newSnapScale.z, position.z);

        return(position);
    }
예제 #2
0
        public static void SnapToGrid()
        {
            var selectedTransforms = Selection.transforms;

            //iterate through all selected objects and reset their position
            foreach (var selectedTransform in selectedTransforms)
            {
                Undo.RecordObject(selectedTransform, "ResetPosition of " + selectedTransform.name);

                var newScale = selectedTransform.localScale;
                newScale   = newScale.Round();
                newScale.x = Mathf.Abs(newScale.x) < 1 ? Mathf.Sign(newScale.x) : newScale.x;
                newScale.y = Mathf.Abs(newScale.y) < 1 ? Mathf.Sign(newScale.y) : newScale.y;
                newScale.z = Mathf.Abs(newScale.z) < 1 ? Mathf.Sign(newScale.z) : newScale.z;
                selectedTransform.localScale = newScale;

                selectedTransform.localPosition = Snap.FindSnapPosition(selectedTransform.localPosition, selectedTransform.localScale);

                EditorUtility.SetDirty(selectedTransform);
            }
        }