ズZGあ☆ 发表于 2020-7-16 16:26

申请会员ID:gxguixin123【未报到,已注销】

1、申 请 I D:a446198034
2、个人邮箱: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



    }

流程结束

工程源码


其他原创作品展示





Hmily 发表于 2020-7-16 18:20

换个其他账号吧,论坛禁止用QQ等联系方式当用户名一部分。

ズZGあ☆ 发表于 2020-7-17 09:35

Hmily 发表于 2020-7-16 18:20
换个其他账号吧,论坛禁止用QQ等联系方式当用户名一部分。

这个可否

1、申 请 I D:gxguixin123
2、个人邮箱:446198034@qq.com

Hmily 发表于 2020-7-17 11:18

I D:gxguixin123
邮箱:446198034@qq.com

申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。

Hmily 发表于 2020-8-28 11:19

一直未报到,账号注销。

ズZGあ☆ 发表于 2020-9-1 09:30

靓仔, id 通过后,我一直有在啊,很活跃的,经常浏览帖子,发帖回复
后来绑定了QQ,就一直用QQ登录,
今天看了下我的账号竟然登不上!
求给过呀

Hmily 发表于 2020-9-1 10:09

ズZGあ☆ 发表于 2020-9-1 09:30
靓仔, id 通过后,我一直有在啊,很活跃的,经常浏览帖子,发帖回复
后来绑定了QQ,就一直用QQ登录,
今 ...

规则很重要,还给你短消息通知来报道都没来,自己下次开放注册再来玩吧。
页: [1]
查看完整版本: 申请会员ID:gxguixin123【未报到,已注销】