cocos-engine icon indicating copy to clipboard operation
cocos-engine copied to clipboard

希望能提供类似 `getFirstRenderCamera(node)` 的方法, 以及再提供一个获得node对应的所有相机的方法.

Open finscn opened this issue 1 year ago • 2 comments

Use Case

在 2.x 里 有一个 cc.Camera.findCamera(node) 方法 , 在 3.x里没找到对应的. 通过看源码, 发现 getFirstRenderCamera() 基本符合需求, 源码如下:

    public getFirstRenderCamera (node: Node): Camera | null {
        if (node.scene && node.scene.renderScene) {
            const cameras = node.scene.renderScene.cameras;
            for (let i = 0; i < cameras.length; i++) {
                const camera = cameras[i];
                if (camera.visibility & node.layer) {
                    return camera;
                }
            }
        }
        return null;
    }

希望能将这个方法暴露出来. 同时再提供一个 能返回所有对应摄像机的 (返回数组) 方法, 类似下面这种:

    public getRenderCameras (node: Node): Camera[] | null {
        if (!node.scene || !node.scene.renderScene) {
            return null;
        }
        const result: Camera[] = []
        const cameras = node.scene.renderScene.cameras;
        for (let i = 0; i < cameras.length; i++) {
            const camera = cameras[i];
            if (camera.visibility & node.layer) {
                result.push(camera)
            }
        }
        return result.length > 0 ? result : null
    }

但是以上代码 返回的不是 cc.Camera , 需要再包装一下. 一个简单粗暴的方法是 cc.scene.Camera 上再反向引用一下 cc.Camera组件. 这样就可以通过 camera._comp 得到 cc.Camera 了.

.

Problem Description

如上所述

Proposed Solution

No response

How it works

No response

Alternatives Considered

Additional Information

No response

finscn avatar May 15 '24 05:05 finscn

@minggo 希望能有人看到. 这个之前在cocos的某群里交流过, 有类似需求的人还是挺多的.

finscn avatar May 31 '24 06:05 finscn

我们后续会评估,目前资源排不开。

minggo avatar May 31 '24 08:05 minggo