我需要做一个血条跟随角色的功能,所以需要血条每帧根据目标角色位置来更新自身在canvas上的位置,经过查询API后我找到了Camera.worldToScreen方法,但是调用后的结果却和预想的不同,首先我先附上官方文档的描述

为了消除歧义,这里的世界空间坐标,就是下面的世界坐标系下的坐标对吧?

然后我调用代码和印出的结果如下:
import { _decorator, Camera, Component, Node, Vec3 } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘RoleUIArea’)
export class RoleUIArea extends Component {
@property(Camera)
tragetCamera:Camera;
@property(Node)
traget:Node;
start() {
let posFromScreen = new Vec3();
let worldPos = new Vec3(0,0,0);//{...this.traget.position};
posFromScreen= this.tragetCamera.worldToScreen(worldPos);
console.log("tragetCamera:",this.tragetCamera);
console.log("worldToScreen posFromScreen:",posFromScreen);
this.node.setPosition(posFromScreen);
}
update(deltaTime: number) {
}
}
印出

这个结果很明显是不对的, 这个球体的世界坐标就是(0,0,0)但它并不在屏幕中心(设计分辨率1280x720)


而且不论相机如何移动,结果始终一样.
所以结果上来说,这个方法更像是"将视口坐标转屏幕坐标"而非是从世界坐标,是我哪里调用错了吗?还是对于哪些概念理解错了,请指正,谢谢大家

, 还有2d的情况下错的是怎么个情况