3.6.3widget对齐模式问题

勾选了ON_WINDOW_RESIZE,结果发现改父节点的宽高,子节点并没有适配
看了下引擎源码,只有 ALWAYS才会执行后续代码
Dingtalk_20230603175350
写错了么,还是设计如此?

widget无论哪个cocos版本都有编辑器上面的问题:不能及时适应宽高度

不是编辑器的问题,游戏运行时会这样;编辑器反而是好的

Widget应该有两种模式,ONCE、ALWAYS;看名字就大概知道啥情况了,就是只适配一次、一直适配

cocos有三种,还有个 ON_WINDOW_RESIZE,但是现在的 ON_WINDOW_RESIZE不生效

ON_WINDOW_RESIZE介绍是一开始会像 ONCE 一样对齐一次,之后每当窗口大小改变时还会重新对齐。

现在就是不会啊。。。

触发这个事件design-resolution-changed才相当于窗口大小变化…你只是改父节点大小还是用ALWAYS吧

好吧,是我理解上的偏差,我以为 ON_WINDOW_RESIZE是节点大小发生变化时触发; ALWAYS是每帧计算

如果这也算解决方案,那真的是太糟糕了,每次都计算一遍,根本就不能算是解决方案

啥意思,我没理解

每帧率对齐一次,懂吧?

不是的,没有每帧对齐;我的意思是我之前理解错了,我以为 ALWAYS是每帧对齐;
实际引擎设计的 ALWAYS是在节点变化时对齐

通常设置为  **ALWAYS** ,每次节点产生变动时重新对齐。
设置为  **ONCE**  时,仅在组件初始化时进行一次对齐。
 **ON_WINDOW_RESIZE**  时会在每次窗口变动时候更新一次

从官方文档中看不出ALWAYS和ON_WINDOW_RESIZE有什么区别,这文档。。。相当于没说,我也一直以为always是每个帧率计算一次

看来不是我一个人这么理解了。主要引擎默认就会选中ON_WINDOW_RESIZE;这个事件除了网页,一般不怎么会触发吧;对齐一般都是以父节点为准,不知道为啥要默认监听这个

源码都翻了,往上看一眼就能知道了:

这块儿也看了,只是之前理解的是当alignMode=== ON_WINDOW_RESIZE触发这个,理解有误,先入为主了

image
这个默认选中 ON_WINDOW_RESIZE大佬怎么看
image
我看代码里面并没有因为这个减少节点事件的监听,enabel直接注册的事件


而且窗口变化的时候, ALWAYS也会触发,那为什么不默认选 ALWAYS

确实不是什么东西都要去看下源码,不然变量名就失去了它本应该拥有的作用。我见过很多文章总是发表这样的“xx源码解析”,“xx深入源码”,然后就是洋洋洒洒好几K设置几w字的截取代码+解释,看上去高大上,其实大多是一些刚入门的小白喜欢在网上炫耀罢了,人家需要通过看它的文章来了解吗?并不需要,人家也是有眼睛的,人家更加看重变量的命名,而不是总是想着去看代码实现。变量命名好与不好,这时候就体现出程序员的水平来了。

我理解你的意思,你的意思是只要看源码,就能知道always的具体意思,但是,你忘记了函数名和变量名的作用:方便不用看源码都能从name来看出作用。
单纯从always来看,确实以为是每个帧率都计算,这算是坑吧?
既然不是什么改动都能触发这个改动,建议文档还是明确设置了always后哪些情况下会触发事件(transform&size&anchor)
还有这个always命名很容易让人引起误解,建议不如改为tsa,即transform&size&anchor的首字母集合体,无论unity如何命名,你都不应该盲从