由于Unity WebGL本身不能很好的支持中文输入,拷贝,输入法跟随,然后网上找的插件,大多不令人满意,于是决定自己开发一个~
//2020年2月26日修改:
由于之前1.0版本的插件在Unity2019.2.4版本中打包,没有在低版本测试,导致有些使用低版本(2019以下的)的朋友无法使用,会出现missing的问题,Unity的高低版本在UI和WebGL也存在点差异,现在我重新打包一个1.1版本的插件,感谢大家的评论~
自研插件名称:ChineseInputWebGL1.1.unitypackage 插件下载
支持功能:
1.中英文输入
2.支持光标移动中间插入输入
3.输入法跟随
4.支持Ctrl+C(拷贝),Ctrl+V(粘贴),Ctrl+X(裁剪)等键盘操作
5.支持WebGL全屏
主要思路:在unity WebGL打包浏览页面的对应位置,动态创建一个Html的Input控件,去实现功能
主要效果图
中文输入,输入法跟随:
拷贝:
主要代码
js部分:
var ChineseInputWebGL = {
$input:null,
$canvas:null,
$unityContainer:null,
$webglcontent:null,
$unityGameObjectName : "",
$unityInputID: "",
$Inputing: function()
{
if(unityGameObjectName!=null&&unityInputID!=null && input != null)
{
var strvalue = unityInputID+"|"+input.value+"|"+input.selectionStart;
SendMessage(unityGameObjectName, "OnInputText", strvalue);
}
},
$InputEnd: function()
{
if(unityGameObjectName!=null&&unityInputID!=null && input != null)
{
SendMessage(unityGameObjectName,"OnInputEnd",unityInputID.toString());
}
document.onkeydown=null;
},
InputShow: function(GameObjectName_,inputID_,v_,fontsizeT_,indexStr_,inputRectStr_)
{
var GameObjectName = Pointer_stringify(GameObjectName_);
var inputID = Pointer_stringify(inputID_);
var v = Pointer_stringify(v_);
var fontsizeT = Pointer_stringify(fontsizeT_);
var indexStr=Pointer_stringify(indexStr_);
var inputRectStr = Pointer_stringify(inputRectStr_);
var indexArr=indexStr.split("|");
var startIndexT = indexArr[0];
var endIndexT = indexArr[1];
var inputRectArr=inputRectStr.split("|");
var posX = inputRectArr[0];
var posY = inputRectArr[1];
var width = inputRectArr[2];
var height = inputRectArr[3];
if(input==null){
input = document.createElement("input");