在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的样子了。

注意:上面的代码只是一个简单的示例,如果您需要更复杂的拖拽逻辑,请根据自己的需求进行修改。

UnityEditor 拖拽Prefab并在场景中显示 - 实用技巧

原文地址: https://www.cveoy.top/t/topic/lNxP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录