CameraComponent.worldToScreen 必须调用两次后才能获得正确值?

这个问题放在【3.8.1社区公测贴】没有开发或者测试回复,新开一帖吧
稳定的重现,没有一个解释或者修复么?

问题描述:
以下测试脚本,求两个点(0,0,0)和(720, 999, 0)所对应的实际屏幕坐标,在onLoad()和start()函数中,稳定输出一个夸张的值。 在update()函数中,第一次也是输出这个不理解的值,第二次以后调用就正常了。

//— 测试脚本 begin –
count : number = 0

update(deltaTime: number) {

if(this.count < 3) {

    this.count ++

    console.log(this.count)

    let x = cc.find("Canvas/Camera").getComponent(CameraComponent)

    let aaa = new Vec3(0, 0, 0)

    let aaa2 = new Vec3(0, 0, 0)

    let aaa3 = x.worldToScreen(aaa, aaa2)

    console.log("aaa ret = " + aaa3 + " / " + aaa2 + " / " + aaa )



    let bbb = new Vec3(720, 999, 0)

    let bbb2 = new Vec3(0, 0, 0)

    let bbb3 = x.worldToScreen(bbb, bbb2)

    console.log("bbb ret = " + bbb3 + " / " + bbb2 + " / " + bbb )        

}

}
//— 测试脚本 end –

测试结果如下:

测试环境 3.8.0
模拟器,微信小游戏真机测试皆是如此

手动 up,这个问题不应该很常用么,界面适配后看看节点放在屏幕什么位置,大家不用 worldToScreen?

这个没人关注下吗

你创建一个新节点,立即打印他的世界坐标和延迟一帧打印,发现也是不同的。我也不理解,应该是bug,否管为啥,延迟一帧就对了

这种基础功能,官方没有发现?

我先试试这种姿势

只好按照惯例,没修的bug都当是feature

老问题了,延迟一帧就好了

一帧可能会进行多次赋值,为了性能,只是进行脏数据标记,帧尾检查一次重新计算。很正常的设计,如果要马上拿到正确的值,请调用下updateWorldTransform