学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍
以下为个人的学习简记,与诸君共论 由于U3D的官方案例Tank Tutorial中对坦克的基本操作已经有了详尽的描述,因此本文着重于面板系统、服务端基本网络框架和客户端基本网络框架的搭建
如有疑问或者描述错误的地方,欢迎各位提出或修正,讨论交流是获取和巩固知识的重要途径之一!
MySQL
管理员权限下打开powershell:
开启MYSQL服务:
net start mysql57
关闭MYSQL服务
ner stop mysql57
mysql -u root -p
[password]
创建数据库
CREATE DATABASE [DATABASE NAME];
查看数据库
SHOW DATABASE;
选择数据库
USE [DATABASE NAME];
查看表
SHOW TABLES;
查看表属性
SHOW COLUMNS FROM [TABLE NAME]:
查看表索引
SHOW INDEX FROM [TABLE NAME];
创建表
CREATE TABLE [TABLE NAME];
删除表
DROP TABLE [TABLE NAME]
清空表(清空表中所有数据)
TRUNCATE TABLE [TABLE NAME]
数据操作:
插入数据:
INSERT INTO [TABLE NAME]
SET [PROPERTY1]=[VALUE1],[PROPERTY2]=[VALUE2],..
删除数据:
DELETE FROM [TABLE NAME]
WHERE [PROPERTY] = [VALUE]
更新数据:
UPDATE [TABLE NAME]
SET [PROPERTY] = [VALUE]
WHERE [PROPERTY] = [VALUE]
创建名为game的数据库并建立两个表:
使用C#连接MySQL数据库需要引用相关的命名空间。
using MySql.Data;
using MySql.Data.MySqlClient;
建立MySQL连接
string connStr = "Database=game;DataSource=127.0.0.1;";
connStr += "User Id=root;Password=123456;port=3306;";
sqlConn = new MySqlConnection (connStr);
sqlConn.Open();
使用SQL语句,并进行数据查询,并将歘讯结果存入数据集中MySqlDataReader中。
string formatStr = "select * from user where id='{0}' and pw='{1}';";
string cmdStr = string.Format (formatStr, id, pw);
MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);
MySqlDataReader reader = cmd.ExecuteReader();
类的序列化
通常我们需要将玩家的数据保存到数据库中,这是我们可以使用序列化。
标记一个类使其可以序列化的方法:
[Serializable] // Mark a class, so the class is serializable
public class PlayerData
{
public int score = 0;
public int win = 0;
public int fail = 0;
}
序列化一个类并将其存入数据库中:
注意需要在脚本头加入
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
PlayerData playerData = new PlayerData();
IFormatter formatter = new BinaryFormatter ();
MemoryStream stream = new MemoryStream ();
formatter.Serialize(stream,playerData);
byte[] byteArr = stream.ToArray ();
string formatStr = "update player set data=@data where id='{0}';";
string cmdStr = string.Format (formatStr, id);
MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);
cmd.Parameters.Add ("@data", MySqlDbType.Blob);
cmd.Parameters [0].Value = byteArr;
cmd.ExecuteNonQuery();
既然有序列化那当然有反序列化,使用反序列化将数据还原为一个类对象:
string formatStr = "select * from player where id='{0}';";
string cmdStr = string.Format (formatStr, id);
MySqlCommand cmd = new MySqlCommand (cmdStr, sqlConn);
byte[] byteArr = new byte[1];
MySqlDataReader reader = cmd.ExecuteReader();
reader.Read();
long len = reader.GetBytes(1, 0, null, 0, 0);
byteArr = new byte[len];
reader.GetBytes(1, 0, byteArr, 0, (int)len);
reader.Close();
PlayerData playerData = null;
IFormatter formatter = new BinaryFormatter ();
MemoryStream stream = new MemoryStream (byteArr);
playerData = (PlayerData)formatter.Deserialize(stream);
下一节:搭建服务端框架