Проблема с GetUnity().SendMessage(...);

Общие вопросы о Unity3D

Проблема с GetUnity().SendMessage(...);

Сообщение bsvh 02 ноя 2011, 11:32

Здравствуйте!
Подскажите пожалуйста как на HTML странице из JavaScript вызвать функцию в Unity3d Web Player.
Нашёл SendMessage, но почему-то мою функцию не вызывает.
Логика следующая:
1. В приложении Unity3d нажимаем на кнопку Test. Срабатывает Application.ExternalCall("CallJS", new object[] { "Test1" }); которая вызывает на HTML странице JavaScript функцию CallJS.
2. Вункция CallJS использует GetUnity().SendMessage("StartUI", "JSCallback", str1); для вызова функции JSCallback в приложении Unity3d в классе StartUI. JSCallback должна установить в переменной str1 переданное значение, которое должно отобразиться GUILayout.Label(str1, GUIStyle.none);
Но этого почему-то не происходит. GetUnity().SendMessage("StartUI", "JSCallback", str1); почему-то не срабатывает и не выдаёт никаких ошибок.
Может кто-то сталкивался с побобным и может подсказать в чём моя ошибка?

В приложении Unity3d находится следующий код:
Синтаксис:
Используется csharp
public class StartUI : MonoBehaviour
{
    private string str1;
    ...
    private void OnGUI()
    {
        GUILayout.BeginArea(new Rect(0, 0, Screen.width, Screen.height));
        GUILayout.Label(str1, GUIStyle.none);
        if (GUILayout.Button("Test", GUILayout.Width(150)) == true)
        {
            if (Application.isWebPlayer == true)
            {
                Application.ExternalCall("CallJS", new object[] { "Test1" });
            }
        }
        GUILayout.EndArea();
    }

    public void JSCallback(string str2)
    {
        str1 = "str1: " + str2;
    }
}
 


На HTML странице находится следующий код:
Синтаксис:
Используется javascript
            function CallJS(str1)
            {
                GetUnity().SendMessage("StartUI", "JSCallback", str1);
            }
 
bsvh
UNец
 
Сообщения: 1
Зарегистрирован: 18 апр 2011, 22:22

Re: Проблема с GetUnity().SendMessage(...);

Сообщение dondublon 04 ноя 2011, 11:56

Только что хотел задать подобный вопрос :)

Та же проблема. SendMessage из web-страницы не работает.
Сама функция на веб вызывается.

В юнити срипты двух вариантов:
Синтаксис:
Используется csharp
public void SwitchMaterial(string aName)
    {
            debugText.text = "invoked";
           ....
    }
 

из веба вызывается так:
unityObject.SendMessage(objName, "SwitchMaterial", materialName);
сам объект с objName находится не в корне.
И такой вариант на JS
Синтаксис:
Используется javascript
function MyFunction (param : String)
{
   debugtext.text = 'invoked';
}
 

вызывается
unity.SendMessage("world", "MyFunction", materialName);
причем объект world находится в корне.

Что делать?
dondublon
UNец
 
Сообщения: 47
Зарегистрирован: 16 янв 2011, 10:28
Откуда: Уфа

Re: Проблема с GetUnity().SendMessage(...);

Сообщение leksasmile 04 ноя 2011, 12:16

Синтаксис:
Используется javascript
 <script type = "text/javascript">        
         function GetParams()
         {
             var unity = unityObject.getObjectById("unityPlayer");
             unity.SendMessage("ImComponent", "ImMethod", "my test message");
         }
        </script>
 


Соответственно, у вас в юнити должен быть компонент "ImComponent", в котором присутствует метод "ImMethod", принимающий аргументы в виде string.
Перед вызовом переменная unity должна быть объявлена и инициализирована, потом уже обращаться к ней unity.SendMessage......
Еще неплохо бы проверить переменную unity на null. У меня все работает.
Аватара пользователя
leksasmile
UNец
 
Сообщения: 12
Зарегистрирован: 08 сен 2011, 13:44

Re: Проблема с GetUnity().SendMessage(...);

Сообщение dondublon 04 ноя 2011, 12:40

Спасибо за участие.
Но имеется две непонятки.
1. По документации, первый параметр SendMessage - это объект, а не компонент.
У вас unity.SendMessage("ImComponent",... в доке - unity.SendMessage("MyObject",.. ну и далее с объяснением.
2. У вас вызывается строка unityObject.getObjectById("unityPlayer");
"unityPlayer" - это что за параметр? в документации там "UnityContent".

Ну и в завершение, таки да, переменная unity у меня null но я не знаю, как ее правильно получить.
dondublon
UNец
 
Сообщения: 47
Зарегистрирован: 16 янв 2011, 10:28
Откуда: Уфа

Re: Проблема с GetUnity().SendMessage(...);

Сообщение dondublon 04 ноя 2011, 12:50

УРРА! Все получилось.
Надо было заменить "UnityContent" на "unityPlayer".
Не понял, что подразумевалось под "placeholder" в документации.
Большое спасибо!
dondublon
UNец
 
Сообщения: 47
Зарегистрирован: 16 янв 2011, 10:28
Откуда: Уфа


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12