零、前言
我接触web和网页通信交互的时候unity已经使用jslib。
同事还是推荐我用之前版本的进行交互。然后。。。我没交互上。又研究了一下unity的Manual。
一、简单与浏览器脚本的交互
Unity - 手册:与浏览器脚本交互 (unity3d.com)
新建一个.jslib 扩展名的文件放在 Assets 文件夹中的“Plugins”子文件夹下
(将 JavaScript 源添加到项目中,然后直接从脚本代码调用这些函数。在这里写就不用开html写了)
Unity官方测试内容:
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]);
},
});
然后,可以从 C# 调用这些函数
using UnityEngine;
using System.Runtime.InteropServices;
public class NewBehaviourScript : MonoBehaviour {
[DllImport("__Internal")]
private static extern void Hello();
void Start() {
Hello();
}
二、数据的持久化
.jslib中
// 存储cookie
SetCookie: function(cookieName, cookieValue, expirationDays) {
var d = new Date();
d.setTime(d.getTime() + (expirationDays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = UTF8ToString(cookieName) + "=" + UTF8ToString(cookieValue) + "; expires=" + expires + "; SameSite=Lax";
},
// 读取cookie
GetCookie: function(name) {
var cookieName = UTF8ToString(name)+ "=";
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var c = cookies[i].trim();
if (c.indexOf(cookieName) === 0) {
var nameEND = c.substring(cookieName.length, c.length);
var bufferSize = lengthBytesUTF8(nameEND) + 1;
var buffer = _malloc(bufferSize);
stringToUTF8(nameEND, buffer, bufferSize);
return buffer;
}
}
return "";
},
C#中
// 存储cookie
SetCookie("username", "123456", 30);
// 读取cookie
string username = GetCookie("username");
三、可能遇到的问题
* 把这个放到服务器上去测,我用netbox简单搭建了一个服务器测的。本地好像不给存cookie
*在诸多报错中还有一个,因为跨域问题需要自己添加4个HTTP响应标头(对应名称 值)
Access-Control-Allow-Credentials
true
Access-Control-Allow-Headers
Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time
Access-Control-Allow-Methods
GET, POST, OPTIONS
Access-Control-Allow-Origin
*
方法:
-
安装IIS:
- 打开Windows 11的控制面板(Control Panel)。
- 点击“程序”(Programs)> “程序和功能”(Programs and Features)> “打开或关闭Windows功能”(Turn Windows features on or off)。
- 在弹出的窗口中找到“Internet Information Services”并勾选。
- 点击“确定”并等待安装完成。
-
配置网站:
- 打开IIS Manager。可以在Windows搜索栏中键入“IIS”来找到并打开。
- 在左侧导航栏中展开服务器名称,右键点击“网站”(Sites),选择“添加网站”(Add Website)。
- 在添加网站的对话框中,填写网站名称、物理路径、端口等信息,然后点击“确定”。
-
配置HTTP响应标头:
- 在IIS Manager中找到您刚刚创建的网站,右键点击该网站,选择“特性”(Features)。
- 在特性窗口中找到“HTTP响应标头”(HTTP Response Headers),双击打开。
- 点击“添加”(Add)并输入要添加的HTTP响应标头的名称和值,例如:
- 名称:Access-Control-Allow-Credentials,值:true
- 名称:Access-Control-Allow-Headers,值:Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time
- 名称:Access-Control-Allow-Methods,值:GET, POST, OPTIONS
- 名称:Access-Control-Allow-Origin,值:*
-
保存配置:
- 点击“确定”保存添加的HTTP响应标头。
- 重新启动网站以使更改生效。
还没有评论,来说两句吧...