UnityEditor 拖拽Prefab并在场景中显示 - 实用技巧
在UnityEditor中,实现拖拽Prefab时在Scene窗口下显示Prefab样子需要通过编写自定义Editor脚本来实现。
以下是一个简单的示例代码,可以实现在Scene窗口下拖拽一个Prefab并在场景中显示出来:
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Transform))]
[CanEditMultipleObjects]
public class DragPrefabEditor : Editor
{
private GameObject m_DraggedPrefab;
public override void OnInspectorGUI()
{
DrawDefaultInspector();
}
private void OnSceneGUI()
{
Event e = Event.current;
// 如果当前事件是鼠标拖拽Prefab,则在场景中显示Prefab
if (e.type == EventType.DragUpdated || e.type == EventType.DragPerform)
{
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (e.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
foreach (object obj in DragAndDrop.objectReferences)
{
m_DraggedPrefab = obj as GameObject;
if (m_DraggedPrefab != null)
{
// 在场景中创建Prefab实例
GameObject go = PrefabUtility.InstantiatePrefab(m_DraggedPrefab) as GameObject;
go.transform.position = Event.current.mousePosition;
// 使Scene窗口重绘,以显示新创建的Prefab实例
SceneView.RepaintAll();
}
}
}
}
}
}
在上面的代码中,我们通过继承自Editor类来创建一个自定义的Editor脚本。在OnSceneGUI()方法中,我们检测当前事件是否是鼠标拖拽Prefab的事件,如果是,则在场景中创建Prefab实例,并使Scene窗口重绘。这样,当我们在Scene窗口中拖拽一个Prefab时,就可以在场景中看到Prefab的样子了。
注意:上面的代码只是一个简单的示例,如果您需要更复杂的拖拽逻辑,请根据自己的需求进行修改。
原文地址: https://www.cveoy.top/t/topic/lNxP 著作权归作者所有。请勿转载和采集!