Unity Web Playerの動作カスタマイズ
Web Player テンプレートの使用

Unity Web Playerとブラウザの通信

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Unity Web Player のコンテンツを含むHTMLページは,Unity Web Playerからブラウザへ通信することが可能です。またその逆も可能となっています。基本的に2つの通信方法があります。

  • WebページがUnityのWeb Player内の関数を呼び出す方法
  • Unity Web PlayerがWebページの関数を呼び出す方法

これらの通信についての詳細を以下に説明します。

WebページからUnity Web Player内の関数を呼び出す

Unity Web Playerは SendMessage() という関数を持っています。 これはWebページからWeb Player内の関数を自由に呼び出すことが可能になります。この関数はUnityスクリプトAPIにある GameObject.SendMessage 関数の使い方と非常に似ています。 Webページから呼び出す場合は,ゲームオブジェクト名,関数名,1つの自由な引数を SendMessage() の引数として渡すと指定されたゲームオブジェクトの関数を呼び出すことができます。

まず,Unity Web Playerの SendMessage() 関数を呼び出すにはUnity Web Playerオブジェクトへの参照を取得する必要があります。 デフォルトで生成されるHTMLファイル内にJavascriptの GetUnity() 関数が生成されており,この関数を使用することによってUnity Web Playerオブジェクトへの参照を取得することができます。\tここは例としてゲームオブジェクト名 MyObject にある関数 MyFunction() に引数として文字列を渡す SendMessage() を実行します。

<script type="text/javascript" language="javascript">
<!--
//initializing the WebPlayer
var u = new UnityObject2();
u.initPlugin(jQuery("#unityPlayer")[0], "Example.unity3d");

function SaySomethingToUnity()
{
    u.getUnity().SendMessage("MyObject", "MyFunction", "Hello from a web page!");
}
-->
</script>


Unity Web Player内に ゲームオブジェクト(GameObject) 名が MyObject で, MyFunction という関数名を持ったスクリプトを実装する必要があります。

function MyFunction(param : String)
{
    Debug.Log(param);
}


Note: 関数が引数を持たない場合,空の文字列("")を渡す必要があることに注意して下さい

SendMessage() を使用する場合,パラメータの型は単一のstring,integer,floatにする必要があります。 このパラメータは呼び出し元で必ず必要になります。 もしパラメータが必要ない場合はUnity側で無視するようにして下さい。加えて,ゲームオブジェクト名はパス名の形式で指定することができます。 例えば /MyObject/SomeChildMyObject の子となる SomeChild になります。また,最初に ‘/’ があることによって MyObject はルートにあるという意味を持ちます。

Note: ゲームがまだ完全に読み込まれていない場合,u.getUnity()はnullを返すかもしれません。なので,SendMessage()を使用する前にnullでないか確認することをお勧めします。または,ゲームを完全に読み込んだ後にu.getUnity()を実行するようにして下さい。

Unity Web PlayerからWebページの関数を呼び出す

Unity Web Player内からWebページの関数を呼び出すには Application.ExternalCall() 関数を使用する必要があります。この関数に任意の数のパラメータを渡して,Webページに定義された任意のJavascript関数を呼び出すことができます。ここは例として Application.ExternalCall() 関数を使用して,Webページの SayHello() 関数に文字列のパラメータを渡します。

Application.ExternalCall( "SayHello", "The game says hello!" );


Webページには SayHello() 関数を定義する必要があります。

<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
    // show the message
    alert( arg );
}
-->
</script>


Unity Web Playerから任意のブラウザのコードを実行する

もしWebページに関数を定義できない場合, Application.ExternalEval() 関数を使用してjavascriptを実行することができます。

例として,Web Playerが埋め込まれているWebページのホストが(unity3d.com)でない場合にリダイレクトするコードを実装します。このテクニックは,Web Playerにディープリンクを防ぐために使用することができます。

Application.ExternalEval(
    "if(document.domain != 'unity3d.com') { document.location='http://unity3d.com'; }"
);


Unity Web Playerの動作カスタマイズ
Web Player テンプレートの使用