unity python服务器_Unity如何连接服务器: 一个简单的例子

本身是用来做客户端的通用游戏引擎, 要建立网络连接的话, 其实需要使用的是C#本身的网络和线程模块, 即.Net. & .. 本文中我做了一个简单的例子, 适合那些需要做Unity客户端连接服务器功能的人入门.
整体项目
客户端: 我做的项目主要是一个简单的Demo, 画面上只有三个按钮和两个输入框, 通过点击按钮可以实现相应的操作.
服务端: 服务端是一个写的服务器. 这个部分不是我本文的重点, 大家可以参考别的网上文章, 了解如何写一个C++, 或者Java服务器, 无论什么语言写的服务器都是可以与Unity进行交互的.
UnityDemo
login点击后, 上显示了发出的消息
显示成功登陆
下载项目后, 使用Unity导入, 可以看到文件夹中有六个脚本, 其中和是主要的脚本, Json开头的脚本不是重点, 他们只是Json编码解码相关的一个库(文中我是直接使用的这个老外写的纯C#版本Json ), Json的编码和解析也不是本文重点, 只要找到一个库能用即可.
后续补充: Json的工具库现在推荐使用出品的json.NET. 下载地址, 在.1中, 请使用其中的Bin\net20\.Json.dll这个大小513KB的DLL(此处我也在微云存了一个供大家快速下载), 由于用的还是.NET2.0版本, 因此要用老的.
脚本一览
学习步骤
下载客户端和服务端, 运行起来. 之后主要学习.cs和.cs这两个脚本的内容(两个脚本并不复杂), 最关键的部分是如何建立连接, 建立后台线程, 发送和接收数据, 以及Json相关的字典操作.
脚本1: .cs
using ;
【unity python服务器_Unity如何连接服务器: 一个简单的例子】using ..;
using .Net.;
using .Text;
using .;
using ;
using Tiny;
class:{
= "127.0.0.1";
int= 5000;
= "chen";
= "123";
;
; // C#中采用的方式, 可以类比于网络编程中的
;
byte[]= new byte[1024]; // 接收消息的
= "";
bool= false;
void Start() {
void () {
dict = new ()
{"code", "exit"}
};
((dict)); // 退出的时候先发一个退出的信号给服务器, 使得连接被正确关闭
Debug.Log("exit sent!");
();
// ----------------------------------------
void Login() {
();
dict = new ()
{"code", "login"},
{"", },
{"", }
};
((dict));
Debug.Log("start!");
void (int score, int ) {
dict = new ()
{"code", "gds"},
{"score", score.()},
{"", .()}
};
((dict));
// --------------------------------------------
void () {
try {
= new (); // 传入函数作为的任务
. = true;
= new (, );
= .();
.Start(); //while loop
= true;
} catch ( e) {
Debug.Log (e.());
();
void () { // 这个函数被后台线程执行, 不断地在while循环中跑着
Debug.Log ("...");
if (!) // stop the
;
int= 0;
while ( && .) {
try {
= .Read(, 0, .);
= .ASCII.(, 0, );
.Flush();
Debug.Log();
= "";
} catch ( e) {
Debug.Log (e. ());
();
void ( )
byte[]= .ASCII.();
if (.)
.Write(, 0, .);
void () {
if () {
. (); // 这个其实是多余的, 因为 = false后, 线程while条件为假自动停止
.Close ();
.Close ();

unity python服务器_Unity如何连接服务器: 一个简单的例子

文章插图
= false;
= "";
// ---------------------util----------------------
//dict to to json and wrap it with \r\n as
( dict)
json = Json.(dict);
= "\r\n" + json..() + "\r\n";
=+ json;
Debug.Log(" :" + );
;
//data, 注意要解决粘包的问题, 这个程序写法同中的相应模块一模一样