IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity2019与WebGl方法相互调用传值 -> 正文阅读

[游戏开发]Unity2019与WebGl方法相互调用传值

关于Unity发布的WebGL项目出现问题的解决方法和本地网站部署Unity官方手册:

https://docs.unity3d.com/cn/current/Manual/webgl-interactingwithbrowserscripting.html

从 Unity 调用 JavaScript 代码的传统方法

注意:从 Unity 5.6 开始,从 Unity 调用 JavaScript 代码的建议方法是通过 .jslib 插件。下述方法受到支持仅出于兼容性原因,并可能在 Unity 的未来版本中被弃用。

可使用?Application.ExternalCall()?和?Application.ExternalEval()?函数在嵌入网页上调用 JavaScript 代码。请注意,表达式在构建的局部作用域内进行计算。如果希望在全局作用域内执行 JavaScript 代码,请参阅下面的代码可见性部分。?

传统Application.ExternalEval()函数在Unity2017版本以下适用,从2018版本开始就只能使用.jslib 方式做中介进行信息调用,虽然在2018版以上中该方法没有彻底弃用,但是使用传统方法传值会失败。

打包后还需要对文件进行配置 请看第三条

一、Unity2017版以下方法使用

新建Demo.cs脚本,将脚本挂到Main Camera中

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Demo : MonoBehaviour
{
    //public Button Btn;
    public Text showText;

    void Start()
    {
        //Btn.onClick.AddListener(BtnEvent);
        //调用外部函数(参数为方法名、参数)
        Application.ExternalCall("SayHello", "Hello World!");
    }

    public void BtnEvent(string value)
    {
        showText.text = value;
    }
}

?打包后修改index.html文件

Main Camera 挂载脚本的物体名,BtnEvent脚本方法名称 back2传递的内容

 function SayHello(arge) {
            alert(arge);
            gameInstance.SendMessage("Main Camera", "BtnEvent", "back2");
        }
<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Unity WebGL Player | WebglTest</title>
    <link rel="shortcut icon" href="TemplateData/favicon.ico">
    <link rel="stylesheet" href="TemplateData/style.css">
    <script src="TemplateData/UnityProgress.js"></script>  
    <script src="Build/UnityLoader.js"></script>
    <script>
        var gameInstance = UnityLoader.instantiate("gameContainer", "Build/AAA.json", { onProgress: UnityProgress });
        function SayHello(arge) {
            alert(arge);
            gameInstance.SendMessage("Main Camera", "BtnEvent", "back2");
        }
    </script>
  </head>
  <body>
    <div class="webgl-content">
      <div id="gameContainer" style="width: 960px; height: 600px"></div>
      <div class="footer">
        <div class="webgl-logo"></div>
        <div class="fullscreen" onclick="gameInstance.SetFullscreen(1)"></div>
        <div class="title">WebglTest</div>
      </div>
    </div>
  </body>
</html>

效果:?

?

?

?

二、unity2018版本以上方法使用

__Internalplugins.jslib 内容 此文件放在Plugins文件夹下

mergeInto(LibraryManager.library, {
  Hello: function () {
    TestSend("Hello, world!");
  },
});

场景脚本?WebCommunication.cs 挂载Main Camera(或任何物体,这里名字在打包后的js脚本中要用到)上。

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

public class WebCommunication : MonoBehaviour
{
    //引用jslib的Hello()方法
    [DllImport("__Internal")]
    private static extern void Hello();

    public Text MyText;

    void Start()
    {
        //开始时就调用jslib的方法Hello()
        Hello();
    }

    //测试 网页调用此方法
    public void TestMethod(string text)
    {
        MyText.text = text;
    }
}

打包webGl后修改index.html文件

“Main Camera” 挂载脚本的物体名称,TestMethod 脚本中要调用的方法。

?function TestSend(s) {
? ? ? ? ? ? unityInstance.SendMessage("Main Camera", "TestMethod", s);
? ? ? ? }

运行效果:?

三、打包后文件的配置

Webgl无法直接运行在网站中,需要在打包webgl中添加web.config文件

web.config内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <mimeMap fileExtension=".unity3d" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".unityweb" mimeType="application/binary" />
        </staticContent>
        <directoryBrowse enabled="true" />
    </system.webServer>
</configuration>

如果不加会出现错误

2.在iis部署网站运行即可:

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:32:18  更:2021-08-03 11:32:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 8:17:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码