代码、H5游戏源代码
1、游戏难度:游戏软件开发多种游戏难度,用户可以选择适合自己的难度玩游戏熬玩游戏源码,保证用户的游戏体验。
2、房间创建:游戏代码支持用户创建游戏卧室,房屋创建成功后,可以请好友走进卧室,或者等待用户主动踏入卧室。3、语音沟通
:H5游戏源码实现游戏卧室语音沟通熬玩游戏源码,方便用户随时表达意见、互动。
4.用户观看:用户可以选择卧室观看战斗,观看其他用户的游戏过程,并从游戏经验中学习。
5、礼品奖励:实现用户小费功能,在游戏过程中,可以选择喜欢的用户赠送礼物。
6、积分排名:系统根据用户的游戏结果结算积分,根据积分对系统中的用户进行排名。
以上只是基础功能,更多功能可联系客服看演示
二、公司游戏代码优势
1、多年游戏软件开发技术积累,开发实力雄厚。
2、游戏代码开发团队完备,开发人员经验丰富。
3、丰富的游戏代码合作经验,为多家公司提供游戏开发合作。
4.严格的报价机制,根据报价的发展时间,公平合理。
5.实体开发公司支持客户参观公司。
3、免费售后H5游戏源码
1、实现游戏软件开发的全球化部署,提供源码建设和部署服务。
2、培训游戏软件开发技术,帮助客户更快理解系统技术。
3、为H5游戏源码提供远程技术协助,协助数据迁移。
4、提供所有资料单证及售后在线客服。
实战:用户登录和注册
至此,服务端框架的底层功能已经完成,所以目前的测试方式只是在main函数中写一些测试代码游戏下线源码,并没有真正与Unity结合起来,所以我们就跟Unity结合起来,真正做一个完整的登录和注册过程。
既然是登录和注册,那么肯定有登录和注册两个契约:
我们创建一个新的 LoginMsg 脚本:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class MsgRegister : MsgBase
{
public MsgRegister()
{
protoName = "MsgRegister";
}
//客户端
public string id = "";
public string pw = "";
//服务器返回 -0成功 -1失败
public int result = 0;
}
public class MsgLogin : MsgBase
{
public MsgLogin()
{
protoName = "MsgLogin";
}
//客户端
public string id = "";
public string pw = "";
//服务器返回 -0成功 -1失败
public int result = 0;
}
public class MsgKick : MsgBase
{
public MsgKick()
{
protoName = "MsgKick";
}
//下线原因
public int reason = 0;
}
下一步是处理合同:
我们将其命名为:LoginMsgHandle。 请注意游戏下线源码,即使脚本被称为 this,它仍然是 EventHandler 的复合类。 不要被Unity开发中创建脚本的方式所迷惑。
登录、注册和离线。 下线用于两个客户端同时登录一个账户时:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public partial class MsgHandler
{
//注册协议处理
public static void MsgRegister(ClientState c, MsgBase msgBase)
{
MsgRegister msg = (MsgRegister)msgBase;
//执行数据库语法尝试注册
if (DbManager.Register(msg.id, msg.pw))
{
DbManager.CreatPlayer(msg.id);
msg.result = 0;
}
else
{
msg.result = 1;
}
//将结果返回给客户端
NetManager.Send(c, msg);
}
//登录协议处理
public static void MsgLogin(ClientState c, MsgBase msgBase)
{
MsgLogin msg = (MsgLogin)msgBase;
//密码校验
if (!DbManager.CheckPassword(msg.id, msg.pw))
{
msg.result = 1;
NetManager.Send(c, msgBase);
return;
}
//如果已经在线,并在此客户端上又尝试登录
if (c.player != null)
{
msg.result = 1;
NetManager.Send(c, msgBase);
return;
}
//如果其他客户端登录,踢下线
if (PlayerManager.isOnline(msg.id))
{
//发送踢下线协议
Player other = PlayerManager.GetPlayer(msg.id);
MsgKick msgKick = new MsgKick();
msgKick.reason = 0;
other.Send(msgKick);//协议发送
//断开连接
NetManager.Close(other.state);
}
//获取玩家数据
PlayerData playerData = DbManager.GetPlayerData(msg.id);
if (playerData == null)
{
msg.result = 1;
NetManager.Send(c, msg);
return;
}
//构建player
Player player = new Player(c);
player.id = msg.id;
player.data = playerData;
PlayerManager.AddPlayer(msg.id, player);
c.player = player;
//返回协议
msg.result = 0;
player.Send(msg);
}
public static void OnDisconnect(ClientState c)
{
Console.WriteLine("Close");
//Player 下线
if (c.player != null)
{
//保存数据
DbManager.UpdatePlayerData(c.player.id, c.player.data);
//移除
PlayerManager.RemovePlayer(c.player.id);
}
}
}
至此,服务器的功能就基本写完了。 接下来,我们需要进入Unity。 要编写客户端的功能,首先要搭建一个场景。 场景布局如下:
2个输入框和一个登录注册按钮。
创建一个新的测试脚本文件:
过程也是先连接服务器,然后监听一些反弹方法。 首先,有一些连接服务器和数据处理的技巧。 这些技巧前面章节都写了,所以这次我们直接照搬:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Linq;
using TMPro;
public class test : MonoBehaviour
{
private void Start()
{
NetManager.Connect("127.0.0.1", 8888);
}
private void Update()
{
NetManager.Update();
}
}
另外,复制登录和注册合同:
在服务器启动的同时运行这个脚本,发现连接没有问题。 接下来要做的就是编写我们的登录注册合约:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Linq;
using TMPro;
public class test : MonoBehaviour
{
public TMP_InputField idInput;
public TMP_InputField pwInput;
private void Start()
{
NetManager.Connect("127.0.0.1", 8888);
NetManager.AddMsgListener("MsgMove", OnMsgMove);
NetManager.AddEventListener(NetManager.NetEvent.ConnectSucc, OnConnectSucc);
NetManager.AddEventListener(NetManager.NetEvent.ConnectFail, OnConnectFail);
NetManager.AddEventListener(NetManager.NetEvent.Close, OnConnectClose);
}
void OnConnectSucc(string err)
{
Debug.Log("连接成功...");
}
void OnConnectFail(string err)
{
Debug.Log("连接失败...");
}
void OnConnectClose(string err)
{
Debug.Log("连接关闭...");
}
//发送注册协议
public void OnRegister()
{
MsgRegister msg = new MsgRegister();
msg.id = idInput.text;
msg.pw = pwInput.text;
NetManager.Send(msg);
Debug.Log(msg.protoName);
Debug.Log(msg.id);
Debug.Log(msg.pw);
}
//收到注册协议
public void OnMsgRegister(MsgBase msgBase)
{
MsgRegister msg = msgBase as MsgRegister; if (msg.result == 0)
{
Debug.Log("注册成功");
}
else
{
Debug.Log("注册失败!");
}
}
//发送登录协议
public void OnLoginClick()
{
MsgLogin msg = new MsgLogin();
msg.id = idInput.text;
msg.pw = pwInput.text;
NetManager.Send(msg);
}
//收到登录协议
public void OnMsgLogin(MsgBase msgBase)
{
MsgLogin msg = msgBase as MsgLogin; if (msg.result == 1)
{
Debug.Log("登录成功");
}
else
{
Debug.Log("登录失败");
}
}
//踢下线
void OnMsgKick(MsgBase msgBase)
{
Debug.Log("被踢下线");
}
private void Update()
{
NetManager.Update();
}
然后对输入框进行参数化:
我们先尝试运行一下,先输入错误的用户名和密码,然后按登录按钮:
发现服务器已经调用成功,然后我们用正确的账户名和密码登录:
然后尝试再次注册:
如果写入现有帐户:
相反,写入未注册的帐户:
然后查看数据库的内容:
发现一个错误。 客户端没有复制出状态信息。 经检查,合同名称有误:
编辑一下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Linq;
using TMPro;
public class test : MonoBehaviour
{
public TMP_InputField idInput;
public TMP_InputField pwInput;
private void Start()
{
NetManager.Connect("127.0.0.1", 8888);
NetManager.AddMsgListener("MsgMove", OnMsgMove);
NetManager.AddMsgListener("MsgLogin", OnMsgLogin);
NetManager.AddMsgListener("MsgRegister", OnMsgRegister);
NetManager.AddEventListener(NetManager.NetEvent.ConnectSucc, OnConnectSucc);
NetManager.AddEventListener(NetManager.NetEvent.ConnectFail, OnConnectFail);
NetManager.AddEventListener(NetManager.NetEvent.Close, OnConnectClose);
}
public void Send()
{
MsgMove msgMove = new MsgMove
{
x = 10,
y = 2,
z = -110
};
NetManager.Send(msgMove);
}
public void OnMsgMove(MsgBase msgBase)
{
MsgMove msg = msgBase as MsgMove;
Debug.Log(msg.protoName);
Debug.Log(msg.x);
Debug.Log(msg.y);
Debug.Log(msg.z);
}
void OnConnectSucc(string err)
{
Debug.Log("连接成功...");
}
void OnConnectFail(string err)
{
Debug.Log("连接失败...");
}
void OnConnectClose(string err)
{
Debug.Log("连接关闭...");
}
//发送注册协议
public void OnRegister()
{
MsgRegister msg = new MsgRegister();
msg.id = idInput.text;
msg.pw = pwInput.text;
NetManager.Send(msg);
}
//收到注册协议
public void OnMsgRegister(MsgBase msgBase)
{
MsgRegister msg = msgBase as MsgRegister;
if (msg.result == 0)
{
Debug.Log("注册成功");
}
else
{
Debug.Log("注册失败!");
}
}
//发送登录协议
public void OnLoginClick()
{
MsgLogin msg = new MsgLogin();
msg.id = idInput.text;
msg.pw = pwInput.text;
NetManager.Send(msg);
}
//收到登录协议
public void OnMsgLogin(MsgBase msgBase)
{
MsgLogin msg = msgBase as MsgLogin;
Debug.Log(msg.result);
if (msg.result == 1)
{
Debug.Log("登录成功");
}
else
{
Debug.Log("登录失败");
}
}
//踢下线
void OnMsgKick(MsgBase msgBase)
{
Debug.Log("被踢下线");
}
private void Update()
{
NetManager.Update();
if (Input.GetKeyDown(KeyCode.A))
{
Send();
}
}
结果如下:
好好享受!!!
本例客户端和服务端源码下载方式:公众号可回复服务端开发。
…结尾…
扫描二维码