You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在查询参数变更时不刷新页面,仅影响Unity WebGL应用?

可行,实现方案如下

完全可以做到,核心是利用Unity WebGL与浏览器的双向通信机制,结合页面参数监听来实现,不需要AJAX。

1. 监听页面参数变更(无刷新)

页面参数变更但不刷新页面的场景分两种,对应不同的监听方式:

  • 处理浏览器前进/后退触发的参数变化:
window.addEventListener('popstate', () => {
  const currentParams = new URLSearchParams(window.location.search);
  sendParamsToUnity(currentParams);
});
  • 自己的代码主动修改URL参数(比如按钮触发):
function updateUrlParam(key, value) {
  const params = new URLSearchParams(window.location.search);
  params.set(key, value);
  // 修改URL但不刷新页面
  history.pushState({}, '', `${window.location.pathname}?${params}`);
  // 主动通知Unity参数变更
  sendParamsToUnity(params);
}

2. 浏览器JS调用Unity函数

Unity WebGL提供了UnityInstance.SendMessage方法,可直接在浏览器JS中调用Unity内的指定函数:

// 注意:unityInstance是Unity WebGL加载完成后返回的实例
function sendParamsToUnity(params) {
  // 将参数转为JSON字符串,方便Unity解析
  const paramJson = JSON.stringify(Object.fromEntries(params));
  // 调用Unity中名为"ParamHandler"的GameObject上的"OnParamsUpdated"函数
  unityInstance.SendMessage('ParamHandler', 'OnParamsUpdated', paramJson);
}

3. Unity端接收并处理参数

在Unity中创建C#脚本,挂载到名为ParamHandler的GameObject上:

using UnityEngine;
using System;

public class ParamHandler : MonoBehaviour
{
    public void OnParamsUpdated(string paramJson)
    {
        // 解析JSON为自定义数据类
        var paramData = JsonUtility.FromJson<ParamModel>(paramJson);
        // 这里编写参数变更后的业务逻辑(比如修改游戏配置、切换场景等)
        Debug.Log("收到页面参数:" + paramJson);
    }
}

// 自定义参数模型,需与JS传递的参数结构对应
[Serializable]
public class ParamModel
{
    public string sceneId;
    public int difficulty;
    // 可根据需求添加更多字段
}

额外注意

  • 确保Unity WebGL构建时,允许与浏览器脚本通信选项处于开启状态(默认开启)。
  • 若用户手动修改地址栏参数并回车导致页面刷新,需在页面加载完成后,将初始参数传给Unity:
window.addEventListener('load', () => {
  const initialParams = new URLSearchParams(window.location.search);
  sendParamsToUnity(initialParams);
});

内容的提问来源于stack exchange,提问作者Femidis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:27:57