Unity导出微信小游戏后无法调起移动端输入框

参考官方demo 参考demo https://gitee.com/wechat-minigame/minigame-unity-webgl-transform/tree/main/Demo/API_V2

里面有对输入文本框适配的处理方法,还有一些其他功能展示

1 使用Unity打开/Demo/API目录,API示例开发版本为Unity 2022.3.14f1。

2 若Unity为2020及以前(如2019)版本,则需要在/Assets/Scripts/Editor/PreBuildProcessing.cs中配置Python环境变量。

3 点击"工具栏------微信小游戏------转换小游戏",填写自己的游戏AppID并设置导出路径,以及设置其他导出选项,之后点击"生成并转换"。

使用微信开发者工具打开导出路径/minigame。

找到脚本 WXInputFieldTmpAdapter,复制到自己项目中
在文本输入组件上面挂载改脚本即可调起输入框

csharp 复制代码
using UnityEngine;
using WeChatWASM;
using TMPro;
using UnityEngine.EventSystems;

// 要求该组件必须附加 TMP_InputField 组件
[RequireComponent(typeof(TMP_InputField))]
public class WXInputFieldTmpAdapter : MonoBehaviour, IPointerClickHandler, IPointerExitHandler
{
    private TMP_InputField _inputField; // 存储 TMP_InputField 组件的引用
    private bool _isShowKeyboard = false; // 标记键盘是否显示

    private void Start()
    {
        // 获取挂载在同一游戏对象上的 TMP_InputField 组件
        _inputField = GetComponent<TMP_InputField>();
    }

    // 当指针点击该组件时调用
    public void OnPointerClick(PointerEventData eventData)
    {
        ShowKeyboard(); // 显示键盘
    }

    // 当指针离开该组件时调用
    public void OnPointerExit(PointerEventData eventData)
    {
        // 如果 TMP_InputField 没有被聚焦,则隐藏键盘
        if (!_inputField.isFocused)
        {
            HideKeyboard();
        }
    }

    // 输入法输入回调
    private void OnInput(OnKeyboardInputListenerResult v)
    {
        // 如果 TMP_InputField 被聚焦,则将输入值赋给 TMP_InputField
        if (_inputField.isFocused)
        {
            _inputField.text = v.value;
        }
    }

    // 输入法确认回调
    private void OnConfirm(OnKeyboardInputListenerResult v)
    {
        HideKeyboard(); // 隐藏键盘
    }

    // 输入法完成回调
    private void OnComplete(OnKeyboardInputListenerResult v)
    {
        HideKeyboard(); // 隐藏键盘
    }

    // 显示键盘的方法
    private void ShowKeyboard()
    {
        // 如果键盘已经显示,则直接返回
        if (_isShowKeyboard) return;

        // 调用 WeChat API 显示键盘
        WX.ShowKeyboard(new ShowKeyboardOption()
        {
            defaultValue = _inputField.text,//传入当前文本作为默认值
            maxLength = 20, // 最大输入长度
            confirmType = "go" // 确认按钮类型
        });

        // 绑定键盘事件回调
        WX.OnKeyboardConfirm(this.OnConfirm);
        WX.OnKeyboardComplete(this.OnComplete);
        WX.OnKeyboardInput(this.OnInput);
        _isShowKeyboard = true; // 更新键盘显示状态
    }

    // 隐藏键盘的方法
    private void HideKeyboard()
    {
        // 如果键盘未显示,则直接返回
        if (!_isShowKeyboard) return;

        // 调用 WeChat API 隐藏键盘
        WX.HideKeyboard(new HideKeyboardOption());
        // 移除事件监听
        WX.OffKeyboardInput(this.OnInput);
        WX.OffKeyboardConfirm(this.OnConfirm);
        WX.OffKeyboardComplete(this.OnComplete);
        _isShowKeyboard = false; // 更新键盘显示状态
    }
}
相关推荐
mit6.8242 小时前
[shad-PS4] Vulkan渲染器 | 着色器_重新编译器 | SPIR-V 格式
c++·游戏引擎·ps4
向宇it10 小时前
【unity小技巧】在 Unity 中将 2D 精灵添加到 3D 游戏中,并实现阴影投射效果,实现类《八分旅人》《饥荒》等等的2.5D游戏效果
游戏·3d·unity·编辑器·游戏引擎·材质
向宇it13 小时前
Unity Universal Render Pipeline/Lit光照材质介绍
游戏·unity·c#·游戏引擎·材质
__water1 天前
RHA《Unity兼容AndroidStudio打Apk包》
android·unity·jdk·游戏引擎·sdk·打包·androidstudio
不爱说话的采儿1 天前
UE5详细保姆教程(第四章)
笔记·ue5·游戏引擎·课程设计
温玉琳琅1 天前
【UE5】虚幻引擎小百科
ue5·游戏引擎·虚幻
两水先木示2 天前
【Unity3D】微信小游戏适配安全区域或胶囊控件(圆圈按钮)水平高度一致方案
unity·微信小游戏·安全区域·ui适配·胶囊控件·safearea
枯萎穿心攻击2 天前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
不绝1912 天前
怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
网络·游戏·unity·游戏引擎
unicrom_深圳市由你创科技2 天前
Unity开发如何解决iOS闪退问题
unity·ios·蓝桥杯