cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)

参考文章:Cocos 3.x 层级Layer - 简书

2D镜头跟随应该怎么实现呢 - Creator 3.x - Cocos中文社区

关于多个摄像机,动态添加节点的显示问题,需要动态修改layer?

场景:在制作摄像机跟随角色移动功能时,新增一个摄像机camera,将这个摄像机负责显示在一个新增的layer上(如ui)。所有效果都实现后,底层摄像机跟随角色移动,上层ui不动,这些都是没有问题的。只不过动态添加到layer为ui的节点就会出现,原因是动态添加的节点layer被设置成了default,并没有跟随父节点的layer,所以需要手动修改一下。

注意事项:动态设置layer,并且必须等待节点出现后设置。核心代码:

node.walk((child)=>{
    child.layer = 2;
})

layer的值可以在Visibility选择那里查看。勾选上你需要的选项。

源代码:

import { _decorator, Component, Node,EventTarget,input, Input, EventTouch,EventKeyboard,KeyCode,Vec2,find,Animation,AnimationClip,TiledMap,TiledLayer,TiledTile, Sprite,resources,instantiate,Texture2D, SpriteFrame, UITransform,Size,Vec3, Script,Prefab,Tween,tween, v2,Quat, Label,Layers } from 'cc';
import worldControl from './worldControl'
import eventBus from '../common/eventBus'
import playerData from '../data/playerData';
import { goodsControl } from './goodsControl';
const { ccclass, property } = _decorator;
const eventTarget = new EventTarget();
//背包系统
@ccclass('boxControl')
export class boxControl extends Component {
    playerData:playerData=null;    //玩家数据实例。
    @property(worldControl)     //这种写法会在cocos creator编辑器上增加一个可以绑定的属性。
    worldControl:worldControl=null;
    indexActive=-1;//当前选中项
    start() {
        // eventTarget.on('toggle_goods_select', this.toggle, this);
        // setTimeout(()=>{
        //     eventTarget.emit('toggle_goods_select',{val:99});
        // },2000)
        // console.log('worldControl:',this.worldControl)
        
        // setTimeout(()=>{
            this.getFastGoods();
        // },2000);
        
        input.on(Input.EventType.KEY_DOWN, (event)=>{
            // console.log('按下',event.keyCode,KeyCode.DIGIT_1)
            switch(event.keyCode) {
                case KeyCode.DIGIT_1:
                    this.select(0);break;
                case KeyCode.DIGIT_2:
                    this.select(1);break;
                case KeyCode.DIGIT_3:
                    this.select(2);break;
                case KeyCode.DIGIT_4:
                    this.select(3);break;
                case KeyCode.DIGIT_5:
                    this.select(4);break;
                case KeyCode.DIGIT_6:
                    this.select(5);break;
                case KeyCode.DIGIT_7:
                    this.select(6);break;
                case KeyCode.DIGIT_8:
                    this.select(7);break;
            }
        }, this);
        input.on(Input.EventType.KEY_UP, (event)=>{
            // console.log('释放')
            switch(event.keyCode) {
                case KeyCode.NUM_1: //小键盘数字
                break;
                case KeyCode.DIGIT_1: //英文字母上的数字
                break;
            }
        }, this);
    }
    //刷新数据
    updateData(){
        this.getFastGoods();
    }
    //获取快捷物品
    getFastGoods(){
        this.playerData=playerData.Instance();
        let goodsList=this.playerData.knapsackList; //背包列表
        let arr=[1,2,3,4,5,6,7,8];
        // let parent=this.node;
        let parent=find('Canvas/functionLayer/box');
        console.log(parent,'fuqin')
        let a=find('Canvas/functionLayer/skillBtn')
        resources.load('prefab/cat', Prefab,  (err, res)=> { 
            let arrow = instantiate(res);
            arrow.setPosition(new Vec3(0,0,0));
            // arrow.layer=Layers.Enum.ui
            arrow.layer=(2 << 0)
            console.log(Layers.Enum.ui,Layers.Enum.DEFAULT,'uiui')
            arrow.setParent(a);
            
            arrow.walk((child)=>{
                
                child.layer = (2 << 0)
                console.log(arrow.layer,'layer')
            })
            // new AudioMgr().playOneShot('sound/qiang1'); //播放音效
        })
        //goods:物品
        resources.load('prefab/goods', Prefab,  (err, res)=> { 
            arr.map((v,o)=>{
                if(goodsList[o]){   //存在则渲染。
                    let goods = instantiate(res);
                    goods.setParent(parent);
                    //等待加载完成后修改
                    goods.walk((child)=>{
                        child.layer = (2 << 0)
                    })
                    goods.setPosition(new Vec3(0,0,0));
                    goods.getComponent(Sprite).spriteFrame = goodsList[o].spriteFrame;
                    
                    let select:Node=goods.getChildByName('select');
                    select.active=false;
                    let number:Node=goods.getChildByName('number');
                    number.getComponent(Label).string = goodsList[o].num ? `${goodsList[o].num}` : '';
                    
                    let g=goods.getComponent(goodsControl)
                    g.index=o;  //添加下标索引
                }
                
            })
        })
    }
    //选中某项
    select(index){
        // index=index-1;//下标-1
        this.indexActive=index;
        // console.log('选中项:',index)
        let children=this.node.children;
        children.map((v,o)=>{
            let select:Node=v.getChildByName('select');
            if(o==index){
                select.active=true;
            }else{
                select.active=false;
            }
        });
    }
    
    onEnable () {
        //事件监听
        eventBus.on('toggle_goods_select', this.toggle, this);
    }
    onDisable () {
        eventBus.off('toggle_goods_select', this.toggle, this);
    }
    //切换选中项
    toggle (val,obj) {
        console.log('切换菜单',val,obj);
        // this.select(val.index);
    }
    update(deltaTime: number) {
        
    }
}

参考教程:

Cocos 3.x 层级Layer - 简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/208616.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用

2023亚马逊云科技re:Invent全球大会进入第三天&#xff0c;亚马逊云科技数据和人工智能副总裁Swami Sivasubramanian博士在周三的主题演讲中&#xff0c;为大家带来了关于亚马逊云科技生成式AI的最新能力、面向生成式AI时代的数据战略以及借助生成式AI应用提高生产效率的精彩分…

Echarts大屏可视化_05 折线图的定制开发

继续跟着pink老师学习Echarts相关内容&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 折线图1 1.引入 折线图选取示例地址 标题没有用到就给他删了 直接引入 注意这里是line下面的chart 获取dom元素一定不…

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP&#xff0c;IT管理者必须手动选出可用的 ip&#xff0c;这太耗时了…

抖音获客新攻略:如何通过短视频获取更多潜在客户

**一、开篇** **引子**&#xff1a;随着移动互联网的普及&#xff0c;短视频平台已成为人们获取信息、分享生活的重要渠道。抖音作为其中的佼佼者&#xff0c;以其独特的创意和精美的视频内容吸引了大量用户。对于企业而言&#xff0c;如何利用抖音获取潜在客户&#xff0c;已成…

巨擘OpenMMLab将开源综合音频生成项目:Amphion

项目地址&#xff1a;https://github.com/open-mmlab/Amphion TTS: Text-to-Speech Amphion achieves state-of-the-art performance when compared with existing open-source repositories on text-to-speech (TTS) systems. It supports the following models or architect…

网络运维与网络安全 学习笔记2023.12.1

网络运维与网络安全 学习笔记 第三十二天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…

怎么让百度快速收录,百度SEO收录工具

百度收录对于一个网站的重要性不言而喻。拥有良好的百度收录意味着网站能够更好地被搜索引擎收录&#xff0c;为用户提供更精准的搜索结果。而怎样实现百度快速收录成为了许多网站管理员关注的焦点。 百度收录的重要性 百度是国内最大的搜索引擎之一&#xff0c;拥有数以亿计的…

春秋云镜:CVE-2022-28512

靶标介绍&#xff1a; Fantastic Blog (CMS)是一个绝对出色的博客/文章网络内容管理系统。它使您可以轻松地管理您的网站或博客&#xff0c;它为您提供了广泛的功能来定制您的博客以满足您的需求。它具有强大的功能&#xff0c;您无需接触任何代码即可启动并运行您的博客。 该…

应用于智慧金融的AI边缘计算盒子+AI算法软硬一体化方案

传统金融营业厅存在运营管理模式落后、资源投放不平衡、从业人员培训效果不达预期、客户体验割裂等普遍现象&#xff1b; 部署英码数字金融解决方案&#xff0c;将助力企业从传统金融模式快速向数字金融模式转变&#xff0c;可针对每一个客户定制个性化“一对一”服务&#xff…

Mapper文件夹在resource目录下但是网页报错找不到productMapper.xml文件的解决

报错如下&#xff1a; 我的Mapper文件夹在resourse目录下但是网页报错找不到productMapper.xml。 结构如下&#xff1a;代码如下&#xff1a;<mappers><mapper resource"com/dhu/mapper/productMapper.xml" /> </mappers> 这段代码是在mybatis-co…

Python生成器:优雅而高效的迭代器

Python是一种强大而灵活的编程语言&#xff0c;拥有丰富的标准库和特性功能&#xff0c;其中之一就是 生成器。 生成器 是Python中一种非常实用的特性&#xff0c;它能帮助我们编写高效的代码&#xff0c;尤其是在处理大量数据时&#xff0c;它能够帮助我们更有效地处理迭代任…

ESP32-Web-Server编程- 通过滑动条向 Web 提交数据

ESP32-Web-Server编程- 通过滑动条向 Web 提交数据 概述 上一节我们讲述了通过文本框向 ESP32 发送字符串、数字。有时&#xff0c;我们需要向 ESP32 发送连续的值&#xff0c;这种需求可以通过在网页端实现滑动条来实现。 需求及功能解析 本节演示如何在 ESP32 上部署一个…

使用MD5当做文件的唯一标识,这样安全么?

使用MD5作为文件唯一标识符可靠么&#xff1f; 文章目录 使用MD5作为文件唯一标识符可靠么&#xff1f;什么是MD5&#xff1f;MD5的用途MD5作为文件唯一标识的优劣优势劣势 使用MD5作为文件唯一标识的建议其他文件标识算法结束语 什么是MD5&#xff1f; MD5&#xff08;Messag…

【doccano】文本标注工具——属性级情感分析标注自己的业务数据

笔记为自我总结整理的学习笔记&#xff0c;若有错误欢迎指出哟~ 【doccano】文本标注工具——属性级情感分析标注自己的业务数据 1.说明2.前提条件3.doccano创建项目4.添加数据集5.添加标签6.标注数据7.导出数据转换格式 1.说明 2.前提条件 确保doccano已经安装完成 可以参考文…

Elasticsearch:对时间序列数据流进行降采样(downsampling)

降采样提供了一种通过以降低的粒度存储时间序列数据来减少时间序列数据占用的方法。 指标&#xff08;metrics&#xff09;解决方案收集大量随时间增长的时间序列数据。 随着数据老化&#xff0c;它与系统当前状态的相关性越来越小。 降采样过程将固定时间间隔内的文档汇总为单…

测试面试:不明白什么是质量保障

这是我面试经常问的一个问题&#xff0c;很多人并不明白其中的区别。 如上图&#xff0c;整体的质量体系架构图相对简单&#xff0c;主要包含三个部分&#xff1a;愿景&#xff08;高质量交付&#xff0d;快、好&#xff09;、能力&#xff08;中间三层不同的能力&#xff09;和…

kerberos详解

一、介绍 kerberos概述 Kerberos始于20世纪80年代早期麻省理工学院&#xff08;MIT&#xff09;的一个研究项目&#xff0c;是一个网络身份验证系统。Kerberos提供的完整定义是安全的、单点登录的、可信的第三方相互身份验证服务。 认证过程 相关概念 KDC&#xff08;key D…

HTML5 的全局属性 hidden 和 display:none 的关系

目录 1&#xff0c;hidden 和 display:none 的关系2&#xff0c;其他隐藏元素的方式2.1&#xff0c;语意上的隐藏2.2&#xff0c;视觉上的隐藏 1&#xff0c;hidden 和 display:none 的关系 hidden - MDN 参考 一句话总结&#xff1a;hidden 是HTML5 新增的全局布尔属性&…

Python | 轻量ORM框架Peewee的基础使用(增删改查、自动创建模型类、事务装饰器)

文章目录 01 简介02 安装03 自动创建模型类04 基础使用4.1 查询4.2 新增4.3 更新4.4 删除 05 事务 01 简介 在使用python开发的过程中&#xff0c;有时需要一些简单的数据库操作&#xff0c;而Peewee正是理想的选择&#xff0c;它是一个小巧而灵活的 Python ORM&#xff08;对…

Hdoop学习笔记(HDP)-Part.7 安装MySQL

七、安装MySQL mysql主从复制的原理&#xff1a; 1&#xff09;master将数据改变记录到二进制日志&#xff08;binary log&#xff09;中&#xff0c;也即是配置文件log-bin指定的文件&#xff08;这些记录叫做二进制日志事件&#xff0c;binary log events&#xff09;&#…