栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

Unity中WEBGL平台下【Unity中调用JS上的方法】【JS调用Unity中的方法】

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity中WEBGL平台下【Unity中调用JS上的方法】【JS调用Unity中的方法】

官方文档:【传送门】
【说明】:最近开发WEBGL平台上的项目,很多时候我们需要在Unity中调用网页端的方法而不是在Unity内部调用,比如场景中点击音效(为了减少打包包体大小采取了在网页上播放音效),点击按钮跳转新的场景等等等等应用场景。

WEBGL平台下【Unity中调用JS上的方法】
	 首先创建一个后缀为`.jslib`的文件测试代码如下,放置在Assets文件夹下的Plugins文件夹下。
mergeInto(LibraryManager.library, {

UnityToJs_Simple: function (msg) {
        // unityMsg_Simple方法需要在打包出来的index.html中的声明
        //这里使用Pointer_stringify方法转换unity传递过来的字符串
        unityMsg_Simple(Pointer_stringify(msg));
    },

Hello:function(){
window.alert("Hello World!");
},

//方法之间一定要用逗号隔开
//执行JS方法并返回一个string类型的文本
StringReturnValueFunction: function () {
    var returnStr = "bla";
    var bufferSize = lengthBytesUTF8(returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;
  },
});

C#脚本

using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

//测试JS与Unity互相传值
public class TestJS : MonoBehaviour
{

    public Text text_Txt;

    [DllImport("__Internal")]
    private static extern void Hello();

    [DllImport("__Internal")]
    private static extern string StringReturnValueFunction();
    
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            text_Txt.text += StringReturnValueFunction();
        }
        else if (Input.GetKeyDown(KeyCode.T))
        {
            Hello();
        }
    }

    public void Test(string str)
    {
        text_Txt.text += str;
    }
}

创建一个文本组件,就可以打包测试了,界面自己搭就可以了。

WEBGL平台下【JS调用Unity中的方法】

API:unityInstance.SendMessage(objectName, methodName, value);
其中objectName是场景中对象的名称;methodName是脚本中方法的名称,当前附加到该对象;value可以是字符串、数字,也可以为空。

这需要在打包后在index.html界面上自己定义

找到打包后这段代码,一定要注意形参的要求,

C#中的代码挂载到Canvas上

运行结果:
点击右下角最大化的按钮,发现已经js已经调用unity中的方法显示出来了,没有完全显示是因为用的字体经过了处理只有常用字体。

最后几点需要注意:

  1. webgl平台默认字体不显示中文,需要自己换一个字体;
  2. 在打包出来的index.html网页,unity.Instance 在 2020.1 中替换为 createUnityInstance;
  3. 2019.1 中的 WebGL 实例从 gameInstance 重命名为 unityInstance;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号