unity webgl 存取cookie(持久化数据)

零、前言

我接触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

*

方法:

  1. 安装IIS

    • 打开Windows 11的控制面板(Control Panel)。
    • 点击“程序”(Programs)> “程序和功能”(Programs and Features)> “打开或关闭Windows功能”(Turn Windows features on or off)。
    • 在弹出的窗口中找到“Internet Information Services”并勾选。
    • 点击“确定”并等待安装完成。
  2. 配置网站

    • 打开IIS Manager。可以在Windows搜索栏中键入“IIS”来找到并打开。
    • 在左侧导航栏中展开服务器名称,右键点击“网站”(Sites),选择“添加网站”(Add Website)。
    • 在添加网站的对话框中,填写网站名称、物理路径、端口等信息,然后点击“确定”。
  3. 配置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,值:*
  4. 保存配置

    • 点击“确定”保存添加的HTTP响应标头。
    • 重新启动网站以使更改生效。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值