UnityEditor: 拖拽Prefab在Scene窗口下显示预览
在UnityEditor中,实现拖拽Prefab时在Scene窗口下显示Prefab样子需要以下步骤:
-
创建一个Editor脚本,用于处理拖拽事件。
-
在OnSceneGUI函数中处理拖拽事件,并在Scene窗口下显示Prefab的样子。
以下是一个简单的示例代码:
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(MyPrefab))]
public class MyPrefabEditor : Editor
{
private MyPrefab m_Prefab;
private GameObject m_PrefabInstance;
void OnEnable()
{
m_Prefab = target as MyPrefab;
}
void OnDisable()
{
if (m_PrefabInstance)
{
DestroyImmediate(m_PrefabInstance);
}
}
void OnSceneGUI()
{
Event e = Event.current;
int controlId = GUIUtility.GetControlID(FocusType.Passive);
switch (e.type)
{
case EventType.DragUpdated:
case EventType.DragPerform:
if (m_PrefabInstance)
{
DestroyImmediate(m_PrefabInstance);
}
DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
if (e.type == EventType.DragPerform)
{
DragAndDrop.AcceptDrag();
Ray ray = HandleUtility.GUIPointToWorldRay(e.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
m_PrefabInstance = (GameObject)PrefabUtility.InstantiatePrefab(m_Prefab.prefab);
m_PrefabInstance.transform.position = hit.point;
}
}
e.Use();
break;
}
}
}
上述代码中,MyPrefab是一个包含一个Prefab引用的MonoBehaviour组件。在OnSceneGUI函数中,处理拖拽事件,如果拖拽的是一个Prefab,则在Scene窗口下实例化该Prefab,并将其放置在鼠标点击的位置。在OnDisable函数中,销毁实例化的Prefab。
在UnityEditor中选择MyPrefab组件,并将其拖拽到Scene窗口,即可看到拖拽Prefab时在Scene窗口下显示Prefab样子的效果。
原文地址: https://www.cveoy.top/t/topic/lNx4 著作权归作者所有。请勿转载和采集!