2,535
社区成员
发帖
与我相关
我的任务
分享
public class SceneEditor {
[InitializeOnLoadMethod]
static void Init()
{
SceneView.onSceneGUIDelegate += OnSceneGUI;
}
static void OnSceneGUI(SceneView sceneView)
{
Event e = Event.current;
if (e.type == EventType.DragUpdated || e.type == EventType.DragPerform)
{
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (e.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
//DragAndDrop.objectReferences[0])这个是拉进来的内容
//拿到鼠标下的最上层的节点,生成新节点后挂在它身上
//怎么拿????????
}
Event.current.Use ();
}
}
}
Camera cam = sceneView.camera;
Vector3 mouse_abs_pos = e.mousePosition;
mouse_abs_pos.y = cam.pixelHeight - mouse_abs_pos.y;
mouse_abs_pos = sceneView.camera.ScreenToWorldPoint(mouse_abs_pos);
然后遍历场景所有节点,用节点的RectTransform的position加sizeDelta可确定其绝对的矩形区域,如果鼠标坐标在此区域内就是了。
Event.current.Use ();这句就可以取消掉系统的处理,这样拉prefab进去系统也不会帮我们创建,这时我们自己创建并判断鼠标坐标下有哪些节点,然后把新创建的挂在那个节点下就可以了。