这篇文章主要为大家详细介绍了Unity实现注册登录模块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用Zenject和UniRx的入门级技术实现了伪登录注册功能。
运行效果
登录面板
using System;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
using Zenject;
public class LoginPanel : MonoBehaviour
{
public InputField userName;
public InputField password;
public Button LoginBtn;
public Button RegistBtn;
[Inject] private User _user;
[Inject] private TipPanel _tipPanel;
[Inject] private RegistPanel _registPanel;
void Start()
{
//用户名输入完成后光标自动跳转到密码输入框
userName.OnEndEditAsObservable()
.Subscribe((s =>
password.Select()));
//输入完密码后敲击回车键或者点击登录按钮 都触发登录事件
var enterDownStream = password.OnEndEditAsObservable()
.Select((s => "回车键触发登录"));
var loginBtnStream = LoginBtn.OnClickAsObservable()
.Select((unit => "通过点击登录按钮触发的登录"));
Observable.Merge(enterDownStream, loginBtnStream)
.Subscribe((s =>
{
Debug.Log(s);
if (LoginCheak(userName.text,password.text))
{
userName.text=String.Empty;
password.text=String.Empty;
_tipPanel.Show("登录成功");
}
else
{
userName.text=String.Empty;
password.text=String.Empty;
_tipPanel.Show("登录失败");
}
}));
RegistBtn.OnClickAsObservable()
.Subscribe((unit =>
{
this.gameObject.SetActive(false);
_registPanel.gameObject.SetActive(true);
}));
}
public bool LoginCheak(string username,string password)
{
bool isOK = false;
if (_user._dictionary.ContainsKey(username))
{
if (_user._dictionary[username] == password)
{
isOK = true;
}
}
return isOK;
}
}
注册面板
using UniRx;
using UnityEngine;
using UnityEngine.UI;
using Zenject;
public class RegistPanel : MonoBehaviour
{
[Inject] private TipPanel _tipPanel;
[Inject] private LoginPanel _loginPanel;
[Inject] private User _user;
public InputField userName;
public InputField password01;
public InputField password02;
public Button Regist;
public Button mainMenu;
void Start()
{
//光标跳转
userName.OnEndEditAsObservable()
.Subscribe((s => password01.Select()));
password01.OnEndEditAsObservable()
.Subscribe((s => password02.Select()));
var enterPress=password02.OnEndEditAsObservable()
.Select((s => "回车键触发注册"));
var btnClick = Regist.OnClickAsObservable()
.Select((unit => "点击注册按钮触发注册"));
Observable.Merge(enterPress, btnClick)
.Subscribe((s =>
{
Debug.Log(s);
if ((userName.text != null) && (password01.text == password02.text))
{
if (_user._dictionary.ContainsKey(userName.text))
{
_tipPanel.Show("用户名已存在");
}
else
{
_user._dictionary.Add(userName.text,password01.text);
_loginPanel.userName.text = userName.text;
_loginPanel.password.text = password01.text;
_tipPanel.Show("注册成功");
}
}
else
{
_tipPanel.Show("注册失败");
}
}
));
mainMenu.OnClickAsObservable()
.Subscribe((unit =>
{
this.gameObject.SetActive(false);
_loginPanel.gameObject.SetActive(true);
}));
}
}
提示面板
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class TipPanel : MonoBehaviour
{
public Button CloseBtn;
public Text InfoText;
void Start()
{
CloseBtn.OnClickAsObservable()
.Subscribe(Hide);
}
public void Show(string message)
{
InfoText.text = message;
this.gameObject.SetActive(true);
}
private void Hide(Unit unit)
{
InfoText.text = string.Empty;
this.gameObject.SetActive(false);
}
}
Installer
using System.Collections.Generic;
using Zenject;
public class LoginInstaller : MonoInstaller
{
public LoginPanel _loginPanel;
public RegistPanel _registPanel;
public TipPanel _tipPanel;
public User _user=new User();
public override void InstallBindings()
{
Container.Bind<LoginPanel>().FromInstance(_loginPanel).AsSingle();
Container.Bind<RegistPanel>().FromInstance(_registPanel).AsSingle();
Container.Bind<TipPanel>().FromInstance(_tipPanel).AsSingle();
Container.Bind<User>().FromInstance(_user);
}
}
public class User
{
public Dictionary<string, string> _dictionary;
public User()
{
_dictionary=new Dictionary<string, string>();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持得得之家。
沃梦达教程
本文标题为:Unity实现注册登录模块
基础教程推荐
猜你喜欢
- C#类和结构详解 2023-05-30
- winform把Office转成PDF文件 2023-06-14
- unity实现动态排行榜 2023-04-27
- C# windows语音识别与朗读实例 2023-04-27
- C#控制台实现飞行棋小游戏 2023-04-22
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- ZooKeeper的安装及部署教程 2023-01-22
- 一个读写csv文件的C#类 2022-11-06
- C# 调用WebService的方法 2023-03-09
- C# List实现行转列的通用方案 2022-11-02