Customizing the Unity Web Player's Behavior
Using Webplayer Templates

Unity Web Player y comunicación con el navegador

La página HTML que contiene el contenido del Unity Web Player puede comunicarse con el contenido y vice-versa. Básicamente hay dos direcciones de comunicación:

  • La página web llama funciones dentro del contenido del Unity Web Player.
  • El contenido del Unity Web Player llama funciones en la página web.

Cada una de estas direcciones de comunicación se describe en más detalle abajo.

Llamando el funciones del contenido del Unity Web Player desde una página web

El objeto Unity Web Player tiene una función, SendMessage(), que puede ser llamada desde una página web con el fin de llamar funciones dentro del contenido del Unity Web Player. Esta función es muy similar a la función GameObject.SendMessage en el Unity Scripting API. Cuando se llama desde una página web, usted pasa un nombre de objeto, un nombre de una función y un solo argumento, y SendMessage() va a llamar la función dada en el game object dado.

Para poder llamar la función SendMessage() del Unity Web Player usted debe primero obtener una referencia al objeto Unity Web Player. Usted puede utilizar la función GetUnity() en el html por defecto generado por Unity para obtener una referencia al objeto. Aquí hay una función JavaScript ejemplo que ejecutaría la función SendMessage() en el Unity Web Player; de vuelta SendMessage() luego va a llamar la función MyFunction() en el game object llamado MyObject, pasando una pieza de un dato string como un argumento:

<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>


Dentro del contenido del Unity Web Player usted necesita tener un script adjunto al GameObject llamado MyObject, y ese script necesita implementar una función llamada MyFunction:

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


Tenga en cuenta: recordar que si la función no tiene argumentos, entonces un string vacío ("") debería ser pasado como argumento.

Un solo argumento string, integer o float debe ser pasado cuando utilice SendMessage(), el parámetro se requiere en el lado que llama. Si usted no lo necesita entonces pase un cero u otro valor por defecto e ignorelo por el lado de Unity. Adicionalmente, el game object especificado con el nombre se puede dar en la forma de una ruta de nombre. Por ejemplo /MyObject/SomeChild where SomeChild debe ser hijo de MyObject y MyObject debe estar en el nivel raíz debido al carácter ‘/’ en frente de su nombre.

Tenga en cuenta: u.getUnity() puede devolver nulo si el juego no se ha cargado completamente todavía, por lo que es buena idea revisar si su valor no es nulo antes de utilizar SendMessage(). O espere a que su juego esté completamente cargado antes de intentar comunicarse con este.

Llamando funciones de la página web desde el contenido del Unity Web Player

Con el fin de llamar una función de la página web dentro del contenido de Unity Web Player usted debe utilizar la función Application.ExternalCall(). Al utilizar esta función, usted puede llamar cualquier función JavaScript definida en la página web, pasando cualquier número de parámetros a esta. Aquí hay un ejemplo de Unity Script que utiliza la función Application.ExternalCall() para llamar una función llamada SayHello() encontrada dentro de la página web, pasando una pieza de dato string como un argumento:

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


La página web habría que definir la función SayHello(), por ejemplo:

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


Ejecutando código del navegado arbitrario desde el contenido del Unity Web Player

Usted no necesita tener funciones definidas en la página web embebida, más bien usted puede utilizar la función Application.ExternalEval() para ejecutar código del navegador arbitrario desde el contenido del web player.

El siguiente ejemplo revisa que la página embebida al contenido del web player sea recuperada de cierto host (unity3d.com), si este no es el caso, se va a re-dirigir a otro URL. Esta técnica puede ser utilizada para prevenir enlaces profundos al contenido de su web player:

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


Customizing the Unity Web Player's Behavior
Using Webplayer Templates