Unity 편집기를 Drag & Drop 영역으로 확장하는 것이 좀 편리합니다. (비망록)
완성도
시스템을 완성하는 것은 이러한 느낌으로 테스트 목표의 확장자를 변경할 수 있다.
↓ 실제 행동샘플
각본
using System.IO;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
using UnityEditor;
namespace Sample
{
public class DragAndDropEditor : EditorWindow
{
[MenuItem("Custom/DragAndDropEditor")]
static void ShowWindow()
{
var window = GetWindow<DragAndDropEditor>();
window.titleContent = new GUIContent("DragAndDropEditor");
}
// テスト用.
StringBuilder stringBuilder = new StringBuilder(512);
string targetExtension = ".unity";
// UI描画.
void OnGUI()
{
// テスト用,ターゲットの拡張子を変更する.
targetExtension = EditorGUILayout.TextField("targetExtension", targetExtension);
// 目的とするファイルの拡張子を指定してDrag & Dropの領域を描画する.
// 複数ファイルドロップに対応し、指定した拡張子以外のファイルがマスクされた配列がコールバックで呼ばれる.
DrawFileDragArea(
GUILayoutUtility.GetRect(0.0f, 75.0f, GUILayout.ExpandWidth(true)),
"Drag & Drop",
targetExtension,
(objs) =>
{
stringBuilder.Clear();
foreach (var obj in objs)
{
stringBuilder.AppendLine(obj.name);
}
});
if (GUILayout.Button("Clear"))
{
stringBuilder.Clear();
}
// 取得したアイテムのリストを描画.
EditorGUILayout.LabelField(stringBuilder.ToString(), GUILayout.Height(300));
}
/// <summary>
/// ドラッグアンドドロップ領域を描画,コールバックで取得したオブジェクトを得る.
/// </summary>
/// <param name="dropArea"> Drag & Dropを受け付ける範囲. </param>
/// <param name="dropAreaMessage"> Drag & Dropを受け付ける領域に描画する文字列. </param>
/// <param name="targetFileExtension"> 目的のファイルの拡張子. </param>
/// <param name="dropCallback"> Dropされた時のコールバック. </param>
/// <param name="visualMode"> マウスカーソルの見ため,基本的にGenericでよいと思われる. </param>
private void DrawFileDragArea(
Rect dropArea,
string dropAreaMessage,
string targetFileExtension,
UnityAction<UnityEngine.Object[]> dropCallback,
DragAndDropVisualMode visualMode = DragAndDropVisualMode.Generic)
{
Event evt = Event.current;
GUI.Box(dropArea, dropAreaMessage);
switch (evt.type)
{
// ドラッグ中.
case EventType.DragUpdated:
case EventType.DragPerform:
if (!dropArea.Contains(evt.mousePosition)) break;
// Dragされている間のカーソルの見た目を変更.
DragAndDrop.visualMode = visualMode;
if (evt.type == EventType.DragPerform)
{
// オブジェクトを受け入れる.
DragAndDrop.AcceptDrag();
if (0 < DragAndDrop.objectReferences.Length)
{
var dropObjects = new List<UnityEngine.Object>();
for (var i = 0; i < DragAndDrop.paths.Length; ++i)
{
if (Path.GetExtension(DragAndDrop.paths[i]) == targetFileExtension)
dropObjects.Add(DragAndDrop.objectReferences[i]);
}
if (0 < dropObjects.Count)
dropCallback?.Invoke(dropObjects.ToArray());
}
DragAndDrop.activeControlID = 0;
}
Event.current.Use();
break;
}
}
}
}
Reference
이 문제에 관하여(Unity 편집기를 Drag & Drop 영역으로 확장하는 것이 좀 편리합니다. (비망록)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ryusuke_7c9_b_2/articles/1e60afc63b53a19faa56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)