求助代码创建一个2d节点的问题

  • 编辑器版本:CocosCreator 3.0 rc偷跑版

没有3D开发经验,然后又想用3.0,这里碰到了一个问题

起因

我想弄一个常驻节点(所有项目通用的),原来是直接在编辑器弄的,但是我现在想用代码的方式创建,1是可以防止忘记拖或者更新的问题,2是方便把控。

经过

我用编辑的Canvas进行参数替换,代码如下

        this.uiNode = new Node('UI');
        this.uiNode.layer = Layers.Enum.UI_2D;

        // 添加widget
        let widget = this.uiNode.addComponent(Widget);
        widget.top = 0;
        widget.left = 0;
        widget.bottom = 0;
        widget.left = 0;
        // widget.updateAlignment();

        director.getScene()!.insertChild(this.uiNode, 999);

        // // 添加UITransform
        // let uiTransform = this.uiNode.addComponent(UITransform);
        // uiTransform.setContentSize(750, 1334);
        // uiTransform.setAnchorPoint(0.5, 0.5);
        // 添加camera
        let node = new Node('Camera');
        this.uiNode.addChild(node);
        let camera = node.addComponent(Camera);
        camera.enabled = true;
        // camera.visibility = 41943040;
        camera.priority = 1073741824;
        camera.clearFlags = gfx.ClearFlag.DEPTH_STENCIL;
        camera.clearColor = math.color(0, 0, 0);
        camera.projection = renderer.scene.CameraProjection.ORTHO;
        camera.far = 2000;
        // 添加canvas
        let canvas = this.uiNode.addComponent(Canvas);
        console.log(canvas);
        canvas.cameraComponent = camera;
        canvas.alignCanvasWithScreen = true;


        let test = new Node();
        test.addComponent(Label).string = 'here=====';
        this.uiNode.addChild(test);

结果


label是显示出来啊了,可是后面有道光,感觉跟摄像机有关。

排查


我将代码的canvas和编辑器创建的canvas进行对比,发现

  1. _camera的enable是false,我设置为true也没用
  2. 我使用了widget,但是UITransform的大小,始终是100,100 除非我进行设置

经验有限,实在排查不出来,请问有哪位大佬可以指点下。

找到问题了,所有子节点都要设置layer,设置default并不是跟父节点产生关系,不知道这种结果是不是符合官方的设计初衷的。@jare