• Unity Webgl与JS相互交互 Unity 2021.2之后的版本


    Interaction with browser scripting
    When building content for the web, you might need to communicate with other elements on your web page. Or you might want to implement functionality using Web APIs which Unity doesn’t currently expose by default. In both cases, you need to directly interface with the browser’s JavaScript engine. Unity WebGL
    provides different methods to do this.

    Calling JavaScript functions from Unity scripts
    The recommended way of using browser JavaScript in your project is to add your JavaScript sources to your project, and then call those functions directly from your script code. To do so, place files with JavaScript code using the .jslib extension under a “Plugins” subfolder in your Assets folder. The plugin file needs to have a syntax like this:

    mergeInto(LibraryManager.library, {

    Hello: function () {
    window.alert(“Hello, world!”);
    },

    HelloString: function (str) {
    window.alert(UTF8ToString(str));
    },

    PrintFloatArray: function (array, size) {
    for(var i = 0; i < size; i++)
    console.log(HEAPF32[(array >> 2) + i]);
    },

    AddNumbers: function (x, y) {
    return x + y;
    },

    StringReturnValueFunction: function () {
    var returnStr = “bla”;
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;
    },

    BindWebGLTexture: function (texture) {
    GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[texture]);
    },

    });
    Then you can call these functions from your C# scripts
    like this:

    using UnityEngine;
    using System.Runtime.InteropServices;

    public class NewBehaviourScript : MonoBehaviour {

    [DllImport("__Internal")]
    private static extern void Hello();
    
    [DllImport("__Internal")]
    private static extern void HelloString(string str);
    
    [DllImport("__Internal")]
    private static extern void PrintFloatArray(float[] array, int size);
    
    [DllImport("__Internal")]
    private static extern int AddNumbers(int x, int y);
    
    [DllImport("__Internal")]
    private static extern string StringReturnValueFunction();
    
    [DllImport("__Internal")]
    private static extern void BindWebGLTexture(int texture);
    
    void Start() {
        Hello();
        
        HelloString("This is a string.");
        
        float[] myArray = new float[10];
        PrintFloatArray(myArray, myArray.Length);
        
        int result = AddNumbers(5, 7);
        Debug.Log(result);
        
        Debug.Log(StringReturnValueFunction());
        
        var texture = new Texture2D(0, 0, TextureFormat.ARGB32, false);
        BindWebGLTexture(texture.GetNativeTexturePtr());
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    }
    后边直接看官方文档里边的里边就可以了

  • 相关阅读:
    亚马逊加湿器UL998测试报告,测试项目
    .NET应用系统的国际化-整体设计思路
    INTERSPEECH 2022 | 钉钉蜂鸣鸟音频实验室论文入选国际顶会,创新提出窄带滤波网络架构
    Spread 16.X FOR WPF 中文版 我就喜欢 Spread.NET
    使用这五个技巧,减少企业组织遭受凭证转储攻击的漏洞风险
    Spring源码分析(十四)循环依赖1:思路分析
    设计模式-代理模式Proxy
    Java 基础
    linux cat命令详解,作用,说明
    【全志V3s】SPI NAND Flash 驱动开发
  • 原文地址:https://blog.csdn.net/charlsdm/article/details/126241355