You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity UI元素(Button)与逻辑解耦:登录结果响应实现问询

Unity UI与逻辑解耦并内部处理登录结果的实现方案

核心思路

让UI层(UILogin)只负责收集用户输入、触发登录请求和显示结果,登录逻辑完全交给外部脚本处理。通过在UILogin内部订阅结果事件,实现无需外部额外配置即可自动更新UI的效果。

修改后的完整代码

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.Events;

public class UILogin : MonoBehaviour
{
    public TMP_InputField UsernameInputField;
    public TMP_InputField PasswordInputField;   
    public Button ButtonLogin;
    public TMP_Text LoginResult;
    
    /// <summary>
    /// 触发外部登录逻辑:参数为用户名、密码
    /// </summary>
    public UnityEvent<string, string> LoginButtonClicked;

    /// <summary>
    /// 接收登录结果:外部逻辑处理完成后触发此事件
    /// </summary>
    public UnityEvent<string> OnLoginResultReceived;

    void Awake()
    {
        // 绑定登录按钮点击事件,触发外部登录逻辑
        ButtonLogin.onClick.AddListener(() => 
            LoginButtonClicked.Invoke(UsernameInputField.text, PasswordInputField.text));

        // 内部订阅登录结果事件,自动更新UI文本
        OnLoginResultReceived.AddListener(UpdateLoginResultText);
    }

    /// <summary>
    /// 内部处理登录结果的方法,更新UI文本
    /// </summary>
    private void UpdateLoginResultText(string resultMessage)
    {
        LoginResult.text = resultMessage;
    }
}

外部登录逻辑脚本示例

外部脚本只需订阅LoginButtonClicked处理登录逻辑,完成后触发OnLoginResultReceived事件即可,无需直接操作UI元素:

using UnityEngine;

public class LoginLogic : MonoBehaviour
{
    public UILogin uiLogin;

    void Awake()
    {
        // 订阅UI层的登录触发事件
        uiLogin.LoginButtonClicked.AddListener(HandleLoginRequest);
    }

    private void HandleLoginRequest(string username, string password)
    {
        // 模拟登录逻辑(实际场景替换为真实验证逻辑)
        bool loginSuccess = username == "admin" && password == "123456";
        string resultMessage = loginSuccess ? "登录成功!" : "用户名或密码错误";

        // 触发UI层的结果事件,让UI自动更新
        uiLogin.OnLoginResultReceived.Invoke(resultMessage);
    }
}

方案优势

  1. 完全解耦:UI层不关心登录逻辑实现,逻辑层不直接操作UI元素
  2. 无需外部配置:UI层内部已完成结果事件的订阅,外部逻辑只需触发事件即可完成UI更新
  3. 灵活性高:LoginButtonClicked可被多个脚本订阅,OnLoginResultReceived也可扩展其他UI处理逻辑

内容的提问来源于stack exchange,提问作者A low-key User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:35:46