在3.x , 一个 3d 物体 设置坐标 v3(-0.6, 3.5, -6) , 然后需要在3d 物体上添加 一个2d 的UI ,用来显示3d的基本信息,这时候,2d 的UI 坐标 需要 计算,用了 camer3d.convertToUINode , camer3d.worldToScreen 都转换不到正确的2d 坐标,急需帮助,希望大佬们能帮帮忙,在线等,在次感谢。
看看这个 应该对你有帮助
https://gitee.com/yeshao2069/CocosCreatorDemos/tree/v3.5.x/demo/3d/Creator3.5.0_3D_ModelText
谢谢,我先看看
注意有坑,camer3d.convertToUINode在start函数里执行转换会得到一个很大的坐标。但是放在update里执行就正确了。昨晚也被这个问题困扰,本来游戏启动就把血条ui放在角色头顶,结果在start函数里用camer3d.convertToUINode初始化血条位置,得到一个4位数以上大小的位置。后面在update里执行位置转换就正常了。所以camer3d.convertToUINode必须在start函数后延迟一帧执行才有效。
不止convertToUINode,其他的坐标转换函数也不能在start里执行。比如worldToScreen 或者 screenToWorld都不行。
@jare creator3.x都做到3.5版了,居然没人注意到这个问题。
你的案例在脚本的start函数执行无效。要在update里执行
如何真正的在3d上面绘制文字啊,比如3d背面的文字是看不见的,目前这样的绘制2d永远都会覆盖3d
以下是验证camer3d.convertToUINode 不能在start函数里进行3d坐标到2d坐标转换的结果
可以看到相同的坐标转换:
在start里转换得到的结果是(x: 960, y: 0, z: 0.5)
在start里延迟0.1秒后再换算结果是 (x: 63.71208336401867, y: 29.342336007415497, z: 0.9450777565881177)。
相同的转换函数,在不同的阶段执行会得到不同的结果,吓人。只有第二个是正确的
好的,看我上面最新的代码和运行结果截图。很清晰知道原因。
个人怀疑是start阶段,摄像头组件还没初始化好。所以在start里做坐标转换是错误的。你们可以把摄像头初始化的逻辑放到onLoad里执行更好一点。然后加个文档,说明不能在onLoad里做坐标转换。
你好,你这个demo 能提供下吗。
谢了哈啊。。
贴个面片?
Quad
方案参考
你好,我想在问你个问题哈,用这个方法convertToUINode,延迟0.1s后,获取的坐标终于正常了, 3d物体有z坐标,我2d物体,要固定放在3d物体头顶上,因为z坐标不一定,又获取不到3d物体的真实高度,要怎么才能知道y坐标要加多少呢?
在3d物体头顶上,创建一个空节点,用这个节点的位置转换为UI坐标,这样就可以了
你好,我也是在3d头顶上创建了一个空节点,然后把UI信息的node ,添加在这个空节点上,最终在将3d头顶上的空节点坐标设置为3d转化后的UI坐标,但还是不行,效果图这样的
3个球都是一样大的,然后z坐标不一样,我现在是y加了个固定值,所以有误,不知道y坐标怎么随z坐标而改动。
你好,关于你提问的 camera3d.convertToUINode 进行转换导致获取的坐标有问题,我们有提交 issue 记录并跟进这个问题 https://github.com/cocos/cocos-engine/issues/12261
我们尝试在目前的最新版本 3.7.1 版本上进行复现,目前暂时无法复现你的问题。可否 使用 3.7.1 版本上帮我们验证这个问题,如果还存在问题,那么可以提交一个 demo 给我们吗?
感谢你的反馈!
Prj3_7_assets.zip (5.4 KB)
用3.7验了一次,还是有bug。上面截图注明得很清楚,相同的坐标在start 里执行和 在start结束之后再执行结果不一样,start结束之后的那个结果是正确的。项目也上传,你可以自己测一下。
嗯,昨天多次测试之后,引擎组大概定位到问题,会尽快修复,感谢
可以查看上面的 issue 上最新的进展。







