Скрипт позволяет задействовать буфер обмена в редакторе Unity.
using UnityEngine;
using System;
using System.Reflection;
public static class Clipboard
{
private static PropertyInfo _systemCopyBufferProperty = null;
private static PropertyInfo GetSystemCopyBufferProperty()
{
if (_systemCopyBufferProperty == null)
{
_systemCopyBufferProperty = typeof(GUIUtility).GetProperty("systemCopyBuffer", BindingFlags.Static | BindingFlags.NonPublic);
if (_systemCopyBufferProperty == null)
throw new Exception("Нет доступа к 'GUIUtility.systemCopyBuffer'. Возможно он удален или переименован");
}
return _systemCopyBufferProperty;
}
public static string GetAsString()
{
return (string) GetAsObject();
}
public static object GetAsObject()
{
return GetSystemCopyBufferProperty().GetValue(null, null);
}
public static void Set(object value)
{
GetSystemCopyBufferProperty().SetValue(null, value, null);
}
}
Добавить в папку Editor внутри проекта.
Пример использования:
var currentBuffer = Clipboard.GetAsString(); //Чтение как строки
var currentBuffer2 = Clipboard.GetAsObject(); //Чтение как объекта
Clipboard.Set("Новое содержимое буфера")
Ред. Devion
У Unity есть такое свойство, реализующее буфер обмена, оно называется GUIUtility.systemCopyBuffer. Однако это поле имеет internal доступ и в рамках разработки считается недоступным.
Данный класс просто реализует доступ к этому полю через рефлексию.