首页 >> 大全

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

2023-09-20 大全 26 作者:考证青年

本身是用来做客户端的通用游戏引擎, 要建立网络连接的话, 其实需要使用的是C#本身的网络和线程模块, 即.Net. & .. 本文中我做了一个简单的例子, 适合那些需要做Unity客户端连接服务器功能的人入门.

整体项目

客户端: 我做的项目主要是一个简单的Demo, 画面上只有三个按钮和两个输入框, 通过点击按钮可以实现相应的操作.

服务端: 服务端是一个写的服务器. 这个部分不是我本文的重点, 大家可以参考别的网上文章, 了解如何写一个C++, 或者Java服务器, 无论什么语言写的服务器都是可以与Unity进行交互的.

Unity Demo

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 ;

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 ();

_服务器搭建python环境_python做服务器接口

= 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, 注意要解决粘包的问题, 这个程序写法同中的相应模块一模一样

// 参考

( raw)

= "";

= raw;

if (raw.(0, 2).("\r\n"))

int index = raw.("\r\n", 2);

int = int.Parse(raw.(2, index - 2 + 1)); // 注意, C#'s takes start and as args

if (raw. >= index + 2 + )

= raw.(index + 2, );

= raw.(index + 2 + );

Json.>();

脚本2: .cs

using .;

using ..;

using ;

using .UI; //using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句。

class : {

;

;

;

// Use this for

void Start () {

= ();

// is once per frame

void () {

void () {

.Login();

void () {

int score = int.Parse(.text);

int = int.Parse(.text);

.(score, );

void ()

int score = int.Parse(.text);

int = int.Parse(.text);

.(score, );

.Quit();

后续持续开发优化建议

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了