Estoy trabajando en un programa que usarán diferentes usuarios y cambiarán individualmente el contenido del archivo js para que coincida con sus expectativas.
En la web encontré muchos tutoriales sobre cómo llamar a la función JS en unity WEBGL, pero el archivo Js se creó con el proyecto unity.
Quería una forma de llamar a una función JS que está alojada en el sitio web (incluyéndola en el index.html de unity WEBGL pero sin compilarla).
Lo que estás tratando de hacer es posible. Pero es un poco un truco.
una búsqueda rápida en Google arrojó este artículo , de la documentación de la unidad Pero puede que no esté claro cómo hacerlo. así que aquí hay un ejemplo:
Digamos que desea llamar a una función js llamada foo() .
Lo primero que debe hacer es crear un archivo con una extensión de archivo .jslib en una carpeta llamada "Complementos". este archivo le dice a la unidad que la función existe y es solo js
mergeInto(LibraryManager.library, { foo_js: function () { foo() }, }); Aquí declaro una función llamada foo_js y le digo a la unidad que existe. Esta función consta de js, y en este caso, todo lo que hace es llamar a la función js foo() .
Nota : el nombre foo_js es arbitrario y se puede llamar cualquier cosa, incluido solo foo . pero es el mismo nombre que usará en C#. por lo que recomendaría dejar en claro que no es una función nativa de C#
ahora en el script ac #, comienza declarando la función, que se realiza agregando
[DllImport("__Internal")] private static extern void foo_js();a una clase y agregar
using System.Runtime.InteropServices;a la parte superior del archivo
ahora puede llamar a la función como foo_js() en su script c#
una vez que haya creado el proyecto de unidad, debe agregar un script js. A "index.html" que tiene una función llamada foo() para que la unidad llame.
Y debería funcionar, para más detalles, lea el artículo desde el principio.
Algo que olvidé mencionar es que no va a funcionar en el editor, ya que la función js no está definida, por lo que debe exportar el proyecto y definir la función en el sitio web, debería ser posible detectar que el juego se está ejecutando en el editor y use un comportamiento predeterminado en lugar de la función js, pero no estoy seguro de cómo en este momento