Unity Web Player のコンテンツを含むHTMLページは,Unity Web Playerからブラウザへ通信することが可能です。またその逆も可能となっています。基本的に2つの通信方法があります。
これらの通信についての詳細を以下に説明します。
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 の子となる SomeChild になります。また,最初に ‘/’ があることによって MyObject はルートにあるという意味を持ちます。
Note: ゲームがまだ完全に読み込まれていない場合,u.getUnity()はnullを返すかもしれません。なので,SendMessage()を使用する前にnullでないか確認することをお勧めします。または,ゲームを完全に読み込んだ後にu.getUnity()を実行するようにして下さい。
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>
もしWebページに関数を定義できない場合, Application.ExternalEval() 関数を使用してjavascriptを実行することができます。
例として,Web Playerが埋め込まれているWebページのホストが(unity3d.com)でない場合にリダイレクトするコードを実装します。このテクニックは,Web Playerにディープリンクを防ぐために使用することができます。
Application.ExternalEval(
"if(document.domain != 'unity3d.com') { document.location='http://unity3d.com'; }"
);