Unity-Editor, 在Hierarchy添加面板右键功能

在这里插入图片描述
如图, 给Hierarchy添加右键面板;
实现的功能是: 给当前点击的物体找到对应的点, 并把这个点的位置和旋转, 设置为所点击物体的位置和旋转
(有点坑的是, 完事之后要做点别的使Unity出现*号,再保存一下, 才能保存这个点位置, 不然就白设置了)

using UnityEngine;
using UnityEditor;
using System.Collections;
using System;

public class PosEditor
{
    /// <summary>
    /// 当前点击的物体
    /// </summary>
    static GameObject selectedObj;

    /// <summary>
    /// 位置点的parent
    /// </summary>
    static Transform poss;

    [MenuItem("Window/Test/设置位置0")]
    static void SetPos0()
    {
        SetPos(0);
    }

    [MenuItem("Window/Test/设置位置1")]
    static void SetPos1()
    {
        SetPos(1);
    }
    [MenuItem("Window/Test/设置位置2")]
    static void SetPos2()
    {
        SetPos(2);
    }

    /// <summary>
    /// 给当前点击的物体设置位置
    /// </summary>
    /// <param name="posCount">第几个位置</param>
    static void SetPos(int posCount)
    {
        poss = GameObject.Find("Poss").transform;
        bool isExcept = true;
        try
        {
            Transform pos = poss.Find(selectedObj.name + "Pos" + posCount.ToString());
            pos.position = selectedObj.transform.position;
            pos.rotation = selectedObj.transform.rotation;
            isExcept = false;
        }
        //如果没有catch, try依然会报错
        catch(Exception e)
        {
            
        }
        finally
        {
            if (isExcept)
            {
                Debug.LogError("给" + selectedObj.name + "设置位点没有用, 只能给PersonA, PersonB等人物设置");
            }
            else
            {
                Debug.Log("成功设置" + selectedObj.name + posCount.ToString() + "号位置");
            }
        }
    }

	//以下是抄的
    [InitializeOnLoadMethod]
    static void StartInitializeOnLoadMethod()
    {
        EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
    }

    static void OnHierarchyGUI(int instanceID, Rect selectionRect)
    {
        if (Event.current != null && selectionRect.Contains(Event.current.mousePosition)
            && Event.current.button == 1 && Event.current.type <= EventType.MouseUp)
        {
            selectedObj = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
            //这里可以判断selectedGameObject的条件
            if (selectedObj)
            {
                Vector2 mousePosition = Event.current.mousePosition;

                EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Window/Test", null);
                Event.current.Use();
            }
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值