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

Unity Web Player とブラウザーの通信

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 オブジェクトへの参照を取得することができます。ここは例としてゲームオブジェクト名 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 テンプレートの使用