当前位置: 首页 > news >正文

网站服务器 要求阜阳市住房和城乡建设局网站

网站服务器 要求,阜阳市住房和城乡建设局网站,青之峰网站建设哪家好,提供网站建设课程报告角色类 基类Base Human是基础的角色类#xff0c;它处理“操控角色”和“同步角色”的一些共有功能#xff1b;CtrlHuman类代表“操控角色”​#xff0c;它在BaseHuman类的基础上处理鼠标操控功能#xff1b;SyncHuman类是“同步角色”类#xff0c;它也继承自BaseHuman它处理“操控角色”和“同步角色”的一些共有功能CtrlHuman类代表“操控角色”​它在BaseHuman类的基础上处理鼠标操控功能SyncHuman类是“同步角色”类它也继承自BaseHuman并处理网络同步如果有必要​。 BaseHuman using System.Collections;using System.Collections.Generic;using UnityEngine;public class BaseHuman : MonoBehaviour {//是否正在移动protected bool isMoving false;//移动目标点private Vector3 targetPosition;//移动速度public float speed 1.2f;//动画组件private Animator animator;//描述public string desc ;//移动到某处public void MoveTo(Vector3 pos){targetPosition pos;isMoving true;animator.SetBool(isMoving, true);}//移动Updatepublic void MoveUpdate(){if(isMoving false) {return;}Vector3 pos transform.position;transform.position Vector3.MoveTowards(pos, targetPosition, speedTime.deltaTime);transform.LookAt(targetPosition);if(Vector3.Distance(pos, targetPosition) 0.05f){isMoving false;animator.SetBool(isMoving, false);}}// Use this for initializationprotected void Start () {animator GetComponentAnimator();}// Update is called once per frameprotected void Update () {MoveUpdate();}} CtrlHuman using System.Collections; using System.Collections.Generic; using UnityEngine;public class CtrlHuman : BaseHuman {new void Start(){base.Start();}// Update is called once per framenew void Update(){base.Update();if(Input.GetMouseButtonDown(0)) {Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;Physics.Raycast(ray,out hit);if(hit.collider.tag Terrain) {MoveTo(hit.point);}}} }如何使用网络模块 在实际的网络游戏开发中网络模块往往是作为一个底层模块用的它应该和具体的游戏逻辑分开而不应该把处理逻辑的代码写到 ReceiveCallback 里面去。因为ReceiveCallback应当只处理网络数据不应该去处理游戏功能 一个可行的做法是给网络管理类添加回调方法当收到某种消息时就自动调用某个函数这样便能够将游戏逻辑和底层模块分开。制作网络管理类前需要先了解委托、协议和消息队列这三个概念。 通信协议 通信协议是通信双方对数据传送控制的一种约定通信双方必须共同遵守方能“知道对方在说什么”和“让对方听懂我的话”​。 使用一种最简单的字符串协议来实现。协议格式如下所示消息名和消息体用“|”隔开消息体中各个参数用“, ”隔开。 消息名|参数1, 参数2, 参数3, ... Move|127.0.0.1:1234, 10, 0, 8, 处理数据 string str Move|127.0.0.1:1234, 10, 0,8, ;string[] args str.Split(|);string msgName args[0]; //协议名Movestring msgBody args[1]; //协议体127.0.0.1:1234, 10, 0,8,string[] bodyArgs msgBody.Split(, );string desc bodyArgs [0]; //玩家描述127.0.0.1:1234float x float.Parse(bodyArgs [1]); //x坐标10float y float.Parse(bodyArgs [2]); //y坐标0float z float.Parse(bodyArgs [3]); //z坐标8 消息队列 多线程消息处理虽然效率较高但非主线程不能设置Unity3D组件而且容易造成各种莫名其妙的混乱。由于单线程消息处理足以满足游戏客户端的需要因此大部分游戏会使用消息队列让主线程去处理异步Socket接收到的消息。 C#的异步通信由线程池实现不同的BeginReceive不一定在同一线程中执行。创建一个消息列表每当收到消息便在列表末端添加数据这个列表由主线程读取它可以作为主线程和异步接收线程之间的桥梁。由于MonoBehaviour的Update方法在主线程中执行可让Update方法每次从消息列表中读取几条信息并处理处理后便在消息列表中删除它们 NetManager类 网络模块中最核心的地方是一个称为NetManager的静态类这个类对外提供了三个最主要的接口。 Connect方法调用后发起连接AddListener方法消息监听。其他模块可以通过AddListener设置某个消息名对应的处理方法当网络模块接收到这类消息时就会回调处理方法Send方法发送消息给服务端。 无论内部实现有多么复杂网络模块对外的接口只有图片展示的这几个 对内部而言NetManager使用了异步Socket接收消息每次接收到一条消息后NetManager会把消息存入消息队列中​。NetManager有一个供外部调用的Update方法每当调用它时就会处理消息队列里的第一条消息然后根据协议名将消息分发给对应的回调函数 using System.Collections;using System.Collections.Generic;using UnityEngine;using System.Net.Sockets;using UnityEngine.UI;using System;public static class NetManager {//定义套接字static Socket socket;//接收缓冲区static byte[] readBuff new byte[1024];//委托类型public delegate void MsgListener(String str);//监听列表private static Dictionarystring, MsgListener listeners new Dictionarystring, MsgListener();//消息列表static ListString msgList new Liststring();//添加监听public static void AddListener(string msgName, MsgListener listener){listeners[msgName] listener;}//获取描述public static string GetDesc(){if(socket null) return ;if(! socket.Connected) return ;return socket.LocalEndPoint.ToString();}//连接public static void Connect(string ip, int port){//Socketsocket new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);//Connect用同步方式简化代码socket.Connect(ip, port);//BeginReceivesocket.BeginReceive( readBuff, 0, 1024, 0,ReceiveCallback, socket);}//Receive回调private static void ReceiveCallback(IAsyncResult ar){try {Socket socket (Socket) ar.AsyncState;int count socket.EndReceive(ar);string recvStr System.Text.Encoding.Default.GetString(readBuff, 0, count);msgList.Add(recvStr);socket.BeginReceive( readBuff, 0, 1024, 0,ReceiveCallback, socket);}catch (SocketException ex){Debug.Log(Socket Receive fail ex.ToString());}}//发送public static void Send(string sendStr){if(socket null) return;if(! socket.Connected)return;byte[] sendBytes System.Text.Encoding.Default.GetBytes(sendStr);socket.Send(sendBytes);}//Updatepublic static void Update(){if(msgList.Count 0)return;String msgStr msgList[0];msgList.RemoveAt(0);string[] split msgStr.Split(|);string msgName split[0];string msgArgs split[1];//监听回调if(listeners.ContainsKey(msgName)){listeners[msgName](msgArgs);}}} 漏洞 上述代码没有处理粘包分包、线程冲突等问题 参考书籍《Unity3D网络游戏实战第2版》 (豆瓣) (douban.com)
http://www.w-s-a.com/news/533654/

相关文章:

  • 宜春网站建设推广网络推广工作好干吗
  • 网站程序0day平顶山市做网站
  • 企业网站名称怎么写哔哩哔哩网页版官网在线观看
  • 直播网站建设书籍阿里巴巴网站建设销售
  • 肇庆企业自助建站系统郴州网站建设解决方案
  • 长沙专业做网站排名游戏开发大亨内购破解版
  • 网站推广适合女生做吗网站如何开启gzip压缩
  • 做外单阿里的网站建站平台那个好
  • 全国性质的网站开发公司关于网站开发的请示
  • 齐齐哈尔住房和城乡建设局网站生物科技公司网站模板
  • 中国建设协会官方网站前端培训的机构
  • 网站建设套餐是什么北京孤儿院做义工网站
  • 网站如何做微信支付链接做暧小视频xo免费网站
  • SEO案例网站建设重庆建站模板平台
  • 上海seo网站推广公司wordpress 小米商城主题
  • 搭建服务器做网站什么网站可以请人做软件
  • 上海建筑建材业网站迁移公家网站模板
  • 仿制别人的网站违法吗网站防火墙怎么做
  • 杨浦网站建设 网站外包公司如何进行网络推广
  • wordpress+仿站步骤超详细wordpress常用函数
  • 浙江手机版建站系统哪个好怎样黑进别人的网站
  • 企业网站搜索引擎推广方法装修网络公司
  • 网站运营优化建议wordpress 添加媒体
  • 用asp.net做网站计数器施工企业会计的内涵
  • 网站被黑咋样的网站建设 设计业务范围
  • 网站开发学哪种语言网站编辑器失效
  • WordPress插件提示信息江阴网站优化
  • 网站开发用的软件如何做网站内容管理
  • 扬州网站建设公司网站推广是什么岗位
  • 双线网站管理咨询公司是做什么