ContextMenu 上下文菜单(二)

Babybus-u3d技术交流-ContextMenu 上下文菜单(二)

ContextMenu 上下文菜单(二)
[http://wiki.unity3d.com/index.php/TransformContextMenu

[http://docs.unity3d.com/ScriptReference/MenuCommand-context.html


using UnityEngine;

using UnityEditor;

using System.Collections;

 
/// 

/// Extends the Transform context menu to provide support for copying, pasting

/// and pushing position/rotation/scale data around.

///

/// Code by Zach Aikman - [email protected]

/// 

public class TransformContextMenu
{

    private class TransformClipboard

    {

        public Vector3 position;

        public Quaternion rotation;

        public Vector3 scale;

 
        public bool isPositionSet = false;

        public bool isRotationSet = false;

        public bool isScaleSet = false;

  }

 
    
private static TransformClipboard clipboard = new TransformClipboard();

 
    #region Copy Methods

    [MenuItem("CONTEXT/Transform/Copy Transform", false, 150)]

    static void CopyTransform()
    {

        CopyPosition();

        CopyRotation();

        CopyScale();

    }

 
    [MenuItem("CONTEXT/Transform/Copy Position", false, 151)]

    static void CopyPosition()

    {

        clipboard.position = Selection.activeTransform.localPosition;

        clipboard.isPositionSet = true;

    }

 
    [MenuItem("CONTEXT/Transform/Copy Rotation", false, 152)]

    static void CopyRotation()

    {

        clipboard.rotation = Selection.activeTransform.localRotation;

        clipboard.isRotationSet = true;

    }

 
    [MenuItem("CONTEXT/Transform/Copy Scale", false, 153)]

    static void CopyScale()

    {

        clipboard.scale = Selection.activeTransform.localScale;

        clipboard.isScaleSet = true;

    }

    #endregion

 
    #region Paste Methods

    [MenuItem("CONTEXT/Transform/Paste Transform", false, 200)]

    static void PasteTransform()

    {

        PastePosition();

        PasteRotation();

        PasteScale();

    }

 
    [MenuItem("CONTEXT/Transform/Paste Position", false, 201)]

    static void PastePosition()

    {

        Undo.RegisterUndo(Selection.activeTransform, "Paste Position");

        Selection.activeTransform.localPosition = clipboard.position;

    }

 
    [MenuItem("CONTEXT/Transform/Paste Rotation", false, 202)]

    static void PasteRotation()

    {

        Undo.RegisterUndo(Selection.activeTransform, "Paste Rotation");

        Selection.activeTransform.localRotation = clipboard.rotation;

    }

 
    [MenuItem("CONTEXT/Transform/Paste Scale", false, 203)]

    static void PasteScale()

    {

        Undo.RegisterUndo(Selection.activeTransform, "Paste Scale");

        Selection.activeTransform.localScale = clipboard.scale;

    }

    #endregion

 
    #region Validation

    [MenuItem("CONTEXT/Transform/Paste Transform", true)]

    
static bool ValidatePasteTransform()

    {

        return ValidatePastePosition() && ValidatePasteRotation() && ValidatePasteScale();

    }

 
    [MenuItem("CONTEXT/Transform/Paste Position", true)]

    
static bool ValidatePastePosition()

    {

        return clipboard.isPositionSet;

    }

 
    [MenuItem("CONTEXT/Transform/Paste Rotation", true)]

    static bool ValidatePasteRotation()

    {

        return clipboard.isRotationSet;

    }

 
    [MenuItem("CONTEXT/Transform/Paste Scale", true)]

    static bool ValidatePasteScale()

    {

        return clipboard.isScaleSet;

    }

 
    [MenuItem("CONTEXT/Transform/Push To Children", true)]

    static bool ValidatePushToChildren()

    {

        return Selection.activeTransform.childCount > 0;

    }

 
    [MenuItem("CONTEXT/Transform/Push To Parent", true)]

    static bool ValidatePushToParent()

    {

        return Selection.activeTransform.parent != null;

    }
    #endregion
}

你可能感兴趣的:(ContextMenu 上下文菜单(二))