如图, 给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();
}
}
}
}