B2:Unity制作Moba类游戏——聊天系统

这篇具有很好参考价值的文章主要介绍了B2:Unity制作Moba类游戏——聊天系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一场游戏对局中,和队友进行友好的有礼貌的有效的沟通可以极大提升对局胜率。在LOL国服,打字和队友聊天沟通战术是非常常见的行为:

unity 聊天系统,Unity制作Moba类帧同步游戏,游戏

语言的力量是无限的,甚至可以和外国小伙伴效沟通战术:

unity 聊天系统,Unity制作Moba类帧同步游戏,游戏

 unity 聊天系统,Unity制作Moba类帧同步游戏,游戏

    聊天系统制作起来非常简单,只要熟练掌握C#的TCP通讯协议即可,然后在服务器和客户端做好分发,流程就是:

某个客户端定义文字数据,发送给服务器(开喷) ==> 服务器接收消息分发给所有客户端 ==> 所有客户端接收消息判断消息归属IP,调用UI显示内容 ==> 回喷……

嗯,对,就是这样,剩下的就交给上帝吧......

unity 聊天系统,Unity制作Moba类帧同步游戏,游戏

    第一步,定义Socket通讯协议,定义收发消息的方法

/// <summary>
/// Socket协议
/// </summary>
public enum MessageType
{
    /// <summary>
    /// 链接协议
    /// </summary>
    Connect = 0,
    /// <summary>
    /// 游戏逻辑协议
    /// </summary>
    GameLogic = 1,
    /// <summary>
    /// 游戏环境设置协议
    /// </summary>
    GameSetting = 2,
    /// <summary>
    /// 玩家操作协议
    /// </summary>
    Player = 3,

}

/// <summary>
/// 连接Socket协议
/// </summary>
public enum ConnectMessage
{
    /// <summary>
    /// 加入房间
    /// </summary>
    Join = 0,
    /// <summary>
    /// 请求断开连接
    /// </summary>
    Exit = 1,
    /// <summary>
    /// 中途离开游戏
    /// </summary>
    ExitGame = 2,
    /// <summary>
    /// 中途加入游戏
    /// </summary>
    JoinGame = 3,
    /// <summary>
    /// 关闭服务器
    /// </summary>
    Close = 4,
}

/// <summary>
/// 玩家操作Socket协议
/// </summary>
public enum PlayerMessage
{
    /// <summary>
    /// 发送聊天数据
    /// </summary>
    SendChat = 0,
    /// <summary>
    /// 操作移动
    /// </summary>
    Move = 1,
    /// <summary>
    /// 释放技能
    /// </summary>
    Skill = 2,
    /// <summary>
    /// 执行英雄动画
    /// </summary>
    Animator = 3,
    /// <summary>
    /// 同步英雄transform数据
    /// </summary>
    SyncTransform = 4,
    /// <summary>
    /// 击杀判定
    /// </summary>
    KillJudge = 5,
    /// <summary>
    /// 属性变化
    /// </summary>
    AttributeJudge = 6,
    /// <summary>
    /// 属性面板变化
    /// </summary>
    PropertyPanel = 7,
    /// <summary>
    /// 背包内容变化
    /// </summary>
    PackageChange = 8,

}

第二步,定义客户端发送消息的方法:

using System.Net.Sockets;
    
    /// <summary>
    /// 客户端Socket
    /// </summary>
    public Socket clientSocket;

    /// <summary>
    /// 发送一条文字信息给服务器
    /// </summary>
    /// <param name="msg"></param>
    public void PutMessageToQueue(MessageData msgdata)
    {
        //将对象序列化发过去
        byte[] msgBytes = ToolsUtil.StringToByteArray(JsonMapper.ToJson(msgdata));
        if (msgBytes.Length > 2048)
        {
            iDebug.YiYan("数据长度大于2048,请减少数据");
        }
        else
        {
            SendBytesMessageToServer(msgBytes, 0, msgBytes.Length);
        }
    }

    /// <summary>
    /// 发送消息的方法
    /// </summary>
    /// <param name="sendMsgContent">消息内容</param>
    /// <param name="offset">从消息内容第几个开始发送</param>
    /// <param name="size">发送的长度</param>
    public void SendBytesMessageToServer(byte[] sendMsgContent, int offset, int size)
    {
        //  Debug.Log("开始发送!!准备发送长度=" + size);
        if (clientSocket.Connected == true)
        {
            clientSocket.BeginSend(sendMsgContent, offset, size, SocketFlags.None, SendMessageCallback, "");
        }
        else
        {
            EventManager.playerControl_C.ClearData();
        }
    }

第三步,定义客户端接收消息并显示的方法:

    /// <summary>
    /// 接收消息的方法
    /// </summary>
    /// <param name="byteArray"></param>
    /// <param name="offset"></param>
    /// <param name="length"></param>
    public void ReceiveMsgData(byte[] byteArray, int offset, int length)
    {
        string msg = ToolsUtil.ByteArrayToString(byteArray, offset, length);
        //  Debug.Log("收到信息:" + msg);
        if (msg.Length > 0)
        {
            //对信息进行处理
            MessageData data = JsonMapper.ToObject<MessageData>(msg);
            Action_Talk(data);

        }
        else
        {
            Debug.LogError("连接中断……");
            EventManager.playerControl_C.ClearData();
        }

    }

    /// <summary>
    /// 执行对话
    /// </summary>
    /// <param name="value"></param>
    public void Action_Talk(MessageData value)
    {
        PlayerSocketData playerSocketData = JsonMapper.ToObject<PlayerSocketData>(value.socketData);

        if (localMacID == playerSocketData.MacID)
        {
            UIManager.console_C.ReceiveMessage("我:" + value.msg);
        }
        else
        {
            UIManager.console_C.ReceiveMessage(playerSocketData.Name + "说:" + value.msg);
        }

        DataManager.playerData_C.GetData(playerSocketData.UserID).heroAI.heroCanvas.StartTalk(value.msg);

        //发送弹幕
        BulletScreen.Single.PushComments(playerSocketData.Name + ":" + value.msg);
    }

在“执行对话”Action_Talk 方法里,通过socket接收到的消息需要在UI上实时显示即可,这里就不多做赘述啦~~ 感兴趣的小伙伴,可以做成弹幕哦~~

原理很简单,就是以服务器作为中转,看了第一篇socket帧同步的小伙伴很容易实现聊天系统

下一篇开始开始游戏AI的制作,尽请期待哈~ ~ ~

文末福利:↓↓↓

 unity 聊天系统,Unity制作Moba类帧同步游戏,游戏

 unity 聊天系统,Unity制作Moba类帧同步游戏,游戏文章来源地址https://www.toymoban.com/news/detail-689609.html

 不羡鸳鸯不羡仙,羡慕韩国财阀每一天~~~ 嘿嘿嘿嘿~~

到了这里,关于B2:Unity制作Moba类游戏——聊天系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【unity】快速了解游戏制作流程-制作九宫格简单游戏demo

            hi~大家好呀!欢迎来到我的unity学习笔记系列~,本篇我会简单的记录一下游戏流程并且简单上手一个通过九宫格移动到指定位置的小游戏,话不多说,我们直接开始吧~                  本篇源自我看B站一位up主的视频所做的笔记,感兴趣的可以去看原视频哦

    2023年04月08日
    浏览(43)
  • Unity制作 小球吃金币 游戏

    工程源文件下载地址-百度网盘 1. 新建一个项目 2. 新建一个平面对象 3. 新建一个材质球 为材质球设置颜色 5. 将材质球拖拽赋值给平面 6.  创建立方体对象,拉伸至平面宽度 7. 再复制三个立方体、调整位置、添加材质,用四个调整过的立方体将平面围起来 8. 创建一个球体(

    2024年01月15日
    浏览(35)
  • Unity游戏开始界面制作教学

    第一步: 新建一个Scene 第二步: 在Scene里添加一个Canvas对象(在Hierarchy右键–UI–Canavas) 如何给添加开始按钮: 在Canvas右键–UI–Button 如何给按钮添加文字: Button的子对象Text的Text组件可以修改按钮上的文字 如何给按钮添加事件: Button对象的Button组件最下面有一个“Oncl

    2024年02月02日
    浏览(30)
  • 【unity demo】使用unity制作射击游戏demo (上)

    主要是安装unity对应的版本,并配置相应的ide,目前我用的是unity 2021.3.21。 通过edit-prefreneces面板,external tools选项中配置ide环境,自动使用vs code来打开工程中的代码文档。 即游戏设计文档(Game Design Document, GDD),我们需要预先对待实现的完整demo进行设计,包括5个部分:

    2024年02月08日
    浏览(52)
  • unity——小球酷跑游戏制作

    所有变量与物体名的命名原则都是见名知意 一、创建一个unity项目 二、Create所需3Dobject 1.Player 2.walls 三、添加属性 : 1.添加在Player上 a.添加Rigidbody组件 b.添加new script组件,并命名为PlayMove,代码如下: 2.添加到walls上 a.首先create empty将wall包含 b.在Wall上添加new script组件,代码

    2023年04月24日
    浏览(31)
  • unity制作FPS射击游戏

    角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武器展示、弹壳抛出效果、射击效果、全自动与半自动射击效果、瞄准效果、后坐力效果、弹痕效果等多种动作。 非玩家角色(NPC)具备多个动画状态,包括固定路径巡逻、行走、奔跑、寻路攻击等多种行为。 太

    2024年02月08日
    浏览(42)
  • Unity学习之坦克游戏制作(1)开始场景的制作

    相当于开始界面,想怎么创建就怎么创建 我最终模拟的效果 这部分不关键,关键的是创建可用来装载脚本的button 这部分感兴趣的可以去看我博客的GUI部分,但建议大家把学GUI的时间拿来学UGUI 导入预设体 Root 创建一格Label组件作为标题 这部分也可以自己创建 同时创建四个按

    2024年01月22日
    浏览(39)
  • Unity塔防游戏的制作与实现

    一、游戏场景的搭建 首先,我们需要创建一个新的Unity场景,并将场景设置为2D模式。然后,我们需要导入一些必要的素材,如地图、塔、怪物、子弹等。我们可以从Unity Asset Store中下载这些素材,或者自己制作。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游

    2024年02月14日
    浏览(25)
  • unity制作一款塔防游戏

    关键技术: 寻路系统 生成怪物算法 粒子系统 line renderer制作追踪射线 相机视角移动、放大 炮弹追踪算法 粒子特效 按钮动画制作 设置几个基准点,用于偏移方向 定义一个Move方法 判断当前行数是否超过位置数组的长度,如果是则直接返回 根据当前位置与目标位置计算出移

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包