Version: 5.3 (switch to 5.4b)
Настройка поведения веб проигрывателя Unity
Использование шаблонов веб-проигрывателя (web player)

Unity Web Player и взаимодействие с браузером

HTML-страница, которая содержит контент Unity Web Player может взаимодействовать с ним и наоборот. Есть два направления взаимодействия:

  • Веб-страница вызывает функции внутри контента web-плеера Unity.
  • Содержимое Unity веб-плеера вызывает функции на веб-странице.

Каждое из этих направлений взаимодействия будет описано более подробно ниже.

Вызов функций контента веб-плеера Unity с веб-страницы

Объект Unity Web Player имеет функцию, SendMessage(), что можно назвать с веб-страницы, чтобы вызвать функции в контенте веб-плеера Unity. Это функция очень похожа на функцию GameObject.SendMessage в Unity. При вызове с веб-страницы вы передаете имя объекта, имя функции и ещё один аргумент, а SendMessage() будет вызывать данную функцию на указанном игровом объекте.

Чтобы вызывать функции в Unity Web Player с помощью SendMessage(), необходимо сначала получить ссылку на объект веб-плеера Unity. Вы можете использовать функцию GetUnity(), которая по умолчанию генерируется Unity в HTML для получения ссылки на объект. Вот пример функции JavaScript, которая будет выполнять функцию SendMessage(); в свою очередь SendMessage() будет вызывать в игре на объекте с именем MyObject функцию MyFunction(), передавая строку данных в качестве аргумента:

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


В игре у Вас на игровом объекте (GameObject) с именем MyObject должен быть скрипт, который должен содержать функцию с именем MyFunction:

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


Примечание: имейте в виду, что если функция не имеет аргументов, то в качестве аргумента необходимо передать пустую строку ("").

Строка, float или целое число должно быть передано при использовании SendMessage(), этот параметр является обязательным. Если вам это не нужно просто предайте нулевое значение или другие значения по умолчанию и игнорируйте его в Unity. Кроме того, указанное имя игрового объекта может быть предоставлено в виде пути. Например, /MyObject/SomeChild где SomeChild должен быть дочерним элементом MyObject, а MyObject должен быть на корневом уровне, т.к. перед его именем стоит ‘/’.

Примечание: u.getUnity() может возвращать значение null, если игра ещё не полностью загружена, так что можно проверить, если это значение не равно null перед использованием SendMessage(). Или ждать полной загрузки вашей игры, прежде чем пытаться взаимодействовать с ней.

Вызов функций веб-страницы из веб-плеера Unity

Для того, чтобы вызвать функцию веб-страницы из содержимого веб-плеера Unity, следует использовать функцию Application.ExternalCall(). С помощью этой функции можно вызывать любую функцию JavaScript, определенную на веб-странице, передавая ей любое количество параметров. Вот пример Unity скрипта, который использует функцию Application.ExternalCall() для вызова функции с именем SayHello() на веб-странице, передавая часть строковых данных в качестве аргумента:

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


На веб-странице необходимо определить функцию SayHello(), например:

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


Выполнение произвольного кода браузера из содержимого веб-плеера Unity

Вам даже не придется определять функции на веб-странице, вместо этого вы можете использовать функцию Application.ExternalEval(), которая выполнит произвольный код браузера из веб-плеера.

В следующем примере проверяется, чтобы страница, на которую встроено содержимое веб-плеера, находилась в определённом домене (unity3d.com), если это не так, то он будет перенаправлять на другой адрес. Эта техника может быть использована для предотвращения диплинкинга (вложенных ссылок) на ваш контент:

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


Настройка поведения веб проигрывателя Unity
Использование шаблонов веб-проигрывателя (web player)