当前位置: 首页 > news >正文

怎样创建一个网站wordpress分页问题

怎样创建一个网站,wordpress分页问题,个人博客网站,吉林省建设信息网站Unity 默认不支持直接安装 NuGet 包,尤其是像 WebView2 这样的库,它主要是为 .NET 应用(如 WPF、WinForms)设计的。不过,你仍然可以手动集成 WebView2 到 Unity 项目中,以下是几种可行的方法: 方…

Unity 默认不支持直接安装 NuGet 包,尤其是像 WebView2 这样的库,它主要是为 .NET 应用(如 WPF、WinForms)设计的。不过,你仍然可以手动集成 WebView2 到 Unity 项目中,以下是几种可行的方法:

 方法 1:手动提取 WebView2 相关 DLL
 步骤:
1. 下载 WebView2 SDK  
    访问 [WebView2 SDK 下载页面](https://developer.microsoft.com/enus/microsoftedge/webview2/)  
    下载对应版本的 WebView2 SDK(建议选择 Fixed Version)
  
2. 提取 DLL  
    如果你使用的是 NuGet 版本,可以手动下载 NuGet 包:
     sh
     nuget install Microsoft.Web.WebView2
     
    进入 Microsoft.Web.WebView2.{版本号}/lib/netcoreapp3.0/  
    复制 Microsoft.Web.WebView2.Core.dll 和 WebView2Loader.dll 到 Unity 项目中的 Plugins 目录

3. 设置 DLL 兼容性  
    选中 Plugins 文件夹中的 Microsoft.Web.WebView2.Core.dll 和 WebView2Loader.dll  
    在 Inspector 窗口中,勾选 Windows 平台,取消选中其他平台
  
4. 在 C 脚本中引用  
   在 Unity C 代码中手动加载 WebView2:
   csharp
   using Microsoft.Web.WebView2.Core;
   using Microsoft.Web.WebView2.WinForms;  // 仅适用于 WinForms 托管的 WebView2
   
   但在 Unity 中,直接使用 WinForms 会有兼容性问题,所以你可能需要用 C++ 进行嵌套封装。

 方法 2:使用 C++ Plugin 方式集成 WebView2
如果直接在 Unity C 代码中集成 WebView2 过于复杂,可以创建一个 C++ DLL,封装 WebView2,然后在 Unity 中调用。

 步骤:
1. 创建一个 C++ DLL(Windows 专用)
2. 在 DLL 中使用 WebView2 COM API 创建浏览器实例
3. 通过 PInvoke 在 Unity C 中调用该 DLL

 方法 3:使用 Unity WebView 插件
如果你不一定要使用 WebView2,可以考虑 Unity Asset Store 上的 WebView 插件:
 [UniWebView](https://assetstore.unity.com/packages/tools/gui/uniwebview189456)(付费)
 [SimpleWebView](https://github.com/gree/unitywebview)(开源,但较旧)

这些插件内部可能仍然依赖 WebView,但它们封装好了 Unity 兼容性问题。

总结:
 最简单的方法:手动提取 WebView2Loader.dll 并放入 Plugins 目录
 最灵活的方法:使用 C++ Plugin 方式封装 WebView2
 最快捷的方法:使用 Unity WebView 插件(如 UniWebView)

 解决方案:通过独立 DLL 使用 WebView21. 创建独立的 .NET 项目创建一个 .NET 6(或更高版本)的类库项目(Class Library),用于封装 WebView2 的功能。在这个项目中安装 Microsoft.Web.WebView2 NuGet 包。2. 实现 WebView2 浏览器引擎在 .NET 类库中实现 WebView2 的核心逻辑。使用文件、命名管道或其他 IPC 机制与 Unity 通信。3. 将 DLL 集成到 Unity将生成的 DLL 文件放入 Unity 的 Assets/Plugins 文件夹。在 Unity 中通过 C 调用 DLL 的功能。以下是一个简化版的实现:步骤 1:创建 .NET 类库项目1. 使用 Visual Studio 创建一个 .NET 6 类库项目,命名为 WebView2BrowserEngine。
2. 在项目中安装 NuGet 包:InstallPackage Microsoft.Web.WebView23. 添加以下代码:csharp
// WebView2BrowserEngine/WebView2Engine.cs
using Microsoft.Web.WebView2.Core;
using Microsoft.Web.WebView2.WinForms;
using System;
using System.Drawing;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WebView2BrowserEngine
{public class WebView2Engine{private WebView2 _webView;private Form _hiddenForm;private string _textureFilePath; // 用于传递纹理数据的文件路径private int _width, _height;public WebView2Engine(int width, int height, string textureFilePath){_width = width;_height = height;_textureFilePath = textureFilePath;InitializeWebView();}private void InitializeWebView(){// 创建隐藏的 Form_hiddenForm = new Form{Width = 0,Height = 0,FormBorderStyle = FormBorderStyle.None,ShowInTaskbar = false,Visible = false};_webView = new WebView2{Dock = DockStyle.Fill};_hiddenForm.Controls.Add(_webView);_webView.CoreWebView2InitializationCompleted += async (s, e) =>{if (e.IsSuccess){_webView.CoreWebView2.Settings.IsWebMessageEnabled = true;_webView.Size = new Size(_width, _height);await UpdateTextureAsync(); // 初始化时更新一次纹理}};// 异步初始化_webView.EnsureCoreWebView2Async(null);Application.Run(_hiddenForm); // 运行消息循环}public void Navigate(string url){if (_webView.CoreWebView2 != null){_webView.CoreWebView2.Navigate(url);UpdateTextureAsync();}}public void ExecuteJavaScript(string js){if (_webView.CoreWebView2 != null){_webView.CoreWebView2.ExecuteScriptAsync(js);}}public async Task UpdateTextureAsync(){if (_webView.CoreWebView2 != null){using (var stream = new MemoryStream()){await _webView.CoreWebView2.CapturePreviewAsync(CoreWebView2CapturePreviewImageFormat.Png, stream);File.WriteAllBytes(_textureFilePath, stream.ToArray());}}}public void Shutdown(){_webView?.Dispose();_hiddenForm?.Close();}}
}将项目构建为 DLL,输出文件为 WebView2BrowserEngine.dll。步骤 2:将 DLL 放入 Unity 项目1. 将 WebView2BrowserEngine.dll 复制到 Unity 项目的 Assets/Plugins 文件夹。
2. 确保 Unity 的 API 兼容性级别设置为 .NET 4.x(在 Edit > Project Settings > Player > Api Compatibility Level 中设置)。步骤 3:修改 Unity 的 BrowserEngine以下是修改后的 BrowserEngine 类,使用文件系统与 WebView2 DLL 通信:csharp
// SimpleWebBrowser/BrowserEngine.cs
using System;
using System.IO;
using UnityEngine;
using WebView2BrowserEngine; // 引用外部 DLL 的命名空间namespace SimpleWebBrowser
{public class BrowserEngine{private WebView2Engine _webViewEngine;private Texture2D _browserTexture;private string _textureFilePath;private bool _initialized = false;// 设置private int _width = 512;private int _height = 512;private string _initialURL;// 事件(保持与原接口兼容)public delegate void PageLoaded(string url);public event PageLoaded OnPageLoaded;public delegate void JavaScriptDialog(string message, string prompt, DialogEventType type);public event JavaScriptDialog OnJavaScriptDialog;public delegate void JavaScriptQuery(string message);public event JavaScriptQuery OnJavaScriptQuery;public Texture2D BrowserTexture => _browserTexture;public bool Initialized => _initialized;region 初始化public void InitPlugin(int width, int height, string sharedFileName, string initialURL, bool enableWebRTC, bool enableGPU){_width = width;_height = height;_initialURL = initialURL;_textureFilePath = Path.Combine(Application.temporaryCachePath, "webview2_texture.png");_browserTexture = new Texture2D(_width, _height, TextureFormat.BGRA32, false, true);// 启动 WebView2Enginetry{_webViewEngine = new WebView2Engine(_width, _height, _textureFilePath);_webViewEngine.Navigate(_initialURL);_initialized = true;Debug.Log("WebView2Engine initialized.");}catch (Exception ex){Debug.LogError($"Failed to initialize WebView2Engine: {ex.Message}");}}endregionregion 发送事件public void SendNavigateEvent(string url, bool back, bool forward){if (!_initialized) return;if (!(url.StartsWith("http://") || url.StartsWith("https://")))url = "https://www.google.com/search?q=" + url;_webViewEngine.Navigate(url);OnPageLoaded?.Invoke(url); // 模拟页面加载事件}public void SendShutdownEvent(){if (_initialized){_webViewEngine.Shutdown();_initialized = false;}}public void PushMessages() { } // WebView2 不需要手动推送消息public void SendDialogResponse(bool ok, string dinput){// 通过 JS 模拟对话框响应string js = ok ? $"window.dialogCallback(true, '{dinput}')" : $"window.dialogCallback(false, '{dinput}')";_webViewEngine.ExecuteJavaScript(js);}public void SendQueryResponse(string response){string js = $"window.queryCallback('{response}')";_webViewEngine.ExecuteJavaScript(js);}public void SendCharEvent(int character, KeyboardEventType type){string js = $"document.dispatchEvent(new KeyboardEvent('{(type == KeyboardEventType.Down ? "keydown" : "keyup")}', {{keyCode: {character}}}));";_webViewEngine.ExecuteJavaScript(js);}public void SendMouseEvent(MouseMessage msg){string js = $"document.elementFromPoint({msg.X}, {msg.Y}).dispatchEvent(new MouseEvent('{msg.Type.ToString().ToLower()}', {{button: {(int)msg.Button}, clientX: {msg.X}, clientY: {msg.Y}}}));";_webViewEngine.ExecuteJavaScript(js);}public void SendExecuteJSEvent(string js){_webViewEngine.ExecuteJavaScript(js);}public void SendPing(){_webViewEngine.ExecuteJavaScript("console.log('Ping from Unity');");}endregionregion 辅助方法public void RunJSOnce(string js){_webViewEngine.ExecuteJavaScript(js);}public void UpdateTexture(){if (!_initialized) return;_webViewEngine.UpdateTextureAsync().Wait(); // 同步等待,实际中应改为协程if (File.Exists(_textureFilePath)){byte[] imageBytes = File.ReadAllBytes(_textureFilePath);_browserTexture.LoadImage(imageBytes);_browserTexture.Apply();}}public void CheckMessage(){// 通过 JS 注入模拟对话框和查询_webViewEngine.ExecuteJavaScript(@"window.alert = (msg) => { window.chrome.webview.postMessage({type: 'alert', message: msg}); };window.confirm = (msg) => { window.chrome.webview.postMessage({type: 'confirm', message: msg}); return false; };window.prompt = (msg, def) => { window.chrome.webview.postMessage({type: 'prompt', message: msg, default: def}); return null; };");}public void Shutdown(){SendShutdownEvent();}endregion}
}关键说明1. 通信方式:使用文件系统(_textureFilePath)传递 WebView2 的渲染结果(PNG 格式)到 Unity。对话框和查询通过 JavaScript 的 postMessage 模拟,Unity 端暂未实现完整的事件监听(需要额外的 IPC 机制,如命名管道)。2. 异步处理:UpdateTexture 中使用了 .Wait(),这在 Unity 中可能阻塞主线程。建议改为协程:csharppublic IEnumerator UpdateTextureCoroutine(){yield return _webViewEngine.UpdateTextureAsync();if (File.Exists(_textureFilePath)){byte[] imageBytes = File.ReadAllBytes(_textureFilePath);_browserTexture.LoadImage(imageBytes);_browserTexture.Apply();}}3. DLL 依赖:确保 WebView2BrowserEngine.dll 和其依赖项(如 WebView2 Runtime)正确部署到 Unity 项目中。在 Windows 上运行时,用户机器需要安装 WebView2 Runtime(可通过 Microsoft 提供的方式分发)。4. 限制:当前实现中,事件(如 OnJavaScriptDialog 和 OnJavaScriptQuery)未完全实现,需要通过命名管道或 TCP 等方式从 WebView2 传递到 Unity。性能上,频繁的文件读写可能较慢,可以优化为内存流或共享内存。下一步改进建议1. 添加 IPC 机制:使用命名管道(NamedPipeClientStream 和 NamedPipeServerStream)实现 WebView2 与 Unity 之间的事件通信。
2. 优化纹理传输:使用共享内存或直接内存映射替代文件传输。
3. 异步支持:将所有 WebView2 操作改为协程或使用 Unity 的 UniTask 插件支持 async/await。

http://www.dtcms.com/a/433499.html

相关文章:

  • 男女一起做暖暖网站通过备案号查网站
  • 深圳网站建站建设解析视频的网站怎么做
  • 做亚马逊有什么网站可以借鉴wordpress取消伪静态后内页500
  • 领先的手机网站设计汽车网站营销
  • 建个人网站怎么赚钱吗广告版面设计图片
  • 网站的备案信息中国住房和城乡建设部网站公文
  • 网站建设以后就业方向蔡甸做网站
  • 京东物流网站建设特点徐州网站建设制作工作室
  • 用c 做一个小网站怎么做成都装修设计公司推荐
  • 家用电脑做网站能备案做校服的网站
  • 银川网站怎么做seowordpress比较好的建议
  • 凉山建设局网站做网站配置好了找不到服务器
  • 站长之家app舆情监测分析系统
  • 如何做跨境购物网站普陀网站制作有哪些
  • 织梦后台如何做网站地图东莞网上推广
  • vs 2008 手机网站开发深圳外贸网站外贸网站建设
  • 电脑如何建立网站网站首页分辨率
  • 网站广告接入如何在网站上做咨询浮动窗口
  • 如何自己弄一个网站厂字形网页布局网站
  • 公司网站设计费计入什么科目php网站搭建
  • 关键词密度查询站长工具江阴网站建设培训
  • 中国机械加工网官方网站的wordpress主机名
  • 网站建设方案之目标网站建设执招标评分表
  • 商业计划的网站建设费用营销系统四大系统
  • 网站后台登陆不了哪个网站是可以做书的
  • 深圳深圳做网站长沙做网站哪里好
  • 公明做企业网站安徽安庆邮编
  • 网站建设的定位是什么意思wordpress手机号登陆
  • 青岛网站公司厚街商城网站建设
  • 深圳营销型网站建设电话漳州网站建设 林