EOC项目分析笔记1¶
项目优化列表¶
-
UI生成的view文件,这里执行比较浪费效率,有可能无用的节点也会Find transform 节点
方案:使用C#属性的方式去处理,只有使用的时候才get,能有效的减少无用节点的使用 -
字符串拼接问题,使用公用
StringBuilder进行处理using System.Text; using Sproto; namespace Skyunion { public static class StringBuilderCache { private const int MAX_Size = 512; private static StringBuilder s_Cache = new StringBuilder(MAX_Size, MAX_Size); public static StringBuilder Get(int capacity = 0) { if (s_Cache.Capacity < capacity) return new StringBuilder(capacity); s_Cache.Length = 0; return s_Cache; } } } -
所有new 数组的地方建议使用公共方法去管理,或者组成一个共有池
-
所有使用
Physics.RaycastAll和Physics.Raycast的地方修改成无GC的方法
- 对比字符串查找业务对象和id查找业务对象耗时及HashCode获取业务对象
方式1:
点击gameObject 根据GameObject的name字符串查找对应的业务对象
方式2:
初始化gameObject时添加一个组件,组件内有id字段,点击gameObject时根据gameObject上的组件找到id,然后根据id找到对应业务对象
方式3:
点击gameObject,根据gameObject的HashCode找到对应业务对象
方式1的耗时:重命名gameObject+通过字符串查找业务对象; 耗时 503+316 毫秒 方式2的耗时:给gameObject添加组件+通过id查找业务对象; 耗时 3883+191 毫秒 方式3的耗时:gameObject获取HashCode+通过HashCode查找业务对象;耗时 34+12 毫秒
结论:
gameObject的HashCode查找效率最高,其次是字符串查找,添加组件绑定id的方式最慢
- UGUI 优先使用RectMask2D,最后使用Mask
登录流程¶
设置登录信息,并且派发登录事件(开发模式)
设置登录信息,并且派发登录事件(线上模式)
链接服务器
连接服务器后进行重定向,再次连接服务器,并且验证;重定向且验证后表示登录成功
使用第一个角色进行登录,登录角色服
发送: SprotoType.Role_RoleLogin 
内城初始化¶
地图初始化¶
相机位置初始化¶
相机视野变化和同步视野到服务器¶
监听
WorldCamera.Instance().AddViewChange(OnWorldViewChange);
*发送给服务器相机移动的消息public void SendMapMove(long x, long y)*FogSystemMediator.cs(300):WorldCamera.Instance().AddViewChange(OnMapViewChange); GlobalViewLevelMediator.cs(553):WorldCamera.Instance().AddViewChange(OnWorldViewChange); MapUIiconMyCityMediator.cs(175):WorldCamera.Instance().AddViewChange(OnWorldViewChange); PVPGlobalMediator.cs(468):WorldCamera.Instance().AddViewChange(OnWorldViewChange); WorldMgrMediator.cs(312):WorldCamera.Instance().AddViewChange(OnWorldViewChange); MainInterfaceMediator.cs(724):WorldCamera.Instance().AddViewChange(OnWorldViewChange); WorldPanelMediator.cs(96):WorldCamera.Instance().AddViewChange(OnWorldViewChange);
地图单位初始化¶
单位资源加载
public static void WorldMapViewObjFactory.SysLoadWorldObj(MapObjectInfoEntity data, string prefabname, Action<GameObject, MapObjectInfoEntity> callback)
public void WorldMgrMediator.OnLoadMapObj(GameObject go,MapObjectInfoEntity data)
地图地表及装饰物初始化¶
public void ReadMapBriefDataFromFile2(string map_data_path, int server_x, int server_y, Action action = null)

















