LoginSignup
0
1

More than 1 year has passed since last update.

【Unity】WebGLでコピペしたい

Last updated at Posted at 2021-07-10

はじめに

入力フィールドを使用しないでコピペしたかった。

調べてみた結果

(WebGLの場合) GUIUtility.systemCopyBuffer .jslib
コピー × (ローカル○)
貼り付け × (ローカル○)

※Ctrl+C/Vは使わない(コピペボタンを設置したい)。

GUIUtility.systemCopyBuffer

PC・Mac環境(非WebGL環境)やローカル環境のWebGLなら使えます(スマホ環境は未確認)。

参考:
https://kan-kikuchi.hatenablog.com/entry/Clipboard

JavaScriptでコピペする

結論から書くとこの方法はローカル環境では動作しますが、unityroomなどのサイトにアップロードすると貼り付け処理だけブロックされることがあります(コピー処理は動作します)。

手順

  1. Pluginsフォルダ下に作成した(任意ファイル名).jslibに以下のコードを張り付けてください。

コピーペースト処理は次の記事を参考にしました。butakoma様に感謝します。

//.jslibファイルに張り付けてください。
mergeInto(LibraryManager.library, { 
  CopyWebGL: function(str) {
    var str = Pointer_stringify(str);
    var listener = function(e){
    e.clipboardData.setData("text/plain" , str);    
    e.preventDefault();
    document.removeEventListener("copy", listener);
    }
    document.addEventListener("copy" , listener);
    document.execCommand("copy");
  },
  AsyncPasteWebGL: function() {
      if(navigator.clipboard){
    navigator.clipboard.readText()
    .then(function(text){
        SendMessage('GameSceneManager', 'PasteWebGL', text); //クリップボードから取得したテキストを渡します。引数はゲームオブジェクト名、メソッド名、渡す値
    });
    }
  }
});

2.次のコードをどこでもいいので追加してください。(C#)

    //コピー
    [DllImport("__Internal")]
    private static extern void CopyWebGL(string str);
    //ペースト
    [DllImport("__Internal")]
    private static extern void AsyncPasteWebGL();

CopyWebGLを呼ぶことでクリップボードへコピーすることができます。
AsyncPasteWebGLは、ローカル環境では動作しますが、前述したように環境によってはブロックされることがあります。(それでももし使う場合はAsyncPasteWebGL関数内のSendMessage(ゲームオブジェクト名, 呼び出すメソッド名, 渡すテキスト);を指定してください)

Ctrl+C/Vでコピペする場合 : WebGLInput

WebGLInput」パッケージを導入するとInputFieldとキーボードを使ってコピペができるようになります。
導入方法は、easy_light2213様の記事が参考になるかもしれません。

おわりに

CopyWebGLメソッドとWebGLInputパッケージを併用することでだいたいのやりたいことはできると思います。貼り付け処理が厳しいのはユーザーの情報を勝手に抜き取れないようにするためだと考えられます。
もし間違いがあればコメントにてご指摘ください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1