热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Unity3DARPG网络游戏编程实践]1——初识unity网络编程

[Unity3DARPG网络游戏编程实践]想杀人了,百度了半天也不知道本地服务怎么写,结果资源里的服务器竟然可以用了~~~~(>_&a

[Unity3D ARPG网络游戏编程实践]

想杀人了,百度了半天也不知道本地服务怎么写,结果资源里的服务器竟然可以用了~~~~(>_<)~~~~
使用了两种方法
1 这个方法特别郁闷,自己写服务器,自己写客户端可以通讯。可是这个服务器用在 [Unity3D ARPG网络游戏编程实践] 中就不能链接成功,还好资源里带有启动本地服务的程序,不会原因,不懂服务器链接的原理
宣雨松版服务器客户端通讯代码

服务器端
using UnityEngine;
using System.Collections;

public class localServer : MonoBehaviour {

    int port = 10110;
    void OnGUI()
    {
        switch (Network.peerType)
        {
            case NetworkPeerType.Client://成功连接至客户端
                break;
            case NetworkPeerType.Connecting://正在尝试连接
                break;
            case NetworkPeerType.Disconnected://未启动状态,在此开始网络连接
                StartServer();
                break;
            case NetworkPeerType.Server://成功连接服务器
                OnServer();
                break;
            
        }
    }

    void StartServer()
    {
        if (GUILayout.Button("创建本地服务器"))
        {
            //创建本地服务器允许10台主机连接,第三个参数:是否支持nat方式的连接
            NetworkConnectionError error = Network.InitializeServer(10, port, false);
            //如果连接失败打印错误信息
            Debug.Log("连接状态:" + error);
        }
    }

    void OnServer()
    {
        GUILayout.Label("服务器创建完毕,等待用户连接");
        //得到用户的连接数量
        int length = Network.connections.Length;
        for (int i = 0; i 

  

2 [Unity3D ARPG网络游戏编程实践] 视频资源
只有客户端代码(注意,networkSript1类没有继承自MonoBehaviour,不能直接添加给照相机,可以在照相机组件视窗中add newscript添加脚本)

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

public class networkSript1{
    private static networkScript instance;
    private static Socket socket;

    private static string IP = "127.0.0.1";
    private static int port = 10100;

    public static networkScript getInstance()
    {
        if (instance == null)
        {
            instance = new networkScript();
            init();
        }
        return instance;
    }

    public static void init()
    {
        try
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(IP, port);
            Debug.Log("服务器连接成功");
        }
        catch
        {

            Debug.Log("服务器连接失败");
        }
    }
}

  

具体操作:
1 删除摄像机,使用NGUI添加小部件
2 创建资源并给场景添加button
3 给摄像机添加网络连接脚本:networkSript1类没有继承自MonoBehaviour,不能直接添加给照相机,可以在照相机组件视窗中add newscript添加脚本
3.1 socket对象(inter网连接类型,流方式传输,tcp协议)
3.2 函数Connect(ip,port)
4 在button的回调函数中添加连接代码

 

 

 

总结
Socket.BeginReceive 方法 (Byte[], Int32, Int32, SocketFlags, SocketError, AsyncCallback, Object)
开始从连接的 Socket 中异步接收数据。

public IAsyncResult BeginReceive(
byte[] buffer,
int offset,
int size,
SocketFlags socketFlags,
out SocketError errorCode,
AsyncCallback callback,
Object state
)
参数
buffer
类型:System.Byte[]
Byte 类型的数组,它是存储接收到的数据的位置。
offset
类型:System.Int32
buffer 中存储所接收数据的位置。
size
类型:System.Int32
要接收的字节数。
socketFlags
类型:System.Net.Sockets.SocketFlags
SocketFlags 值的按位组合。
errorCode
类型:System.Net.Sockets.SocketError
一个 SocketError 对象,它存储套接字错误。
callback
类型:System.AsyncCallback
一个 AsyncCallback 委托,它引用操作完成时要调用的方法。
state
类型:System.Object
一个用户定义对象,其中包含接收操作的相关信息。 当操作完成时,此对象会被传递给 EndReceive 委托。

返回值
类型:System.IAsyncResult
引用异步读的 IAsyncResult。

 


推荐阅读
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
author-avatar
骑蜗牛找-矿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有