申请会员ID:gxguixin123【未报到,已注销】
1、申 请 I D:a4461980342、个人邮箱:446198034@qq.com
3、原创技术文章:
前言
本人是前端开发工程师,从事VR、AR、Web、Window等平台软件开发,闲暇之余常来网站逛,特此申请
原创内容介绍
Unity 实现 Web 端中文输入
效果演示
前景提醒
现阶段插件
实现效果太丑了!
换个角度来说, 可以利用 html 原生元素,再跟 Unity 通信,就能完成中文输入!
Unity 与 Html 通信
Application.ExternalCall(Js FunctionName, param,params ...);
Html 与 Unity 通信
SendMessage(Unity GameObj Name, FunctionName, param, param, ...);
有了通信的基础后,我们准备在 发布后的 html文件 封装一个输入框的事件
<div>
<input type="text" id = "SearchBoxInputId" name = "SearchBoxInputId" style="visibility:hidden;" />
</div>
这里,我们指明该输入框的id,且将其样式定义为隐藏, 并实现 "输入" 和 "失去焦点" 这两个重要方法
方法名称方法作用
触发事件 等待 Unity 传来触发指令,激活输入框,并赋予其焦点,使中文得以输入
OnInput (输入) 将输入结果实时传回 Unity ,Unity 中可以处理
onblur (失去焦点) 鼠标点击输入框以外的位置都会自动触发此事件,此时将其隐藏,并通知 Unity
<script>
//Control SearchBox ++
var UnityFunctionName = "";
function OnShowHTMLSearchBox(n)
{
UnityFunctionName = n;
var s = document.getElementById("SearchBoxInputId");
s.style.visibility = "visible";
s.style.opacity = 0; //透明化
s.focus(); //获取焦点
}
function LoseJiaoDian()
{
//文本框失去焦点
gameInstance.SendMessage(UnityFunctionName,"HtmlLoseForced");
var s = document.getElementById("SearchBoxInputId");
s.style.visibility = "hidden";
}
function OnSearchBoxInputing()
{
var s = document.getElementById("SearchBoxInputId");
//文本框正在输入
gameInstance.SendMessage(UnityFunctionName, "setSearchBoxString",s.value);
}
// Control SearchBox --
</script>
至此, html 就完成了对输入框的封装。
接下来来弄 Unity 这边的实现
[*]Unity 在 Inputfield 实现 PointDown 事件,即用户点击了输入框时,会首先触发该事件
[*]实现一个方法,专门监听来自 html 发来的字符串
[*]2 中的方法收到字符串后, 将 Inputfield 赋值,这样就会触发 Inputfield 的 OnValueChanged 事件,完成自己的需求
[*]实现一个方法,专门监听 html 的 onblur 事件, 流程结束!
[*]最重要的一点,unity 必须实现键盘锁定,否则在html 输入的时候会同时触发Unity 写好的快捷键事件 WebGLInput.captureAllKeyboardInput = false;
Unity 处理
public class SearchBox : MonoBehaviour
{
public InputField IF_SearchBox;
public Text T_ShowText;
//通知 html 激活输入框方法
string JsOnShowInputFun = "OnShowHTMLSearchBox";
// Use this for initialization
void Start()
{
#if UNITY_WEBGL && !UNITY_EDITOR
InitTrigger();
#endif
IF_SearchBox.onValueChanged.AddListener(SearchBoxOnValueChanged);
}
void InitTrigger()
{
EventTrigger trigger = IF_SearchBox.gameObject.GetComponent<EventTrigger>();
if (null == trigger)
trigger = IF_SearchBox.gameObject.AddComponent<EventTrigger>();
EventTrigger.Entry e = new EventTrigger.Entry();
e.eventID = EventTriggerType.PointerDown;
e.callback.AddListener((data) => { SearchBoxPointDownEvent((PointerEventData)data); });
trigger.triggers.Add(e);
}
#region UI Event
void SearchBoxOnValueChanged(string str)
{
T_ShowText.text = IF_SearchBox.text.ToString();
}
void SearchBoxPointDownEvent(PointerEventData data)
{
//通知html 激活输入框的同时,要禁用Unity 的键盘输入,否则按键会同时触发 Unity 写好的快捷键事件
#if UNITY_WEBGL && !UNITY_EDITOR
WebGLInput.captureAllKeyboardInput = false;
#endif
Application.ExternalCall(JsOnShowInputFun, gameObject.name);
}
#endregion
#region From Html
/// <summary>
/// html 输入框的输入事件
/// </summary>
/// <param name="str"></param>
public void setSearchBoxString(string str)
{
IF_SearchBox.text = str;
IF_SearchBox.caretPosition = IF_SearchBox.text.Length;
}
/// <summary>
/// html 输入框失去焦点
/// 此处重新激活键盘
/// </summary>
public void HtmlLoseForced()
{
#if UNITY_WEBGL && !UNITY_EDITOR
WebGLInput.captureAllKeyboardInput = true;
#endif
}
#endregion
}
流程结束
工程源码
其他原创作品展示
换个其他账号吧,论坛禁止用QQ等联系方式当用户名一部分。 Hmily 发表于 2020-7-16 18:20
换个其他账号吧,论坛禁止用QQ等联系方式当用户名一部分。
这个可否
1、申 请 I D:gxguixin123
2、个人邮箱:446198034@qq.com I D:gxguixin123
邮箱:446198034@qq.com
申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。 一直未报到,账号注销。 靓仔, id 通过后,我一直有在啊,很活跃的,经常浏览帖子,发帖回复
后来绑定了QQ,就一直用QQ登录,
今天看了下我的账号竟然登不上!
求给过呀 ズZGあ☆ 发表于 2020-9-1 09:30
靓仔, id 通过后,我一直有在啊,很活跃的,经常浏览帖子,发帖回复
后来绑定了QQ,就一直用QQ登录,
今 ...
规则很重要,还给你短消息通知来报道都没来,自己下次开放注册再来玩吧。
页:
[1]