找回密码
 立即注册
查看: 168|回复: 0

Unity3D游戏开发中一些常见的问题解答(七)

[复制链接]
发表于 2022-11-9 14:06 | 显示全部楼层 |阅读模式
前言

我们在游戏开发中,总会遇到一些问题。那么今天我们就一些常见的问题做出一下解答
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!
1.怎么解决TCP网络传输「粘包」问题?
TCP 半包粘包问题的处理方式自己做好数据的封装,就是说把你要发送的数据,用一个快递盒子包起来。然后和N个这样的盒子一起投递给服务端,服务端收到数据以后,然后打开一个一个的盒子。来取里面的数据,这样盒子里面的商品就不会乱。
做盒子的方式由两种:
(1)用 [size][body内容][校验]来做,发送数据的时候,用几个字节表示包的大小,后面跟内容和校验。读取的时候,先收完size的数据,再把内容解析出来。
(2)用分割符号分开,比如用\r\n分开, http就采用\r\n来分开
2.作为Unity3D的脚本而言,c#中for是否真的比foreach效率更高?
是否效率高要在特定情况下比较他们的实现,以及支持foreach遍历的开销;
通常情况下来说,能用for的就不用foreach。用foreach, 是因为内部实现了foreach的机制,让我们使用的时候更方便,不应该直接拿来与for比较。就像set函数与直接给变量赋值一样,他只是一种机制。Set 函数,让用户给变量赋值的时候,还可以内部做其它的事情,而外部赋值的用户不用管,这个就是这个机制的好处,foreach也是为了简化遍历。
3.在以TCP为连接方式的服务器中,为什么在服务端设计中需要考虑心跳?
因为TCP在关闭socket的时候需要来回的握手,有可能某些极端情况下,导致无法成功的正常关闭。导致客户端+服务端之间长时间无法通讯数据,但又无法重新建立连接,所以这个时候就需要心跳。客户端向服务端发送数据,长时间收不到回复,就关闭掉socket,然后重新去连接服务端。这样数据就能回复正常,比如玩家进入电梯后,网络卡住,出电梯后,网络重新连接,然后恢复数据通讯。
4.手机游戏任务系统设计的核心思路是什么?
1: 任务系统表的设计: 任务系统主要是包含了任务的唯一ID号(任务的分类+标识),任务的描述,任务的触发条件,达成任务的条件, 任务的奖励。所以再做任务系统设计的时候,我们会按照这个方式来设计任务系统表。任务ID的设计,我可以用 分类+子ID模式,比如 70001,  第7类第1号任务,60034, 第6类,34号任务。
2: 派送任务: 根据达成触发任务的条件,当玩家的某项数据发生变化的时候,我们就来判断一下,是否达成任务的条件,比如,玩家到了某个等级,就开启任务,比如玩家收集了5个宝石就开启任务等,当任务开启后,就给这个玩家投递一个任务。所以派送任务的时候,我们还要做一个玩家与任务ID的进行时候的任务表。表的设计大概为:
玩家ID,  任务ID, 任务状态(进行中,领取奖励,奖励已领取, 结束)。当拉取玩家的任务的时候,只要查询这个表,把属于这个玩家的所有的任务都拉取出来即可。
3: 达成任务: 根据达成任务的条件,当玩家的某项数据发生变化的时候,我们看下是否满足任务达成的条件,如果满足,那么就更改任务的状态已完成,如果这个任务有奖励,那么我们就更改状态为可以领取的奖励。
4: 领取奖励:,如果某个任务完成了,状态是领取奖励,就根据任务的描述,来发放奖励,并通知客户端播放特效动画,增强仪式感。
5.作为一个unity游戏开发主程必备的是什么?
(1)学习Unity框架设计+资源管理+热更新(xLua, ILRuntime, huatuo)
(2)学习Unity渲染管线+Unity Shader开发;
(3)学习Unity的一些专题与技能相关的一些点:性能优化, 编程语言与数据结构
(4)学习常用的一些工具的制作与Unity编辑器扩展,如地图编辑器等。
(5)学习Unity如何与服务器对接,做好网络处理;
会定位问题,分析问题,然后通过自己所学解决问题。
附:学习视频地址
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-6-30 06:24 , Processed in 0.089706 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表