Skip to content

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

Open
@finscn

Description

@finscn

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions