unity之NetworkManager应用初级

2023-10-31

简单学过Socket的人都知道用Socket完成一个完整的游戏非常的困难,但如果只是想简单的完成一个传输,unity已经写好了一个非常实用的东西NetworkManager


对于初学者来说他还有一个很方便的ui和上面那个脚本放在一起就会出现一个效果


这里不做介绍,可以自己尝试,我们先来简单说明一下NMS(NetworkManagerScript)的组件有什么作用。

首先看到DontDestroyOnLoad,我们的脚本是添加在某个东西上的,然而切换场景的时候就会被Destroy掉,选了勾之后运行就会出现一个来防止被摧毁。

然后是officeScene和OnlineScene这其实是提供了一个简单的场景切换功能,office指的是没有建立连接时显示的场景,Online则是连接成功之后的场景,当然你自己做服务器创建主机的时候也算。


然后是SpawnInfo这个名字是真的奇怪,居然叫卵生,我也不是很懂到底是翻译的锅还是unity官方乱来,这里面的player Prefab顾名思义就是生成一个预设体,而且是只在联网状态下生成,所以预设体必须加入一个组件

才可以正常生成。


接下来我们来说说代码页的常规操作,我们以前实用Socket来实现连接的时候非常的麻烦而且还要写异步。

Server代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;

public class NetManagerScript : MonoBehaviour {
    private byte[] buffer = new byte[1024];
    // Use this for initialization
    void Start () {
        //开启异步
        System.Action async= StartServer;
        async.BeginInvoke(CloseAsync,async);
	}
	
	// Update is called once per frame
	void Update () {
		
	}
    //开启服务器
    private void StartServer()
    {

        //打开socket服务端接口,                     ipv4              stream流式传输       Tcp协议               
        Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        //终端:IP+Port(端口)
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 8888);
        //绑定终端
        server.Bind(endPoint);
        //开启监听
        server.Listen(10);
        //开启异步监听
        server.BeginAccept(AsynvAccept,server);
        //不知道客户端会发送多少数据所以给的大一点
        
    }

    //关闭异步
    void CloseAsync(System.IAsyncResult result)
    {
        //AsyncState指的就是BeginInvoke(CloseAsync,async)的async
        System.Action async = result.AsyncState as System.Action;
        async.EndInvoke(result);
    }
    //异步接受的回调
    //异步接受客户端
    void AsynvAccept(System.IAsyncResult result)
    {
        //获取服务器对象和客户端对象
        Socket server = result.AsyncState as Socket;
        Socket client = server.EndAccept(result);
        //再次开启异步
        server.BeginAccept(AsynvAccept, server);
        
        //获取长度
        //异步接受信息
        client.BeginReceive(buffer,0,buffer.Length,SocketFlags.None, AsyncReceive, client);
        
        string msg = System.Text.Encoding.UTF8.GetString(buffer);
        Debug.Log("server ok");
    }

    //异步接受客户端信息
    void AsyncReceive(System.IAsyncResult result)
    {
        Socket client = result.AsyncState as Socket;
        //把b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity之NetworkManager应用初级 的相关文章

  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • Unity3d Terrain地形制作系列(一)

    游戏简单地形 地形制作 地形制作 第一步在场景里加载一个地形对象 第二步 我们在属性面板里找到绘制地形 然后选择Set Height 绘制高度 应该我们要制作低凹的效果 所有先让他有个高度 不然是不能实现低凹的效果 如图 我们然后选择绘制地
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • unity制作一个可以自由滑动收缩的历史记录功能。

    公司在做一款模拟经营类的卖车游戏 需要一个简单的历史记录功能 放在左上角 记录最近20条的收入 支出记录 超过2秒不动则收起 收起时展示最近的一个消息记录 用到的组件是ScrollView 使用方法可以参考我写过的一篇博客 ScrollVi
  • 1.17 从0开始学习Unity游戏开发--场景切换

    前面的所有文章我们都在一个固定的游戏场景内进行开发 在最开始介绍场景这个概念的时候就已经提及 这个场景可以是一张地图 或者是一个对战房间等等 所以显然这个场景可以有多个 并且可以从一个场景切换到另外一个场景 那么在Unity中如何进行场景切
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • Unity保存图片到相册

    Unity保存图片到Android相册 Java 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • unity dots jobSystem 记录

    Looking for a way to get started writing safe multithreaded code Learn the principles behind our Job System and how it w
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发之常见操作梳理——武器装备商店系统(NGUI版)

    游戏开发中经常出现武器商店 接下来为你们带来武器装备商店系统的具体解决办法 后续出UGUI Json版本 敬请期待 武器道具的具体逻辑 using System Collections using System Collections Ge

随机推荐

  • NTP-时间同步,(Linux / Windows)服务端搭建到时间同步配置操作-直接拿下

    一 NTP服务器搭建跟同步配置 centos8 1 安装chrony服务 centos8系统版本自带 centos8以前的版本为ntpd服务 yum install chrony 2 启动服务 Systemctl start chronyd
  • MySQL——变量与游标

    今天我们来一起学习MySQL中 的变量 系统变量与用户变量 以及什么是游标 游标如何使用 1 变量 在 MySQL 数据库的存储过程和函数中 可以使用变量来存储查询或计算的中间结果数据 或者输出最终的结果数据 在 MySQL 数据库中 变量
  • 多线程的锁

    简介 1 失败后进行锁膨胀 偏向锁 gt 轻量锁 gt 重量锁 2 偏向锁 认为没有竞争 每次都是同一个线程获取的锁 所以第一次通过CAS后 把线程id放到锁对象Mark Word后 以后每次都不需要CAS操作 3 轻量级锁 认为没有竞争
  • jdbc驱动安装以及简单测试

    最近又需要写jdbc啦 正好顺便把下载配置教程整理一下 教程分三个部分 下载jdbc驱动 配置jdbc到项目 简单连接一下数据库 1 下载jdbc驱动 下载网址 https dev mysql com downloads connector
  • 菜鸟级的Git与GitHub使用总结

    前言 这几天一直在折腾学习Git和GitHub的使用 几天下来 在网上查阅了大量的资料 总算有一些成果 作为一个已经工作两年了的菜鸟程序员 现在才来学习使用Git及github 实在忏愧 网上某大神说的好 不会使用Git和github 根本
  • 史上最牛mysql-02 (MySQL的下载、安装、配置)

    2 MySQL的下载 安装 配置 个人博客 www xiaobeigua icu 2 1 MySQL的4大版本 MySQL Community Server 社区版本 开源免费 自由下载 但不提供官方技术支持 适用于大多数普通用户 MySQ
  • chrome 该文件可能已遭到删除、移动,或者文件权限不允许进行访问

    最新 我他妈的直接拖到浏览器里 貌似就好了 下边也操作过 不知道是否有影响 草草草草 创建MyChromeDevUserData的文件夹 打开终端 输入下面的命令 需要替换路径中的yourname open n Applications G
  • springboot整合ELK快速搭建日志管理系统

    一 ELK简介 ELK是Elastic公司的三个组件 三个组件共同配合实现日志收集 Elasticsearch是实时全文搜索和分析引擎 提供搜集 分析 存储数据三大功能 是一套开放REST和JAVA API等结构提供高效搜索功能 可扩展的分
  • 动态规划解决TSP(旅行推销员问题)

    本篇文章参考自https blog csdn net hu413031273 article details 51329514 TSP问题 Travelling Salesman Problem 又译为旅行推销员问题 货郎担问题 即假设有一
  • electron报错:Refused to execute inline event handler because it violates the following Content 。。。

    electron 页面添加 onClick 点击事件报错 Refused to execute inline event handler because it violates the following Content Security
  • python读取多个文件夹/子文件夹里面的图片,并且将图片转为灰度图

    最近在做CNN 因此要大量读取图片 朋友给了这个代码给我 我觉得不错就分享一下 用了这个代码一下子就能读取所有子文件夹下所有图片了 这是dataset 我把图片全部存放在他的子文件夹里 便于区分各类图片 我的图片全部存放在子文件夹中 然而当
  • nest 非对称加密(rsa),登录密码为例

    nest import as NodeRSA from node rsa let priKey new NodeRSA b 1024 priKey setOptions encryptionScheme pkcs1 解密 export fu
  • 算法:子集和数问题N-Sum(N数之和)

    在LeetCode上有两数之和 三数之和 四数之和的问题 干脆直接写一个N数之和 问题描述 已知数组A 0 N 1 给定某数值sum 找出数组中的若干个数 使得这些数的和为sum 解决方法 设一个bool向量x 0 N 1 x i 0表示不
  • CSDN CODE 初体验

    写在前头 自从在2012年初写了一篇 一个人的Scrum之准备工作 两年过去了 how time flies 在文中我费劲千辛万苦搭好了工作环境 自己乐在其中 这是一种痛并快乐着的感觉 本以为自己就开始的一段时间熟悉环境费心些 没想到后来的
  • stm32如何设置蜂鸣器温度报警_基于 51 单片机无线 RF433M 传输胎压监测 GSM 短信报警设计...

    功能介绍 发射机组成 STC89C52RC BMP180 大气压模块 RF433Mhz 无线模块 接收机组成 STC89C52RC RF433Mhz 无线模块 SIm800CGSM 模块 蜂鸣器 按键 功能描述 两个发射分别采集大气压信息和
  • Ubuntu添加交叉编译成功

    先把arm linux那个包复制到自己建的文件夹 自己建文件夹mkdir min 复制cp r arm linux home lin min 查看路径的命令为pwd sudo vim etc profile 在最后添加 export PAT
  • 洛谷 P1746 离开中山路

    https www luogu com cn problem P1746 contestId 67264 AC代码 include
  • 数字IC手撕代码-异步复位同步释放

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 用vscode写c语言输出中文全变成问号

    重新写一份一模一样的代码
  • unity之NetworkManager应用初级

    简单学过Socket的人都知道用Socket完成一个完整的游戏非常的困难 但如果只是想简单的完成一个传输 unity已经写好了一个非常实用的东西NetworkManager 对于初学者来说他还有一个很方便的ui和上面那个脚本放在一起就会出现