Lua登录注册

使用LuaFramework_UGUI-master做登录注册

今天分享如何使用lua编程语言做登录注册,适合Lua初学者,我是一步一步做的,内容有点多,但是非常的细,也很简单易学,只要一步一步跟着做,肯定会做出来,在写Lua脚本时,一定要精力集中,认真一点,注意每一个单词的拼写,不然出错了它不会像c#一样友好细致的提醒你,希望能帮到需要的人。
在这里插入图片描述

2.登录注册步骤
2.1创建文件夹
在LuaFramework文件夹下的Examples文件夹下的Builds和Textures文件夹中,分别创建Login和Register两个文件夹,Builds下创建的文件夹是放登录注册面板预设物,Textures下创建的文件夹是放要用到的图片,
LuaFramework
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.2 修改c#脚本
找到unity中的Packager脚本,这个脚本是Lua中自带的脚本,在我们需要的时候添加代码即可
如下图,我在里面添加了登录注册的预设物文件夹和登录注册要用的图片文件夹,注意要看一下自己的图片是png还是JPG,下面我为演示了两种格式(如下代码块的红色箭头标识)

在这里插入图片描述
在这里插入图片描述
2.3、开始创建登录注册界面
分别创建Login和Register两个界面,并做成预设物,放到上面2.1中指定的文件夹
在这里插入图片描述
2.4 、写Luaj脚本,重点了(一定要认真)
2.4.1、 首先修改Lua自带的脚本logic中的Game脚本
红色框中的是要写的代码,蓝色箭头指向的是注释掉脚本中原来的代码
在这里插入图片描述
2.4.2 其次修改Lua自带的脚本logic中的CtrManager脚本

在这里插入图片描述
2.4.3.最后修改Lua自带的脚本Common中的define脚本
在这里插入图片描述
2.4.4.两个登录脚本(LoginCtrl和LoginPanel)
2.4.4.1 、LoginPanel 脚本内容

在这里local transform;
local gameObject;
--定义一个界面表
LoginPanel = {};
local this = LoginPanel ;

--启动事件--
function LoginPanel .Awake(obj)
	gameObject = obj;
	transform = obj.transform;

	this.InitPanel();
	logWarn("Awake lua--->>"..gameObject.name);

end

--初始化面板--
function LoginPanel .InitPanel()
	--找组件
	this.text= transform:FindChild("Text").gameObject;
	this.button=10;
	this.button=transform:FindChild("Button").gameObject;

	this.UserInputField=transform:FindChild("User_InputField"):FindChild("Text").gameObject;
	this.PassWardInputField=transform:FindChild("PassWord_InputField"):FindChild("Text").gameObject;
	this.RegisterBtn=transform:FindChild("Register_Button").gameObject;

	this.myImageTransform=transform:FindChild("Image");
end
function LoginPanel.Update()
	--旋转图片


    local angles = this.myImageTransform.localEulerAngles;
    --0.5秒转一次
     --angles.z =angles.z +0.5*Time.deltaTime;
     --1秒钟转30
     angles.z =angles.z +30*Time.deltaTime;
     this. myImageTransform.localEulerAngles = angles;
	logWarn("不停的调用!!!!!!!");
end
--单击事件--
function LoginPanel .OnDestroy()
	logWarn("OnDestroy---->>>");
end插入代码片

2.4.4.2 、LoginCtrl 脚本内容

--定义一个对象
LoginCtrl={};

--添加一个本地的引用
local this=LoginCtrl;
local gameObject;
local myPanelBehaviour;

--构建函数
function LoginCtrl.New()
	logWarn("这是一次伟大的尝试!!!");
	return this;
end

function LoginCtrl.Awake()
	logWarn("我们要尝试创建一个面板");
	panelMgr:CreatePanel("Login",this.OnCreateCB);
end
function LoginCtrl.OnCreateCB(obj)
	logWarn("恭喜创建成功");
	gameObject=obj;
	logWarn("物体的名字是:".. gameObject.name);

	--添加点击事件
	--找到LuaBehaviour
	myPanelBehaviour=gameObject:GetComponent("LuaBehaviour");

	myPanelBehaviour:AddClick(LoginPanel.button,this.ButtonClick);

    myPanelBehaviour=gameObject:GetComponent("LuaBehaviour");

	myPanelBehaviour:AddClick(LoginPanel.RegisterBtn,this.RegisterBtnClick);
end
--登录按钮
function LoginCtrl.ButtonClick(obj)
	--账号是否正确
	local boolean Accountifcorrectbool=false

	if LoginPanel.UserInputField:GetComponent("Text").text==""or LoginPanel.PassWardInputField:GetComponent("Text").text==""
  	then
  	LoginPanel.text:GetComponent("Text").text="账号为空";
	else
		--打开本地文件
		local AlluserDatafile=io.open("F:\\pass.txt","r")
		--读取json字符串
		local alluserdataString=AlluserDatafile:read("*a")
		--关闭文件
		AlluserDatafile:close()
		--把存储账号密码的json字符串转成对象
		local alluserdatalist=cjson.decode(alluserdataString)
		logWarn("alluserdatalist="..alluserdataString)
		for k,v in pairs(alluserdatalist) do
			if(LoginPanel.UserInputField:GetComponent("Text").text==alluserdatalist[k].Account and LoginPanel.PassWardInputField:GetComponent("Text").text==alluserdatalist[k].PassWord)
				then
				logWarn("登录成功")
				--准备跳转界面


				LoginPanel.text:GetComponent("Text").text="登录成功";

			else
				LoginPanel.text:GetComponent("Text").text="账号或密码有误";
			end
		end
	end

end

       --按照指定字符对字符串进行拆分
function string.split(input,delimiter)
	--转成字符串
	input=tostring(input)
	delimiter=tostring(delimiter)
	if(delimiter=='')then return false end
	--定义一个位置初始值为0 定义一个表
	local pos,arr =0,{}
	--匿名函数
	for st,sp in function()
		return string.find(input,delimiter,pos,true)--查找对应的字符串 返回字符串的下标
	end
	do
	table.insert(arr,string.sub(input,pos,st-1))
	pos=sp+1
   end
   table.insert(arr,string.sub(input,pos))--在arr尾部插input内容
   return arr--返回一个表
end

  --打开注册点击事件
  function LoginCtrl.RegisterBtnClick(obj)
  	
   destroy(gameObject)

   local ctrl = CtrlManager.GetCtrl(CtrlNames.Register);
    if ctrl ~= nil and AppConst.ExampleMode == 1 then
        ctrl:Awake();
    end
 end

2.4.5、两个注册脚本(RegisterCtrl和RegisterPanel)
2.4.5.1、RegisterPanel脚本内容

local transform;
local gameObject;

RegisterPanel = {};
local this = RegisterPanel ;

--启动事件--
function RegisterPanel .Awake(obj)
	gameObject = obj;
	transform = obj.transform;

	this.InitPanel();
	logWarn("Awake lua--->>"..gameObject.name);
	
end

--初始化面板--
function RegisterPanel .InitPanel()
	this.text= transform:FindChild("Text").gameObject;
	this.mybutton=10;
	this.mybutton=transform:FindChild("Register_Button").gameObject;

	this.UserInputField=transform:FindChild("Register_user_InputField"):FindChild("Text").gameObject;
	this.PassWardInputField=transform:FindChild("Register_Pwd_InputField"):FindChild("Text").gameObject;
	this.SurePassWardInputField=transform:FindChild("Register_SurePwd_InputField"):FindChild("Text").gameObject;

	this.BackBtn=transform:FindChild("Back_Button").gameObject;
end

--单击事件--
function RegisterPanel .OnDestroy()
	logWarn("OnDestroy---->>>");
end

2.4.5.2、RegisterCtrl脚本内容

--定义一个对象
RegisterCtrl={};

--添加一个本地的引用
local this=RegisterCtrl;
local gameObject;
local myPanelBehaviour;
cjson=require "cjson"
--构建函数
function RegisterCtrl.New()
	logWarn("这是一次伟大的尝试!!!");
	return this;
end

function RegisterCtrl.Awake()
	logWarn("我们要尝试创建一个面板");
	panelMgr:CreatePanel("Register",this.OnCreateCB);
	destroy(gameObject);
end
function RegisterCtrl.OnCreateCB(obj)
	logWarn("恭喜创建成功");
	gameObject=obj;
	logWarn("物体的名字是:".. gameObject.name);

	--添加点击事件
	--找到LuaBehaviour
	myPanelBehaviour=gameObject:GetComponent("LuaBehaviour");
	myPanelBehaviour:AddClick(RegisterPanel.mybutton,this.ButtonClick); 

    myPanelBehaviour=gameObject:GetComponent("LuaBehaviour");

	myPanelBehaviour:AddClick(RegisterPanel.BackBtn,this.BackBtnClick);
end
--注册按钮
function RegisterCtrl.ButtonClick(obj)
	--所有用户信息
	local AllUserDataList={}
	--是否有相同账号
	local boolean isoverFind=false


   if RegisterPanel.UserInputField:GetComponent("Text").text==""or RegisterPanel.PassWardInputField:GetComponent("Text").text==""or RegisterPanel.SurePassWardInputField:GetComponent("Text").text==""
      then
	   RegisterPanel.text:GetComponent("Text").text="账号或密码为空!!!";
	  else
		--打来路径,并给里面的内容复制
		local datafile=io.open("F:\\pass.txt","w+")
		--读取文件中的所有内容
		local userdataJsonString=datafile:read("*a")
		--关闭文件
		datafile.close()
		--解析json
		--如果字符串的长度大于0
		if(#userdataJsonString>0)then
			--把json 转成对象列表
			local userdataList=cjson.decode(userdataJsonString)
			--遍历表
			for k,v in pairs(userdataList) do
				--把上次用户的信息写进表里 
				table.insert(this.AllUserDataList,userdataList[k])
				--如果账号相同
				if (RegisterPanel.UserInputField:GetComponent("Text").text==userdataList[k].Account) then
					--若有相同用户名 注册失败哦
					isoverFind=false
					break
				else
				isoverFind=true
				end
			end
		end
	  if(isoverFind==true or #userdataJsonString==0) then--注册成功
		 currentData={Account=RegisterPanel.UserInputField:GetComponent("Text").text,PassWord=RegisterPanel.PassWardInputField:GetComponent("Text").text}
		 table.insert(AllUserDataList,currentData)
		--把存储所有用户信息的表 转成jsson字符串 等待其他地方解析使用
		AlluserCjsonString=cjson.encode(AllUserDataList)
		--把json字符串以io形式存储到本地
		local alldatafile=io.open("F:\\pass.txt","w")
		--把json字符串写入文件
		alldatafile:write(AlluserCjsonString)
		--关闭文件
		alldatafile.close()
		RegisterPanel.text:GetComponent("Text").text="注册成功!!!";


	 else
		RegisterPanel.text:GetComponent("Text").text="注册失败!!!";
	  end

    end
end

  function readAll(file)
  	--读取全部文件
    local content=file:read("*all")
    file:close()
    return content
  	
  end
  --按照指定字符对字符串进行拆分
function string.split(input,delimiter)
	--转成字符串
	input=tostring(input)
	delimiter=tostring(delimiter)
	if(delimiter=='')then return false end
	--定义一个位置初始值为0 定义一个表
	local pos,arr =0,{}
	--匿名函数
	for st,sp in function()
		return string.find(input,delimiter,pos,true)--查找对应的字符串 返回字符串的下标
	end
	do
	table.insert(arr,string.sub(input,pos,st-1))
	pos=sp+1
   end
   table.insert(arr,string.sub(input,pos))--在arr尾部插input内容
   return arr--返回一个表
end


  --返回登录点击事件
  function RegisterCtrl.BackBtnClick(obj)

  	destroy(gameObject)
  	--返回登录
  	local ctrl = CtrlManager.GetCtrl(CtrlNames.Login);
    if ctrl ~= nil and AppConst.ExampleMode == 1 then
        ctrl:Awake();
    end

  end

2.4.6、运行测试,在每次修改Lua脚本时都要Resources一下,如果没有配置Android,就用下面的Windows

温馨提示:如果不想每次都Resources可以修改c#脚本AppConst,把下面红线标注的地方true改成false
在这里插入图片描述
3.这样一个简单的使用LuaFramework_UGUI-master制作登录注册就完成了。
生命不止,学习不止。

猜你喜欢

转载自blog.csdn.net/weixin_44078368/article/details/85015127
今日推荐