Отправка сообщения из Unity WebGL в Vue js

это более общий вопрос! Я создал веб-страницу vue js, где хотел добавить единство webgl. Похоже, что вызвать функцию единства из javascript очень просто. Но я не смог найти подходящего решения для отправки данных из моего единства webgl в vue js. В руководстве они рекомендуют создать что-то вроде библиотеки javascript, но я не думаю, что это имеет смысл в моем контексте: здесь

Есть ли у кого-нибудь идеи, как с этим справиться, и возможно ли это? заранее спасибо:)


person honey_cake    schedule 18.10.2019    source источник
comment
Ссылка, которую вы предоставили, действительно имеет смысл в любом контексте, не зная, как ее реализовать, это другая история, вы можете публиковать свои испытания, взаимодействующие с javascript, и любые ошибки / стены, с которыми вы столкнулись, и мы, вероятно, сможем помочь.   -  person Tenretni    schedule 18.10.2019
comment
Извините, я думаю, что недостаточно конкретизировал. Я могу вызывать функции из файла .jslib в единстве. Но у меня здесь есть проект Vue js, и было бы неплохо, если бы я мог отправлять данные из моего приложения embedet unity на Vue js. Здесь они утверждают, что существует возможность двусторонней связи, но объясняют только одну способ. Так что я ищу другой путь.   -  person honey_cake    schedule 18.10.2019


Ответы (2)


Поскольку вы можете отправлять данные из vue в unity, отправка данных из unity в javascript также проста.

  1. Создайте объект для представления данных, которые мы хотим отправить в JS.

    public class Person
    {
        public string Name{get;set;}
        public string PhoneNumber{get;set;}
    }
    
  2. Создайте свой UnityJavascipt.jslib файл и поместите его в папку плагинов.

  3. Мы начнем с простой функции моста javascript, которая называется SendToJavscript.

    var UnityJavascipt =
    {
        // This object can hold variables for you.
        $JustAWebGLObject:
        {
    
        },
    
        SendToJavscript: function (dataJsonPtr)
        {
            // string paramters from unity get delivered to javascript as pointers.
            // So we get the actual string from the pointer.
            var dataJson = Pointer_stringify(dataJsonPtr);
    
            // Now convert the string to a javascript object.
            var jsobject = JSON.parse(dataJson);
    
            // Now you have the jsObject, Vue can access it from here.
            // You can use Vue API from here too.
    
            // I'll just debug some variables.
            console.log(jsobject.Name); // Kevin
            console.log(jsobject.PhoneNumber); //  011244455
        },
    
    };
    autoAddDeps(UnityJavascipt , '$JustAWebGLObject');
    mergeInto(LibraryManager.library, UnityJavascipt );
    
  4. Создайте функцию extern PInvoke C #, которая, вызывая ее, вызывает функцию моста Javascipt, эта функция extern должна соответствовать функции моста Javascript SendToJavscript по имени, количеству параметров, типам параметров, порядку параметров.

    public static extern void SendToJavscript(string jsonData);

  5. Теперь отправляем объект person в javascript.

    private void SendToJavscript_Test()
    {
       Person person = new Person();
       person.Name = "Kevin";
       person.PhoneNumber = "011244455";
    
       // We need to convert the object to javascript, cause we can't send objects 
       directly between C# and javascript.
       // Our bridge function handles converting the object back to a javascript 
       object.
    
       SendToJavscript(JsonUtility.ToJson(person));
    }
    
person Tenretni    schedule 18.10.2019
comment
Большое спасибо за подробный ответ! Но как я могу получить доступ к файлу jslib из Vue, если он находится в проекте WebGL? - person honey_cake; 22.10.2019

просто поместите всю папку вашего кода, которая включает ваши функции C #, а также плагины, в папку vue-unity-webgl, которую вы установили как пакет, если вы следовали методу https://github.com/votetake/vue-unity-webgl

person Attiqa Khan    schedule 19.04.2020