跳字优化

对象池优化

制作一个对象池来缓存跳字专用的prefab。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ---------整体流程方法名(以下只展示方法签名)---------

class HPWindow : void SetJumpUpdateInfo(JumpUpdateInfo jui); // 先使用 pool.PopOne() 从对象池获取一个GameObject,再 Show()。

class JumpNumPool : JumpNum PopOne(); // Queue弹出一个prefab实例化后的GameObject对象。如果Queue已经空了,就执行CreateOne()新插入一个JumpNum到Queue并初始化,然后弹出返回。

class JumpNum : void Show(JumpUpdateInfo ji); // 根据JumpUpdateInfo配置 显示跳字。最后执行Recycle()。

class JumpNum : void Recycle(); // 0.75s后执行回收,将GameObject塞回Queue中。


// ---------上述提到的配置类---------
public class JumpUpdateInfo {
public int jumpVal;// 数值
public Vector2 pos;// 位置
public JumpTypeEnum jumpType;
public JumpAniEnum jumpAni;
}

显示队列

实现思路和TipsWindow差不多,就是维护一个队列,然后给定一个频率,按频率去执行跳字,我这里设置的200ms飘一次字。

把上面的包装好后,外部只要调用血条ItemHP.AddHPJumpNum(JumpNum jn, JumpUpdateInfo jui)就行了。

效果如下:

小地图

UI映射轴向一致

实现,肯定是用逻辑位置去映射到小地图上的位置,然后在位置上展示图标就行了。

然后关键来了,怎么映射最优呢?

① 将地图的中心点和小地图的中心点设置为原点坐标。

② 确保地图与小地图,所实际使用的2个轴向保持一致。

③ 确保以上2点后,映射的时候直接使用local位置即可。

好处很多,不单是换算方便,因为地图原点坐标在地图中心点,所以打出log的也会直观很多。

UI图片和地图资源比例保持一致

这样可以直接将地图逻辑位置坐标 *scaler 缩放就实现了位置映射。

聊天系统 名字标签

一般有2种方式实现,都比较简单。

第一种是使用在发往服务器的消息包中放入玩家的id、英雄的id信息,再去服务器拼接msg字符串。

第二种是直接在发往服务器的消息包的msg字符串本地拼接,因为在客户端本机相关的数据很全,直接拼接好再发送就可以了。

第二种节省服务器的操作,属于是一个容易想到的小优化。

最终效果:

关闭窗口检测

使用gameObject.activeSelf并不能获取到正确的值,因为直接把父物体给SetActive(false)了,子物体其实还是activeSelf = true的状态。

这种情况,要使用ameObject.activeInHierarchy来判断。