Web Playerなど、Unity開発でコピー&ペーストに対応していない場合、標準では対応していないために困る。ただし代わりにスクリプトで対応する方法があるとの情報があったため、紹介することにした。
Unity公式フォーラムからの回答を翻訳してみた:
http://answers.unity3d.com/questions/266244/how-can-i-add-copypaste-clipboard-support-to-my-ga.html
Jun 25 at 04:37 PM
コピー&ペースト機能としてCtrl+C, Ctrl+V(Macコマンド)をアプリケーションに機能をもたせたい。理想的にはポップアップメニューで右クリックできるかもしれないがその解決方法は時間がかかりそうなので何かクリッポボード上のコンテンツをゲームに入れ込む手段さえあればよいと考えている。
たとえば.NETの場合はSystem.Windows.Clipboardを使うのだけれど、System.Windows名前空間はUnity(たぶんMonoも同様)で使用不可だから困っている。何か良い方法ないだろうか?
リフレクション使用すれば、GUIUtilityのプライベートメンバーを参照することで実現できるね。自分も調べたソース元が分からないけど、以下のスクリプトを使用すれば実現できるよ。
// C#
// ClipboardHelper.cs
using UnityEngine;
using System;
using System.Reflection;
public class ClipboardHelper
{
private static PropertyInfo m_systemCopyBufferProperty = null;
private static PropertyInfo GetSystemCopyBufferProperty()
{
if (m_systemCopyBufferProperty == null)
{
Type T = typeof(GUIUtility);
m_systemCopyBufferProperty = T.GetProperty("systemCopyBuffer", BindingFlags.Static | BindingFlags.NonPublic);
if (m_systemCopyBufferProperty == null)
throw new Exception("Can't access internal member 'GUIUtility.systemCopyBuffer' it may have been removed / renamed");
}
return m_systemCopyBufferProperty;
}
public static string clipBoard
{
get
{
PropertyInfo P = GetSystemCopyBufferProperty();
return (string)P.GetValue(null,null);
}
set
{
PropertyInfo P = GetSystemCopyBufferProperty();
P.SetValue(null,value,null);
}
}
}
----------
ちなみに、NGUIでも作者に「これ使って実装してもらえない?」と聞いた方がいるようだったが残念ながらドキュメントないので実装できないとの返事だった様子。
使用するなら自己責任の範囲で、とのことか。
Unityで色々な機能をテストしてカスタマイズしよう!
0 件のコメント:
コメントを投稿