美文网首页
网络功能插件Mirror学习笔记

网络功能插件Mirror学习笔记

作者: sky嗨嗨 | 来源:发表于2020-03-02 05:32 被阅读0次

    写在前面

    !!本文章不具有参考意义!!
    主要作者健忘所以学明白了就写下来给未来忘掉的自己看(x

    关键词

    1. LLAPI:Low Level Application Program Interface
    2. HLAPI:High Level Application Program Interface

    Message

    1. 通过继承MessageBase或者实现IMessageBase,自定义Message类内可以包含自己想传递的数据,比如玩家昵称玩家等级,etc

    2. 系统底层代码在Send的时候会自动把被传message内的Serialize方法内参数NetworkWriter和Deserialize方法内参数NetworkReader赋值

    例子:每次在Client连接到Server的时候发一个消息,打印一句Hello world

    using UnityEngine;
    using Mirror;
    
    public class TestMsg : MessageBase {
        public string msg;
    
        public override void Serialize(NetworkWriter writer) {
            writer.WriteString(msg);
        }
    
        public override void Deserialize(NetworkReader reader) {
            msg = reader.ReadString();
        }
    }
    
    public class Debugger : NetworkManager {
        public override void OnStartServer() {
            base.OnStartServer();
    
            NetworkServer.RegisterHandler<TestMsg>(OnTestMsg);
        }
    
        public override void OnClientConnect(NetworkConnection conn) {
            base.OnClientConnect(conn);
    
            var testMsg = new TestMsg() { msg = "hello world" };
            NetworkClient.Send<TestMsg>(testMsg);
        }
    
        private void OnTestMsg(NetworkConnection conn, TestMsg testMsg) {
            Debug.Log(testMsg.msg);
        }
    }
    
    Serialize & Deserialize方法

    NetworkWriter会把数据连成一串,猜测内部是一个queue一样的数据结构。NetworkReader通过调取不同读取方法ReadString()、ReaderByte()、etc来读取这一串数据的末尾,遵循先进先出原则,所以write的顺序要和read的顺序一样。

    至于为什么需要Serialize/Deserialize,可能因为LLAPI传输数据的方法都是传输一样的格式的数据吧(比如byte之类的

    つづく

    相关文章

      网友评论

          本文标题:网络功能插件Mirror学习笔记

          本文链接:https://www.haomeiwen.com/subject/aghjkhtx.html