Unity 网络部分

unity网络编程学习 前言 最近在学习unity自身封装的网络功能,在游戏物体上挂上Network组件,使其成为网络中的一份子,就像这里所说的,Unity网络协议本身是一个比较高层的网络协议,他并不是独立存在的,而是与引擎的游戏对象结合在一起,所以在Unity中不存在单纯的“发送给服务器”或“发送给客户端的”网络消息,不同的游戏对象之间的通信是独立的,就好像每个游戏对象都有一个独立的通信管道。 在游戏中,对象经常发 阅读详情

Unity中使用peerType表示网络连接的状态(NetworkPeerType),共分四种:未连接(disconnected)、连接中(connecting)、服务器(server)、客户端(client)。

 

通常,网络中,我们需要服务器端和客户端。在服务端中,当peerType处于disconnected 状态时, 需要创建服务,创建服务结束后,peerType 将处于 server 状态。在客户端,当peerType 处于 disconnected 状态时,需要做的是连接来着服务端的服务,连接成功后,peerType 处于 client 状态。 当处于server 和 client 状态后,我们可以断开服务或者连接。  这些动作的执行,在Network中,都有提供方法。分别是:InitializeServer()、connect()、disconnect().

做完这些,服务端和客户端便连接成功了。

 

但是,这时,还只是能够在服务端,看到 客户端的连接信息,但客户端与客户端之间不能够有任何的通信, 相互之间看不到对方的信息。那么怎样才能实现,一个客户端能够看到另一个客户端的消息呢?其实,消息的传递是通过,服务器的转发实现的。首先,客户端将消息发送给服务器,然后,由服务器再发送给其它客户端。

 

为了让客户端发送的消息能够被服务器接受到,我们需要在 连接脚本 的对象上,添加一个 NetworkView 组件。使用NetworkView.RPC()发送消息。

 

1、简单的server/client连接实例

首先,建立服务器端脚本,并且添加为 摄像机的组件。

server.cs

 

using UnityEngine;
using System.Collections;

public class server : MonoBehaviour {
	
	int Port = 10000;
	string Message ="";
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
	
	void OnGUI() {
		
		switch(Network.peerType) {
			
		case NetworkPeerType.Server:
			OnServer();
			break;
		case NetworkPeerType.Client:
			break;
		case NetworkPeerType.Disconnected:
			StartServer();
			break;
		case NetworkPeerType.Connecting:
			break;
		}
	}
	
	void StartServer() {
		
		if(GUILayout.Button("创建本机服务")) {
			
			NetworkConnectionError error = Network.InitializeServer(10, Port, false);
			Debug.Log("连接状态" + error);
		}
	}
	
	void OnServer() {
		
		GUILayout.Label("服务器创建完毕, 等待客户端连接");
		
		int length = Network.connections.Length;
		for(int i = 0; i< length; i++) {
			
			GUILayout.Label("连接服务器客户端ID" + i);
			GUILayout.Label("连接服务器客户端ip" + Network.connections[i].ipAddress);
			GUILayout.Label("端口号" + Network.connections[i].port);
		}
		
		if(GUILayout.Button("断开服务器")) {
			
			Network.Disconnect();
		}
	}
	
}

 

在发布前,先设置 project setting->player setting->run in background.

 

然后,再制作一个client端。

client.cs

using UnityEngine;
using System.Collections;

public class client1 : MonoBehaviour {
	
	string IP = "127.0.0.1";
	int Port = 10000;
	string inputMessage = "请输入信息";
	
	string Message = "";
	Vector2 scrollPos = Vector2.zero;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
	
	void OnGUI() {
		
		switch(Network.peerType) {
			
		case NetworkPeerType.Disconnected:
			StartConnect();
			break;
		case NetworkPeerType.Client:
			OnClient();
			break;
		case NetworkPeerType.Server:
			break;
			
		case NetworkPeerType.Connecting:
			break;
		}
	}
	
	void StartConnect() {
		
		if(GUILayout.Button("连接服务器")) {
			
			NetworkConnectionError error = Network.Connect(IP, Port);
			Debug.Log("连接状态:" + error);
		}
	}
	
	void OnClient() {
		
		scrollPos = GUILayout.BeginScrollView(scrollPos, GUILayout.Width(200), GUILayout.Height(500));
		
		GUILayout.Box(Message);
		
		GUILayout.BeginHorizontal();
		
		inputMessage = GUILayout.TextArea(inputMessage);
		
		if(GUILayout.Button("发送消息")) {
			
			networkView.RPC("RequestMessage", RPCMode.Others, inputMessage);
		}
		
		GUILayout.EndHorizontal();
		
		if(GUILayout.Button("断开连接")) {
			
			Network.Disconnect();
			Message = "";
		}
		
		GUILayout.EndScrollView();
	}
	
}


 

下面链接可能能够帮你做一个更好的网络小游戏。LOL...

http://www.paladinstudios.com/2013/07/10/how-to-create-an-online-multiplayer-game-with-unity/

多人网络实时sdk

http://appwarp.shephertz.com/build-unity3d-multiplayer-game/

 

Unity与C++网络游戏开发实战:基于VR、AI与分布式架构 【1.0】 本书给大家介绍一个智能系统整体开发的知识体系和流程方法。本章是本书开始篇章,将为大家介绍掌握客户端必要的基础知识,以及基于客户端开发的框架和工具链——Unity。现在就让我们开始关于Unity引擎的学习吧。Unity是一个在当今图形开发领域占有重要地位的图形引擎。Unity引擎以其先进的构造理念和长久的发展,如今在游戏和图形开发领域中是开发者使用最多、工作效率最高,以及最适合入门的一门开发引擎。Unity引擎平台有哪些组成部分呢?下面将详细介绍。目前,Unity是在全球范围内应用最广泛的3D引擎。 阅读详情

相关推荐

DPARSF高级版 vs 基础版怎么选?没有T1数据也能做fMRI分析吗?

本文深度对比了DPARSF高级版与基础版在fMRI分析中的核心差异与适用场景,特别针对无T1数据的情况提供了实战解决方案。高级版依赖T1像实现高精度配准,适合需要精确解剖定位的研究;基础版则无需T1数据,适用于功能连接等相对空间要求不高的分析。文章还提供了版本选择决策树和常见问题解决方案,帮助研究者根据实际需求做出最优选择。

weixin_42526087的博客 132

Network的快速了解

Network Network类是unity里实现网络操作的核心类,并提供一系列静态方法来实现网络链接的操作,这个类配置了网络接口和所有网络参数。可以使用它来设置一个服务器或连接到一个服务器并有一些辅助函数来帮助你完成这些功能。 初步使用的方法 InitializeServer(),初始化服务器,两个重载的方法。 public static NetworkConnectionEr...

OnTime的博客 1822

金蝶云苍穹-插件开发(一)加载数据

此系列博客是进行金蝶云苍穹开发时的插件开发的教程,一是在明年要是还要参加软件杯金蝶A6赛题的话,可以看此系列教程的博客来进行复习,同时如果要是我实验室的学弟学妹要参加的话,我这个系列的博客可以给他们提供学习参考,因为插件开发学习的路上很艰难,我学习的时候,能参照的讲解少,要花费大量工夫去猜测去调试才能学会那些语法。在插件开发上,希望我这个系列的博客能帮助到别人。这个系列的博客只专门讲解插件开发,基本的那些金蝶云苍穹的知识点在这里不多作讲解。

二狗mao的博客 3588

Unity Network初窥 内置的网络组件使用整理

版本:unity 5.3.4  语言:C#   这边主要参考了雨松大的文章(没找到原文,大家自己找找看看吧)。   听说现在Unity最新的版本已经用了一种新的网络组件,不过公司的项目都还是老项目,然后主程大让我看一下Network相关的内容,我正好把一些使用的方法整理一下。   首先这个方法: Network.peerType 这个方法可以获取当前端的状态,一共有四种状态,一

暗光之痕的博客 1980

Origin绘制带差异显著性标记的分组均值条形图|科研论文图表教程(附数据格式模板)

传统柱状图虽能呈现组间均值差异,却隐藏个体数据分布;散点图虽能展示原始数据,却难以直观凸显统计显著性。带差异显著性(*)的分组均值条形图——它以“双层叙事”的创新设计,同时呈现群体特征与个体差异。

weixin_50236590的博客 1493

基于Python的专利数据爬虫开发指南:从入门到实战

本文将详细介绍如何使用Python开发一个高效的专利数据爬虫系统,涵盖最新技术栈如Playwright、异步IO、反反爬策略等。文章包含完整代码实现、性能优化技巧及法律合规建议,帮助读者构建可投入生产的专利数据采集解决方案。专利数据是技术创新的重要指标,包含技术细节、申请人信息、法律状态等宝贵信息。企业竞争情报分析技术趋势预测研发方向决策知识产权战略制定。

2201_76125261的博客 1588

Unity学习系列笔记6:多人游戏进阶篇

这篇笔记学习三个问题:多人游戏的level loading,连接测试以及带宽优化。 一.关卡装载。 必须了解的函数: 1.RequireComponent() //JavaScript实例 // Mark the PlayerScript as requiring a rigidbody in the game object. //指定此script绑定的对象必须包含rigid

㊰ ❀ ☀ ☁ ☂ ☃ 2697

全球气候模式降尺度方法总结及其代码实现

简介总结各类型气候模式降尺度方法

WW、forever的博客 1万+

unity 局域网(Network)同步

先附上Network常用方法和生命周期函数: Network.InitializeServer(int connettions,int Port,bool useNat):该函数用于初始化服务器。Connections是最大连接数, Port是服务器监听的端口号,useNat表明是否使用Nat穿透。返回枚举类型NetworkConnectionError。返回NetworkConnectionE...

qq_578147153的博客 3982

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 891

Flutter:如何在Android中实现串口通信调试

本文介绍如何通过flutter_libserialport插件在Flutter中实现串口通信调试。

sg_knight的专栏 6098

【Unity】网络部分概览

解释一下网络中服务器和客户端的设置,希望能够帮到刚接触这一块的人。 对于服务器和客户端的概念就不再做解释了。 正文 首先要明确的概念是一个变量只能由服务器传给客户端或者相反,而不能同时操作。这也比较好理解因为Unity实现网络的时候仿佛没有时间戳的概念,这样子在两端变量名不一样的时候只能通过一方覆盖另一方面(或者说数据包一直是单向在发...

bangce8949的博客 106

YOLO26改进策略【损失函数篇】| AAAI 2025 SD Loss,基于目标尺度动态调整尺度损失和位置损失的影响系数,减少 IoU 标签波动

在红外小目标检测任务里,基于交并比的损失存在波动问题,像边界框(BBox)标签的IoU损失波动最高可达86%,较小目标的IoU损失稳定性更差,严重影响模型稳定性和回归效果。同时,现有损失函数没有充分考虑不同目标尺度下对尺度和位置的敏感度差异,,并且掩码标签的位置损失在处理漏检物体时难以收敛,容易产生误报。这些问题限制了模型在不同尺度目标上的检测性能,为解决这些问题,提出了损失函数。

Limiiiing的博客 396

Unity Xlua热更新框架(九):网络部分

Unity Xlua热更新框架

weixin_42264818的博客 1294

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

unity5.3 to unity5.4 网络部分修改

Lobby Manager:  public override void OnMatchCreate(bool success, string extendedInfo, MatchInfo matchInfo) { _currentMatchID = (ulong)matchInfo.networkId; base.OnMatchCreate(success, extendedInf

zhaorui56的专栏 1276

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Unity网络编程指南

网络编程指南

2302_76776557的博客 1565

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Unity网络同步框架 - Nakama研究(三)】

Nakama是一个网络同步库,兼容很多游戏引擎,名字取自于日语伙伴,底层由Go开发,所以性能上有保证(可以对比其他流行的网络框架)。并且拥有大量已经开发好而且经过检验的功能(聊天,排行榜,群组,房间,身份验证,存储,好友等等),但是之前在网络上,甚至官网上找到的博客或者文章要么是性质雷同,要么就是空谈。以下的改变主要是用于网上找不到,AI提供不准确,论坛全英文,翻找资料麻烦的基础上提供的。

剑气破云出,摧日裂苍穹 2100

Unity报错“No valid Unity Editor license found“解决方法

1首先我们删除此路径下的文件- Windows: C:\ProgramData\Unity (可能需要显示隐藏文件夹)2. 重新打开unityhub在“管理许可证页面”激活新的许可证。

ldengdu的博客 1万+

Unity加载网络图片为Image贴图,并保存本地。

1.效果展示 2.代码部分 using System; using System.Collections; using System.IO; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class wwwLoadImag : MonoBehaviour { [Header("...

weixin_42540271的博客 6025

googleprotobuf不够灵活?自定义googleprotobuf+unity全方案来了

unity网络优化遇到问题而修改protobuf源码,打包引入,并修复unity引入自己打包的protobuf.dll

abuzhiqusha的博客 1153

Unity多玩家游戏和网络功能

本人之前翻译的Unity 5.2 的多玩家游戏和网络功能部分的文档,全部提交到了蛮牛译馆的Unity文档栏目中,请在这个链接里查看。 有任何意见或建议,欢迎留言。这里或译馆里都可以。

yubo112002的专栏 509

Unity简单搭建小服务器和客户端-----------客户端部分

分为两个Unity项目 一个是SeverTest01 用于Unity的服务器部分 --------- 关于服务器部分的 一个是SocketTest01 用于Unity的客户端部分 初步学习只有简单的服务器和客户端连接,并且发送消息回复,算是一个学习记录 分为如下几个脚本 依然还是 代码展示部分 using System.Collections; using System.Collec...

hennysky的博客 2443

【亲测免费】 Mirror网络库教程:从零开始搭建高效Unity多人游戏网络架构

Mirror是一款针对Unity引擎的高性能开源网络解决方案,旨在简化多人在线游戏的开发过程。本教程将带你深入了解Mirror的核心组件,通过三个关键部分:**项目的目录结构及介绍**、**项目的启动文件介绍**、以及**项目的配置文件介绍**,帮助你快速上手并有效利用该框架。 ## 1. 项目的目录结构及介绍 Mirror的GitHub仓库结构简洁明了,主要关注点在于以下几个核心目录: -...

gitblog_00983的博客 1139

unity 许可证即将到期_了解Unity即将推出。

unity 许可证即将到期Well its been a long time coming but we’re finally working on a totally new learning section on the official Unity site. Our existing Support section is very out of date, and we made a co...

culiao6493的博客 2551
上一篇: Unity3d 与 mysql连接 解决方法
下一篇: unity NGUI基础
Rechard0121
博客等级 码龄15年 4粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值