Синтаксис:
Используется javascript
<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
// show the message
alert( arg );
}
-->
</script>
<!--
function SayHello( arg )
{
// show the message
alert( arg );
}
-->
</script>
Соответственно эту переменную нам только остается записать на нашем сервере в текстовый файл. Но тут возникает одна проблема в целях безопасности в Java script не существует методов записи в текстовый файл на сервере. Такую задачу можно осуществить только на языке php, там она решается довольно просто. Сразу скажу что для того чтобы быть гуру в языке php достаточно знать 2 вещи: во первых - что php это дерьмо и второе что переменная в php обозначается как $a Итак пример скрипта на php:
Синтаксис:
Используется javascript
//PHP. запись строки в txt файл на сервере
<?php
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
<?php
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
Хорошо, тогда у нас есть методы встроить код php, который запишет в текстовый файл, в нашу веб страницу на html(этот метод мы рассмотрим позднее). Тогда нам остается только передать переменную из Java script в php код (потому что использовать другие методы, кроме передачи переменной, в данном алгоритме невозможно, потому что нет зацепок, нет событий для синхронизации нажатия мышки, например в юнити, и синхронной передачи нужной переменной в txt). Однако опять же, нет методов передать переменную из Java в php без перезагрузки страницы, методы GET и POST требуют перезагрузки страницы, а у нас на странице веб плеер, это не подходит. Это можно сделать без перезагрузки только методом введения Ajax запросов, но выглядит это довольно сложно, для передачи всего одной строки. Задача заходит в тупик.
Поэтому откажемся от пути, который нам первым бросился в глаза и осуществим передачу переменной непосредственно из unity в php скрипт. Только мы будем пользоваться не связью веб плеера с веб страницей, а методом unity - WWWForm= *WWW.Form позволяет отправить как с компьютера юсера так и с вебплеера на сервере, различные данные на удаленный сервер. Следующий скрипт взят с оф форума unity:
Синтаксис:
Используется javascript
//Передача переменной из Unity в PHP методом *WWW.Form
var pass: String = "Password";
var user : String = "Username";
var url = "http://localhost/scripts/get.php";
function Update () {
}
function OnGUI () {
user = GUI.TextField (Rect (Screen.width/2-155, Screen.height/2-50, 310, 30), user, 25);
pass = GUI.PasswordField (Rect (Screen.width/2-155, Screen.height/2, 310, 30), pass, "*" [0], 25);
if (GUI.Button(Rect(Screen.width/2-155, Screen.height/2-155, 310, 30),"Submit")) {
HandleLogin(user, pass);
}
Debug.Log("Logged In");
}
function HandleLogin(username: String, password: String) {
var form = new WWWForm();
form.AddField("Username", username);
form.AddField("Password", password);
var login = new WWW(url, form);
yield login;
// React to login, check for errors, etc.
}
var pass: String = "Password";
var user : String = "Username";
var url = "http://localhost/scripts/get.php";
function Update () {
}
function OnGUI () {
user = GUI.TextField (Rect (Screen.width/2-155, Screen.height/2-50, 310, 30), user, 25);
pass = GUI.PasswordField (Rect (Screen.width/2-155, Screen.height/2, 310, 30), pass, "*" [0], 25);
if (GUI.Button(Rect(Screen.width/2-155, Screen.height/2-155, 310, 30),"Submit")) {
HandleLogin(user, pass);
}
Debug.Log("Logged In");
}
function HandleLogin(username: String, password: String) {
var form = new WWWForm();
form.AddField("Username", username);
form.AddField("Password", password);
var login = new WWW(url, form);
yield login;
// React to login, check for errors, etc.
}
php скрипт под названием get.php будет выглядеть так
Синтаксис:
Используется javascript
<?php
$user = $_POST['Username'];
$pass = $_POST['Password'];
$file = fopen ("file.html","r+");
$str = $user;
fputs ( $file, $str);
fclose ($file);
?>
$user = $_POST['Username'];
$pass = $_POST['Password'];
$file = fopen ("file.html","r+");
$str = $user;
fputs ( $file, $str);
fclose ($file);
?>
И в ту же папку с php скриптом на сервере ложим файл file.html в который будет записана переменная из unity (c txt файлами проблема с чтением их в броусере поэтому создадим пустой file.html) Тут в файл file.html запишется переменная username введенная в веб плеере unity. Посмотреть работу этого скрипта на сервере можно в этой демонстрации демо
HTML код для вашего блога :
И контролировать что записывается в txt файл можно здесь (там будет записываться значение поля username) file.html (Submit только нажми!!!)
Вот пак этого демо на unity pack
С помощью создания в unity *WWWForm c полями "Username" и "Password" эти переменные передаются обычным методом POST в php скрипт и в дальнейшем переменная "Username" записывается в файл file.html Т.о. наша задача решена
В данном случае у нас скрипты прописаны для теста на localhost (var url = "http://localhost/scripts/get.php";) Но скрипты будут работать если их залить на сервер в интернете с поддержкой php и правильно указать путь (файлы get.php и file.html должны находится в одной папке, а путь к ним прописывается в скрипте Unity)
Для того чтобы протестировать работоспособность на своем компьютере необходим запущенный сервер с поддержкой php. Иначе результат не покажет. Либо в инернете на сервере с поддержкой php, либо с запущенным сервером на localhost, потому что тут производится выполнение php скрипта. И если у вас будет уже готовый билд веб плеера и скрипт php то на localhost помещайте их в папку localhost и запускайте веб плеер не просто, а только после запуска веб сервера и используя путь в броузере localhost/WebPlayer.html
И для новичков в php я объясню, как можно этот пример протестировать на localhost. Для этого нужно установить у себя веб сервер с поддержкой php. Можно воспользоваться готовыми серверами автоматически устанавливающимися здесь или здесь (качать download masteroм хостинг плохо держит файлы) . Только во втором случае понадобится ПЕРЕЗАГРУЗКА компьютера после установки сервера!!!! Эти пакеты установят стандартные программы, которые обычно работают на профессиональных веб серверах на ваш компьютер, включая нужную нам php. Например после установки второго варианта программы, вам необходимо на появившихся на рабочем столе ярлыках щелкнуть запуск сервера. И после запуска вы можете увидеть результат. Откройте браузер и введите там слово localhost Обратите внимание что в данном случае снимается не файл index.html который находится непосредственно на диске *C://index.html , а файл по пути *C:\Program Files\TopServer 3.0.3\home\localhost\index.html если вы установили веб сервер в предложенную по умолчанию папку. Значит все php скрипты которые вы будете тестить у себя на компьютере вы должны поместить именно в эту папку - localhost. В нашем примере в ней еще создается подпапка "http://localhost/scripts/get.php" куда ложится наш скрипт и файл file.html
Для первого варианта сервера папки будут соответственно свои. Вы также сможете их увидеть.
Итак установив у себя веб сервер и положив скрипты php в соответствующие папки, мы можем тестить передачу строки из окна юнити username в файл C:\Program Files\TopServer 3.0.3\home\localhost\scripts\file.html Но необходимое условие веб плеер с нашим скриптом тоже нельзя запускать из какого угодно места. Он должен запускаться только после запуска сервера и только из под localhost. Поэтому поместите билд веб плеера где нибудь в папку localhost и запускайте его не прямо, а через адрес в броузере например localhost/WebPlayer.html По иному работать не будет потому что здесь запрашивается выполнение php.
С этим вопросом выяснили. Теперь давайте рассмотрим еще одну ветку. Поскольку мы знаем что Java script не может записать в текстовый файл на удаленном сервере, то давайте попробуем тогда, поскольку Java script исполняется на компьютере пользователя, записать какую то строку в текстовый файл на компьютере игрока. В теории Java script дает нам такую возможность.
Синтаксис:
Используется javascript
//Запись на Java script строки в txt файл (работает только на локальном компьютере)
<HTML>
<HEAD>
<TITLE>Запись в файл</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
//Функция выполняется после загрузки документа.
function window.onload()
{
// Открываем файл в режиме добавления
var myfile = fso.OpenTextFile("C:\\test.txt", 8);
myfile.Write("1"); // Дописываем
myfile.Close(); // Закрываем файл
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<H2>Запись и чтение файла</H2>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE>Запись в файл</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
var fso = new ActiveXObject("Scripting.FileSystemObject");
//Функция выполняется после загрузки документа.
function window.onload()
{
// Открываем файл в режиме добавления
var myfile = fso.OpenTextFile("C:\\test.txt", 8);
myfile.Write("1"); // Дописываем
myfile.Close(); // Закрываем файл
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<H2>Запись и чтение файла</H2>
</BODY>
</HTML>
Такой вид будет иметь скрипт для записи из Java script в тектовый файл (используется ActiveX). Вы можете протестировать его у себя на компьютере, предварительно создав по пути C:\\test.txt файл test.txt Сразу после запуска этой страницы в броузере в файл test.txt запишеться символ 1 (поскольку скрипт написан в функции function window.onload. Но обратите внимание что в Chrome этот скрипт работать не будет!!! (блокируется). Запускайте его только в Internet Explorer. Я его тестировал в 8 IE. (Здесь уже естественно не надо никаких манипуляций с php и серверами. Запускайте его из любого места - это Java)
Я веду к тому, что с помощью функции unity - комуникации с веб страницей через Java script, мы можем теоретически записывать из веб плеера юнити строку в текстовый файл на компьютере игрока, используя тот же Java script и никаких проблем с передачей переменных между языками. Но проблема в том, что он работает на локальном компьютере, а если его установить на веб сервер в интернете он перестает работать. Т.о. еще один тупиковый вариант. Кстати для интереса давайте немного видоизменим скрипт, чтобы файл test.txt сам создавался в нужной дирректории
Синтаксис:
Используется javascript
<script type="text/javascript" language="javascript">
<!--
var filepath = "C:\\pr.dat";
var fso = new ActiveXObject("Scripting.FileSystemObject");
var myfile = fso.OpenTextFile(filepath, 1); // Оъект файла
function Police( arg )
{
// show the message
alert( arg );
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Создание файла в режиме записи
var myfile = fso.CreateTextFile("C:\\test66.txt", true);
myfile.WriteLine(arg);
myfile.Close(); // Закрываем файл
}
-->
</script>
<!--
var filepath = "C:\\pr.dat";
var fso = new ActiveXObject("Scripting.FileSystemObject");
var myfile = fso.OpenTextFile(filepath, 1); // Оъект файла
function Police( arg )
{
// show the message
alert( arg );
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Создание файла в режиме записи
var myfile = fso.CreateTextFile("C:\\test66.txt", true);
myfile.WriteLine(arg);
myfile.Close(); // Закрываем файл
}
-->
</script>
Это готовый отрезок кода который содержит коммуникацию c веб плеером unity, его можно вставить на страницу веб плеера
Полный пример работы такого Java scripta на веб странице (нажать мышкой на шариках) тут. Запускайте это в IE и обратите внимание что файл C:\\test66.txt не создастся. Но если вы запустите этот веб плеер со своего компьютера, то работает. Можете там же взять файл WebPlayer.unity3d Либо скачать архив с паком исходника на юнити и веб плеером архив Смотреть результат в создавшемся текстовом файле C:\\test66.txt Еще раз уточняю, он будет работать ТОЛЬКО IE до 8 версии!!! и только на локальной машине ползователя (не в сети)!!!
Поэтому для коммуникации веб плеера с текстовым файлом оставляем только метод *WWW.Form - отправка в php методом POST. А также если посмотреть этот метод в справке, он может передавать данные и в другие веб серверные скрипты CGI и пр.
А также для допинга в конце давайте рассмотрим такой вопрос, который упоминался в самом начале, как можно на html странице запустить скрипт php. Для этого существует только 1 метод. Нужно в главной дирректории вашего хоста залить файл .htaccess
с текстом:
AddType application/x-httpd-php .html
AddType application/x-httpd-php .htm
скачать его можно тут file.rar
Также если вы установили у себя на машине веб сервер поищите этот файл в главных дирректориях сервера (C:\Program Files\TopServer 3.0.3\home\localhost\.htaccess) Если этот файл установлен то php скрипты будут выполнятся в теле html
То есть берем наш известный скрипт php и вставляем в таком же виде в любое место на html странице и он отработает процедуру
Синтаксис:
Используется javascript
<?php
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
Только необходимео условие при тесте на localhost запустить эту странице в броузере не просто из любого места. А поместить ее в директорию вашего веб сервера localhost например. И запустить ее по адресу localhost\bla bla
При этом веь страница может выглядеть так
Синтаксис:
Используется javascript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Unity Web Player | WebPlayer</title>
<script type="text/javascript" src="http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject.js"></script>
<script type="text/javascript">
<!--
function GetUnity() {
if (typeof unityObject != "undefined") {
return unityObject.getObjectById("unityPlayer");
}
return null;
}
if (typeof unityObject != "undefined") {
unityObject.embedUnity("unityPlayer", "webplayer.unity3d", 600, 450);
}
-->
</script>
<style type="text/css">
<!--
body {
font-family: Helvetica, Verdana, Arial, sans-serif;
background-color: white;
color: black;
text-align: center;
}
a:link, a:visited {
color: #000;
}
a:active, a:hover {
color: #666;
}
p.header {
font-size: small;
}
p.header span {
font-weight: bold;
}
p.footer {
font-size: x-small;
}
div.content {
margin: auto;
width: 600px;
}
div.missing {
margin: auto;
position: relative;
top: 50%;
width: 193px;
}
div.missing a {
height: 63px;
position: relative;
top: -31px;
}
div.missing img {
border-width: 0px;
}
div#unityPlayer {
cursor: default;
height: 450px;
width: 600px;
}
-->
</style>
<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
// show the message
alert( arg );
<?php
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
}
-->
</script>
</head>
<body>
<p class="header"><span>Unity Web Player | </span>WebPlayer</p>
<div class="content">
<div id="unityPlayer">
<div class="missing">
<a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
<img alt="Unity Web Player. Install now!" src="http://webplayer.unity3d.com/installation/getunity.png" width="193" height="63" />
</a>
</div>
</div>
</div>
<p class="footer">« created with <a href="http://unity3d.com/unity/" title="Go to unity3d.com">Unity</a> »</p>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Unity Web Player | WebPlayer</title>
<script type="text/javascript" src="http://webplayer.unity3d.com/download_webplayer-3.x/3.0/uo/UnityObject.js"></script>
<script type="text/javascript">
<!--
function GetUnity() {
if (typeof unityObject != "undefined") {
return unityObject.getObjectById("unityPlayer");
}
return null;
}
if (typeof unityObject != "undefined") {
unityObject.embedUnity("unityPlayer", "webplayer.unity3d", 600, 450);
}
-->
</script>
<style type="text/css">
<!--
body {
font-family: Helvetica, Verdana, Arial, sans-serif;
background-color: white;
color: black;
text-align: center;
}
a:link, a:visited {
color: #000;
}
a:active, a:hover {
color: #666;
}
p.header {
font-size: small;
}
p.header span {
font-weight: bold;
}
p.footer {
font-size: x-small;
}
div.content {
margin: auto;
width: 600px;
}
div.missing {
margin: auto;
position: relative;
top: 50%;
width: 193px;
}
div.missing a {
height: 63px;
position: relative;
top: -31px;
}
div.missing img {
border-width: 0px;
}
div#unityPlayer {
cursor: default;
height: 450px;
width: 600px;
}
-->
</style>
<script type="text/javascript" language="javascript">
<!--
function SayHello( arg )
{
// show the message
alert( arg );
<?php
$file = fopen ("file.txt","r+");
$str = "111";
fputs ( $file, $str);
fclose ($file);
?>
}
-->
</script>
</head>
<body>
<p class="header"><span>Unity Web Player | </span>WebPlayer</p>
<div class="content">
<div id="unityPlayer">
<div class="missing">
<a href="http://unity3d.com/webplayer/" title="Unity Web Player. Install now!">
<img alt="Unity Web Player. Install now!" src="http://webplayer.unity3d.com/installation/getunity.png" width="193" height="63" />
</a>
</div>
</div>
</div>
<p class="footer">« created with <a href="http://unity3d.com/unity/" title="Go to unity3d.com">Unity</a> »</p>
</body>
</html>
Причем не имеет значения что скрипт вставлен в ява функцию. Его можно вставить в любое место страницы и он выполнится из любого места. Файлы с веб плеером для демонстрации такой функции можно взять тут
Этот вариант как я ранее говорил хороший. Но мы никогда его не сможем связать с событием в unity. Не сможем синхронизировать скрипт php.
Все.