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

news2024/11/19 9:22:59

参考文章: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 - 简书

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RPG项目01_场景及人物动画管理器

基于“RPG项目01_UI登录”&#xff0c;新建一个文件夹名为Model&#xff08;模型&#xff09; 将资源场景拖拽至Model中 找到相应场景双击进入 红色报错部分Clear清掉即可&#xff0c;我们可以重做 接下来另存场景 起名为Game 点击保存 场景就保存至Scene中了 在文件夹下新创建…

jsp前端输入中文数据传到controller变成问号?的解决办法

还是写老师布置的实验的时候&#xff0c;解决了xml文件找不到的问题之后又遇到新的问题&#xff1a;前端登录处输入用户名和密码&#xff0c;结果明明输入的用户名是对的密码也是对的&#xff08;输入的用户名是中文&#xff09;&#xff0c;它就是显示用户名或密码错误。然后我…

2012-2021年银行数字化转型程度数据(根据年报词频计算)

2012-2021年银行数字化转型程度&#xff08;根据年报词频计算&#xff09; 1、时间&#xff1a;2012-2021年 2、指标&#xff1a;银行名称、年份、数字化转型程度 3、范围&#xff1a;52家银行&#xff08;上海银行、中信银行、中国银行、交通银行、光大银行、兰州银行、兴业…

电子学会C/C++编程等级考试2021年06月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字三角形问题 (图1) 图1给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注意:路径上的每一步只能从一个数走到下一层上和它…

熬夜会秃头——Beta冲刺总结随笔

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标总结Beta冲刺团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、Beta冲刺开始前设立的任务完成…

ios 长传发布审核+safari浏览器,直接安装ipa文件

蒲公英二维码方法 个人开发者账号发布证书AD-hoc 描述文件蒲公英上传链接通过苹果safari 浏览器下载IPA包 浏览器下载方法 前置条件 1.下载 ipa 包的设备的 uuid 已加入 苹果测试设备列表如何添加到测试列表 2.web 服务, 文件服务. 3.需要AD-hoc 描述文件 添加链接描述 1.创…

微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶以及常见问题解答(二)

微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶及常见问题解答&#xff08;二&#xff09; Power Pages 学习实践进阶 微软 Power Platform 零基础 Power Pages 网页搭建教程学习实践进阶及常见问题解答&#xff08;二&#xff09;Power Pages 核心工具和组…

动态规划 | 背包问题总结

参考-代码随想录 在讲解背包问题的时候&#xff0c;我们都是按照如下五部来逐步分析&#xff0c;相信大家也体会到&#xff0c;把这五部都搞透了&#xff0c;算是对动规来理解深入了。 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式 dp数组如何初始…

线性表——(3)线性表的链式存储及其运算的实现

一、前言&#xff1a; 由于顺序表的存储特点是用物理上的相邻关系实现逻辑上的相邻关系&#xff0c;它要求用连续的存储单元顺序存储线性表中各数据元素&#xff0c;因此&#xff0c;在对顺序表进行插入、删除时&#xff0c;需要通过移动数据元素来实现&#xff0c;这影响了运行…

玩转大数据4:大数据的崛起与应用领域探索

图片来源网络 引言 在当今数字化时代&#xff0c;大数据正以前所未有的速度和规模崛起。大数据的出现不仅改变了企业和组织的经营模式&#xff0c;也对我们的社会生活带来了深刻的影响。Java作为一种广泛使用的编程语言&#xff0c;在大数据领域发挥着重要的作用。本文将重点…

UniGui应用自适应PC和Mobile

先按常规方式创建UniGui PC端应用&#xff0c;然后按下图添加Mobile MainForm和Mobile Login Form&#xff08;需要时&#xff09;&#xff0c;添加后打开网址时UNIGUI应用会根据客户端类型自动调用PC或移动端模式。

解决windows蓝牙耳机连接没有声音和声音断断续续的问题

我的蓝牙耳机连接手机一点问题没。然后连接电脑显示连接但是没声音。网上找个各种设置也不不管用。后来找到了一个办法&#xff0c;亲测管用。 如果你的电脑主板有wifi模块&#xff0c;就把WiFi天线插上。并且打开wifi开关&#xff0c; 就算你不用wifi&#xff0c;也请打开WiF…

Mac 安装 Django 并连接 MySQL

一、下载安装运行Django看官方教程就好了&#xff0c;网址&#xff1a;Django 安装_w3cschool 二、连接MySQL&#xff08;我用的是pymysql和mysqlclient&#xff09;&#xff1a; 1、创建好项目后找到这个文件 2、修改当中的连接信息&#xff0c;将这些信息改成你自己的就好了…

Mysql的页结构详解

1.数据库的存储结构&#xff1a;页 索引结构为我们提供了搞笑的查找方式&#xff0c;索引信息和数据记录都在保存在文件上的&#xff0c;准确地说&#xff0c;是保存在“页”结构中。 1.1磁盘与内存的基本交互单位&#xff1a;页 InnoDB将数据划分为若干个页&#xff0c;Inn…

【爬虫逆向分析实战】某笔登录算法分析——本地替换分析法

前言 作者最近在做一个收集粉币的项目&#xff0c;可以用来干嘛这里就不展开了&#x1f601;&#xff0c;需要进行登录换算token从而达到监控收集的作用&#xff0c;手机抓包发现他是通过APP进行计算之后再请求接口的&#xff0c;通过官网分析可能要比APP逆向方便多&#xff0…

2023-12-01 LeetCode每日一题(找出叠涂元素)

2023-12-01每日一题 一、题目编号 2661. 找出叠涂元素二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。 从下标 0 开始遍历 arr 中的每…

【SpringBoot3+Vue3】七【后续2】【番外篇】- (使用docke部署)

目录 一、maven打包后端服务 1、clean 2、package 3、查看jar包 二、部署java后端服务 1、使用dockerfile构建一个java17的镜像 1.1 使用dokcerfile构建容器命令 1.2 方式一 将jar打包进容器镜像 1.3 方式二 jar不打包进容器镜像&#xff0c;通过映射主机目录映射方式…

C/C++ 内存管理(1)

文章目录 C/C 内存划分静态和动态内存C语言的动态内存分配函数mallocfreecallocrealloc 常见内存使用错误 C/C 内存划分 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结 束时这些存储…

【QuickSort】单边快排思路及实现

思路&#xff1a; &#xff08;1&#xff09;首先定义一个递归函数&#xff1a;qucikSort(int [ ] arr,int l,int r)。函数的定义&#xff1a;给定一个数组arr&#xff0c;对它在[l,r]这个区间内的元素进行排序&#xff0c;从而使得整个数组在[l,r]这个区间内有序。 &#xff0…

NRF24L01 无线收发模块与 Arduino 的应用

NRF24L01 是一款常用的无线收发模块&#xff0c;与 Arduino 兼容性良好&#xff0c;可以用于实现无线通信和数据传输。本文将介绍如何将 NRF24L01 模块与 Arduino 配合使用&#xff0c;包括硬件的连接和配置&#xff0c;以及相应的代码示例。 一、引言 NRF24L01 是一款基于 2.…