13

主题

25

回帖

991

积分

优秀创作者

积分
991

夏日·闪闪发光勋章

发表于  2023-6-19 16:20:11 | 显示全部楼层 |阅读模式 4992 3
本帖最后由 EGNE#6985 于 2023-12-18 20:27 编辑

1.服务器的稳定同步帧率在20帧左右, 因此设置帧率为60帧只适用于单机游戏
2.通过获取其余玩家的UI信息来设置自己UI的信息会产生异步
3.自带的第三人称跟随和MOBA视角的跟随都是30帧,因此如果使用了60帧的WADS会抽搐
4.服务器存档前,会在本地备份数据,且该数据绑定的是玩家的id,而非key,例如当切换账号去获取玩家1下的数据时,依然可以获取到
5.不要轻易尝试制作3D或者说跟z轴相关的内容,很多东西都需要自己模拟,且对性能优化需求较高
6.ECA自定义回调可以通过插槽的方式,执行到相关位置时,发送自定义事件来模拟
7.加载时序:初始化->初始化结束->玩家初始化->单位初始化(物编初始化>全局初始化)->游戏经过0秒
8.在玩家初始化完成前,可以获取到的玩家存在id,但是并不存在base实体
9.表中数据为static类型,即可以真正全局获取,而不需要像全局变量一样等待游戏初始化之后
10.官放自带的UI组件,CV之后最好自己重新绑定一下相关信息
11.ECA的闭包,只能读,而不能设置,其实它是通过传参的形式,把父T的基础变量值传递到了子T,当然obj类型数据还是引用传递
12.ECA想要实现类lua的高阶函数机制(回调,事件),可以通过在执行流程中插入自定义事件的方式进行回调,但不推荐使用轮询
13.避免去继承物编的class,可以采用组合的方式,避免继承之后,无法使用其原生的一些接口
14.事件会依赖其挂载的对象,会随着对象的消亡而消亡,但是计时器作为新线程不会跟随消亡
15.通过【选取玩家所有单位】形成的单位组是通过筛选器进行的,会导致加上单位【无法被筛选器选中】状态的单位无法被获取
16.单位的绝对高度=单位所在点的悬崖层级*100
17.ECA中的区域值都为整数ID,所以可以通过存储字符串ID的方式,把区域存储在表格中,然后通过转换为整数并储存在表中,最后通过表中的区域值去获取该整数(必须存储在表中,然后显式声明为区域才能正常执行,因为编辑器认为区域值!=整数)
18.斜坡的过度分为:0->90->100->190->200为一层地形
19.获取单位的绝对高度,必须通过lua的api,通过点的z来获取
20.ECA创建的projectile如果设置所属单位,其会在所属单位被删除之后,延迟2s左右被GC掉(说明GC时间为2秒?)
21.指定单位进入/离开区域事件是通过对比前后帧单位所在位置的变化进行的,所以直接在单位脚下创建一个区域也会触发该事件(任意单位不行,trigger是挂在区域上的,指定单位是挂在单位上的)
22.施法时间为0时,不算正在施法,即无法使用是否正在施法判定
23.直接使用玩家X,相关ECA或者lua会直接跑本地,即可能会产生异步
24.相同事件的注册顺序:根据左侧的列表,从上到下的注册,如存在有子触发器,则在前面顺序的基础上根据注册的先后顺序来
25.点,区域等属于"logicres"文件中的东西们都是通过整数ID给服务器之后获取的实体,因此在客户端可以通过表中的XXX值来显式的指定一个整数为具体的某一类型,进而可以通过填写整数ID来解决无法在表中填写实体的问题
26.动态创建的UI自会在本地客户端创建一份,创建在界面编辑器中的UI会在游戏初始化前给加入游戏的每个客户端都复制一份相同的UI数据,包括ID都一致
27.相同事件名的UI事件,只要事件对象不相同,就不会进行广播
28.商店中的物品是物品的类型,即商品<=>物品类型
29.技能的施法打断距离为0的时候,通过按键释放技能,可以触发施法开始,但是不能触发施法出手;通过UI的快捷键释放则没有任何问题
30.界面编辑器命名的时候最好使用英文,如果需要使用中文,则可以采用中文加拼音的方式命名,这样便于根据名字在json文件中查找uid,不然如果都是中文,会在转化为json的时候,变成没有辨识意义的编码
31.做数值设计的时候,如果需要自己做公式,则内置的公式并不方便,可以采取内置公式直接改为伤害(相当于弃用该公式),然后在即将收到伤害事件里面填入自己设计的公式
32.如果需要UI适应不同的硬件设备,需要为每一个UI都开启控件适配
33.绑定的UI在单位死亡之后需要使用【玩家选择单位】才可以正常获取数据
34.实时型存档存储数据类型为string时,长度在128byte,若长于该值会不变(通过直接修改本地数据也可以突破该限制);类型为整数时,大小为210个小目标(实际编辑器中只能使用21个小目标的大小),若大于该值会自动取0;类型为浮点数时,最大为“70368744177664.00”,大于该值自动设置为该值(但实际存不了这大,因为Fix()方法的参数大小限制住了,所以实际要小一位);其他数据类型,这些数据类型都是通过ID存储的,因此也可归纳与字符串类型或者整数类型(大概率时字符串,不然长度容易超标)
35.硬件事件会自动同步所有客户端,不是走的本地硬件,因此无需为每个玩家都注册
36.运行时属性编辑插件,会在暂停之后挂起所有计时器线程,无论是计时器,还是时间时间,还是魔法效果周期时间都会被挂起,但停止暂停之后却无法正常启用被挂起的线程,需要重新创建对应的计时器或者注册时间事件或者添加魔法效果才可
37.动态创建Ui事件会根据监听对象进行多玩家注册,如果监听对象是在界面编辑器中的UI,因为界面编辑器中的UI默认都是多玩家的,因此该UI事件也会给每个玩家都注册一个事件,但如果通过动态为某个玩家创建的UI上创建UI事件,则因为该UI只在创建该UI的玩家有,因此只会给该玩家的该UI注册一个事件
38.战斗逻辑使用的是帧同步(同步硬件操作),UI界面使用过的是帧同步+事件同步.为了避免异步,多人游戏尽量不要使用本地玩家
39.建筑类型的单位通过筛选器进行查找时,跟其余单位都是通过单位碰撞半径进行查找的不同,该类型是通过表现中的地形碰撞进行的,因此建筑类型单位如果要通过筛选器查找,则需为该单位添加上地形碰撞。

以上有问题的,欢迎指正!!!
























9

主题

17

回帖

881

积分

优秀创作者

积分
881

夏日·闪闪发光勋章

发表于  2023-6-19 16:30:53 | 显示全部楼层
补充一下,lua的加载还在ECA初始化之前,包括物编实体对象,在lua加载的时候都是空的

4

主题

17

回帖

152

积分

普通创作者

积分
152
发表于  2023-6-23 22:43:53 | 显示全部楼层
你两有基情。

0

主题

7

回帖

66

积分

指导员

积分
66
发表于  2023-11-16 15:39:50 | 显示全部楼层
无名拉二胡#7884 发表于 2023-6-19 16:30
补充一下,lua的加载还在ECA初始化之前,包括物编实体对象,在lua加载的时候都是空的 ...

不是的,现在的物编中的技能的获得事件会在lua之前执行