【Unity开发小技巧】UnityWebGL移动端和电脑端调起输入法,中文输入处理

news/2024/11/29 5:48:30/

目录

一.TextMesh Pro中文显示问题

1.PC端和移动端中文显示异常乱码(解决方案)

1.制作TextMesh Pro字体 方式一

2.制作TextMesh Pro字体 方式二

 3.通用字体资源

 2.web端中文不能输入窗口模式(解决方案)

二.移动端Inputfile调不起输入法(解决方案)

三.电脑浏览器端全屏InputFile无法输入中文(待验证)

1.Unity内cs代码

2.JavaScript代码:

3.JS代码位置示例


 

在Unity WebGL中实现中文输入是一个复杂的问题,因为浏览器的原生输入框在WebGL中不可用。然而,有一些第三方解决方案可以帮助实现中文输入 。

原工程地址:https://download.csdn.net/download/qq_37310110/88009399

一.TextMesh Pro中文显示问题

TextMesh Pro 是 Unity 中用于高级文本渲染的强大工具,支持多种语言和字体。然而,在使用 TextMesh Pro 显示中文时,可能会遇到一些问题,因为中文字符集与常规字体的字符集不完全匹配。

1.PC端和移动端中文显示异常乱码(解决方案)

在使用TextMesh Pro的自带字体时,是不支持中文的显示的。所以需要我们去制作新的字体文件。 找到系统字体库里面格式为ttf的字体导入到unity里面。

1.制作TextMesh Pro字体 方式一

鼠标选中导入的新字体(包含中文的字体,系统再带的大部分都带中文),右键Create-TextMeshPro-FontAsset,会创建当前字体对应的字体资源,然后文本控件的字体切换一下就可以正常显示中文了。但是这种制作方式在PC端可以正常显示,一旦打包WEBGL之后中文的显示就又有异常了。所以如果向

 

2.制作TextMesh Pro字体 方式二

菜单栏:Window-TextMesh Pro-FontAssetCreator,设置目标字体源,然后生成并保存新的字体资源 。如果有未包含的中文字符或者特殊符号可以直接在file文件里面添加然后再次生成覆盖即可

 3.通用字体资源

字体下载:

https://download.csdn.net/download/qq_37310110/88009382

 原工程地址:https://download.csdn.net/download/qq_37310110/88009399

 2.web端中文不能输入窗口模式(解决方案)

用以下方案目前只能在窗口模式下调用。原理就是检测inputfile的输入,然后动态的生成一个html的input控件把这个控件的输入内容传递给webgl的inputfile。

工具源码连接: https://github.com/kou-yeung/WebGLInput

 原工程地址:https://download.csdn.net/download/qq_37310110/88009399 

 在InputFile组件上添加WebGLInput脚本即可,有是否显示html输入控件的选项

 

二.移动端Inputfile调不起输入法(解决方案)

 原工程地址:https://download.csdn.net/download/qq_37310110/88009399 

工具源码连接: https://github.com/kou-yeung/WebGLInput

 在InputFile组件上添加WebGLInput脚本即可,有是否显示html输入控件的选项

三.电脑浏览器端全屏InputFile无法输入中文(待验证)

此解决方案为ChatGPT提供,是否可行待验证

1.Unity内cs代码

在Unity WebGL中实现中文输入可以使用Unity的Input类和JavaScript的交互。以下是一个示例代码,演示如何在Unity WebGL中实现中文输入:

using UnityEngine;
using System.Runtime.InteropServices;public class ChineseInput : MonoBehaviour
{[DllImport("__Internal")]private static extern void EnableChineseInput();[DllImport("__Internal")]private static extern string GetChineseInput();private bool isChineseInputEnabled = false;private string chineseInput = "";private void Start(){
#if !UNITY_EDITOR && UNITY_WEBGLEnableChineseInput();isChineseInputEnabled = true;
#endif}private void Update(){if (isChineseInputEnabled){string input = GetChineseInput();if (!string.IsNullOrEmpty(input) && input != chineseInput){chineseInput = input;Debug.Log("中文输入:" + chineseInput);}}}
}

这段代码中,我们使用了DllImport属性来声明与JavaScript的交互函数EnableChineseInputGetChineseInputEnableChineseInput函数用于启用中文输入,而GetChineseInput函数用于获取中文输入的文本。

Start方法中,我们通过EnableChineseInput启用中文输入,并将isChineseInputEnabled标志设置为true

Update方法中,我们通过调用GetChineseInput获取中文输入的文本。如果输入不为空且不等于之前的输入,我们将新的输入存储在chineseInput变量中,并在控制台中打印出来。

请注意,这段代码中的EnableChineseInputGetChineseInput函数是使用DllImport声明的,它们需要在JavaScript中实现。你需要在Unity的HTML模板文件(通常是index.html)中添加以下

2.JavaScript代码:

<script>function EnableChineseInput() {document.getElementById("unityContainer").focus();}function GetChineseInput() {var inputText = document.getElementById("unityContainer").value;document.getElementById("unityContainer").value = "";return inputText;}
</script>

在这个例子中,EnableChineseInput函数使Unity WebGL的容器元素获取焦点,从而激活键盘输入。GetChineseInput函数获取容器元素的值,并将其清空,以便下一次输入。

通过以上代码,你可以在Unity WebGL中启用中文输入并获取中文输入的文本。请确保你已经将JavaScript代码添加到Unity的HTML模板文件中,并在构建Unity WebGL项目时正确设置了模板文件。

3.JS代码位置示例

以下是将JavaScript代码添加到Unity WebGL的index.html文件的示例:

<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8"><title>Unity WebGL</title><style>/* ... 省略其他样式 ... */</style>
</head>
<body><!-- Unity WebGL 容器 --><div id="unityContainer" style="width: 960px; height: 600px"></div><!-- Unity WebGL 构建的 JavaScript 文件 --><script src="Build/UnityLoader.js"></script><script>/* ... UnityLoader 初始化代码 ... */</script><!-- 中文输入 JavaScript 代码 --><script>function EnableChineseInput() {document.getElementById("unityContainer").focus();}function GetChineseInput() {var inputText = document.getElementById("unityContainer").value;document.getElementById("unityContainer").value = "";return inputText;}</script>
</body>
</html>


http://www.ppmy.cn/news/753574.html

相关文章

JavaWeb Cookie

1.Cookie 介绍 Cookie是一种用于在Web浏览器和Web服务器之间传递数据的机制。 它是由服务器发送给浏览器的小型文本文件&#xff0c;存储在浏览器的本地计算机上。 浏览器在后续请求中会自动将Cookie发送回服务器&#xff0c;以便服务器可以识别用户并提供个性化的服务。 C…

【AJAX】跨域问题笔记

跨域 一、同源策略&#xff08;Same-Origin Policy&#xff09; 是浏览器的安全机制。 同源&#xff1a;协议、域名、端口号必须完全相同 客户端 服务端 违背同源策略就是跨域 二、如何解决跨域 1、JSOPN &#xff08;1&#xff09;JSONP是什么 JSONP(JSON with Padding…

iOS知识梳理之移动开发网络篇TCP/IP

1.OSI七层 TCP/IP五层 1.1 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层对于OSI七层参考模型,我想说只有这七个词条.任何与实际生产脱钩的东西都需要硬性记忆.而TCP/IP五层模型我不需要硬性记忆,就可以根据应用逻辑复述出来. 1.2 TCP/IP五层模型 TCP…

Qt网络应用开发

Qt提供四种网络类&#xff1a; 1、高度封装的网络通信类&#xff1a;QNetworkRequest、QNetworkAccessManager和QNetworkReply。 应用方向&#xff1a;QNetworkRequest类似于HTTP请求&#xff0c;它被传递给QNetworkAccessManager&#xff0c;以便在连线上发送请求;这个类返回…

达达平台的物流场景

业务场景 达达是全国领先的最后三公里物流配送平台。 达达的业务模式与滴滴以及Uber很相似&#xff0c;以众包的方式利用社会闲散人力资源&#xff0c;解决O2O最后三公里即时性配送难题。 达达业务主要包含两部分&#xff1a;商家发单&#xff0c;配送员接单配送&#xff0c;如…

智能打印SDK---官方博客

&#xff08;开源准备&#xff1a;也算是笔者从业以来第二个作品了&#xff0c;谢谢博客园编辑审核团队&#xff0c;欢迎置顶。欢迎转载。开源为百度云打包开源&#xff09; 演示站点源码 均在github 迁徙至github: https://github.com/micro-chen/WebPrinter 智能打印SDK-官方…

使用UAC白名单让指定的程序不受UAC限制

使用UAC白名单让指定的程序不受UAC限制 1. 关闭UAC的隐患 我的上一篇博文关于Windows_8.1/Windows7下普通用户运行软件提示需要输入管理员密码解决方法

Netflix创始人:我不要求996,一样市值1万亿!

往期热门文章&#xff1a;1、《往期精选优秀博文都在这里了&#xff01;》 2、17 张程序员专属壁纸&#xff0c;太太太太太太骚了… 3、刚刚&#xff0c;腾讯每人发100股&#xff1a;市值7万&#xff0c;不算年终奖&#xff01;员工&#xff1a;愿为小马哥拼命 4、在 IDEA 中用…