p_chinのおっぱいブログ

UnityとPerlなど

WebPlayerでtwitterの投稿ページを開く

twitterの投稿ページを投稿する文字指定して開く

というのを試して盛大にハマッたのでメモ。 結論としては、OpenURL関数使うのが一番いい。

  • jsとcsのURIエンコーディング問題
  • OpenURL関数とExternalEval関数
  • WebPlayerのデモ

 

jsとcsのURIエンコーディング問題

コードのファイルの文字コードに気をつけなければならない。 jsではUTF-8LEBOM csではUTF-16LEBOM でないと、WWW.EscapeURL("日本語文字列")エンコードしても、期待した表示が出来なかった。 jsは勝手に色々と良い感じにしてくれるっぽい感じ。 C#とJS混在してもいいって人はtweetするコードだけJSで書いちゃえば良いと思う。    

OpenURL関数とExternalEval関数を比較

まず前提として、 OpenURL()は引数に指定したURLをpcならデフォルトブラウザで、スマフォならアプリを選択して開く関数。 ExternalEval()は、WebPlayerで再生中のページで引数で指定したJavaScript関数を呼び出す関数。そのためWebPlayerでしか使えない。

OpenURL()を使用した場合

これは、どのPlatformでも使える汎用的なものだが、WebPlayerでゲームが起動しているページからURLをロードしてしまうので、またゲームのページに戻るとUnityPlayerのロード画面からになってしまう。

Application.OpenURL("http://twitter.com/intent/tweet?text="
 + WWW.EscapeURL(text));

ExternalEval()でwindow.location.hrefを実行

この場合は、OpenURLと同じく、WebPlayerのページからURLに飛んでしまう。 あと、何故かdropBoxにupして試してみると、日本語表示がおかしくなる。 デモ見ればそれが分かる

Application.ExternalEval("window.location.href 
 = 'http://twitter.com/intent/tweet?text=" + text + "'");

ExternalEval()でwindow.openを実行

これをwindowサイズ指定で実行すると、ブラウザのポップアップブロックが作動して、手動でそれを許可しなければならない。 これは、例えばゲームをプレイしてる人がスコア情報などをtweetするのを妨害している様な物なので、つらい。 あと、何故かdropBoxにupして試してみると、日本語表示がおかしくなる。

Application.ExternalEval("window.open('http://twitter.com/intent/tweet?text
 = " + text + "','','width=500,height=400');");

 

WebPlayerのデモ

一応、英語と日本語で、上記の3種類の方法を試すデモ作ってみた。 何故かJSのメソッド実行してる方法は、日本語表示が全滅している、くそが。

デモ