chrome打印当前场景所有节点名称及节点所带组件信息

###如题,水一帖,chrome打印当前creator场景所有节点名称及节点所带组件信息,不喜轻喷
###这是我测试的打印结果

这是根据ts代码转出来的js,用chrome打开creator游戏后,调出控制台,然后把这段代码复制进入运行就能看到效果了,ts文件在下面

var scene = cc.director.getScene();
var nodeList = new Array();
var total = 0;
var startTime = new Date().valueOf();
var searchNode = function (node) {
    nodeList.push(node);
    total++;
    for (var i = 0; i < node.childrenCount; i++) {
        searchNode(node.children[i]);
    }
};
var startSearchNode = function () {
    total = 0;
    startTime = new Date().valueOf();
    nodeList = new Array();
    searchNode(scene);
    console.log("searchNode total:" + total + " time:" + (new Date().valueOf() - startTime));
};
var nodeComponentMsglist = [];
var getComponentList = function () {
    nodeComponentMsglist = [];
    nodeList.forEach(function (node) {
        var obj = { nodeName: node.name, componentCount: node._components.length, componentNameListText: null };
        var componentNameList = node._components.map(function (component) {
            return component.name;
        });
        obj.componentNameListText = componentNameList.join(' ');
        nodeComponentMsglist.push(obj);
    });
};
var outputNodeList = function () {
    startSearchNode();
    getComponentList();
    console.table(nodeComponentMsglist);
};
outputNodeList();

ts 代码如下:

let scene = cc.director.getScene();
let nodeList: Array<cc.Node> = new Array<cc.Node>();
let total = 0;
let startTime = new Date().valueOf();
let searchNode = (node: cc.Node) => {
    nodeList.push(node);
    total++;    
    for (let i = 0; i < node.childrenCount; i++) {
        searchNode(node.children[i]);
    }
}

let startSearchNode = () => {
    total = 0;
    startTime = new Date().valueOf();
    nodeList = new Array<cc.Node>();
    searchNode(scene);
    console.log(`searchNode total:${total} time:${(new Date().valueOf() - startTime)}`);
}

let nodeComponentMsglist: Array<{ nodeName: string, componentCount: number, componentNameListText: string }> = [];
let getComponentList = () => {
    nodeComponentMsglist = [];
    nodeList.forEach((node) => {
        let obj = { nodeName: node.name, componentCount: node._components.length, componentNameListText: null };
        let componentNameList = node._components.map((component: cc.Component) => {
            return component.name;
        });
        obj.componentNameListText = componentNameList.join(' ');
        nodeComponentMsglist.push(obj);
    });
}

let outputNodeList = () => {
    startSearchNode();
    getComponentList();
    console.table(nodeComponentMsglist);
}

outputNodeList();

###这是获取当前场景所有节点挂载脚本的ts代码,注释掉的部分是获取所有用户组件脚本的函数:
let scene = cc.director.getScene();
let nodeList: Array<cc.Node> = new Array<cc.Node>();
let total = 0;
let startTime = new Date().valueOf();
let searchNode = (node: cc.Node) => {
nodeList.push(node);
total++;
for (let i = 0; i < node.childrenCount; i++) {
searchNode(node.children[i]);
}
}

let startSearchNode = () => {
    total = 0;
    startTime = new Date().valueOf();
    nodeList = new Array<cc.Node>();
    searchNode(scene);
    console.log(`searchNode total:${total} time:${(new Date().valueOf() - startTime)}`);
}

// let userScriptComponentNameList: Array<string> = [];
// let searchUserScriptComponent = () => {
//     userScriptComponentNameList = [];
//     if (!CC_EDITOR) {
//         return;
//     }
//     let registeredClassObj = cc.js['_registeredClassNames'];
//     for (let propertyStr in registeredClassObj) {
//         if (registeredClassObj.hasOwnProperty(propertyStr)) {
//             let cid = registeredClassObj[propertyStr].prototype.__cid__;
//             let componentName = registeredClassObj[propertyStr].prototype.__classname__;
//             if (cid !== componentName) {
//                 userScriptComponentNameList.push(componentName);
//             }
//         }
//     }
// }

let userScriptComponentTotal = 0;
let nodeComponentMsglist: Array<{ nodeName: string, componentCount: number, componentNameListText: string }> = [];
let getComponentList = () => {
    nodeComponentMsglist = [];
    userScriptComponentTotal = 0;
    nodeList.forEach((node) => {
        let obj = { nodeName: node.name, componentCount: node._components.length, componentNameListText: null };
        var componentNameList: Array<string> = [];
        node._components.forEach((component: cc.Component) => {
            let cid = component['__proto__']['__cid__'];
            let userScriptComponentName = component['__proto__']['__classname__'];
            if (cid !== userScriptComponentName) {
                componentNameList.push(userScriptComponentName);
            }
        });
        obj.componentNameListText = componentNameList.join(' ');
        obj.componentCount = componentNameList.length;
        userScriptComponentTotal += componentNameList.length;
        nodeComponentMsglist.push(obj);
    });
}

let outputNodeList = () => {
    startSearchNode();
    getComponentList();
    console.table(nodeComponentMsglist);
    console.log(`用户脚本数量:${userScriptComponentTotal}`);
}

outputNodeList();

###在我的项目里面的测试结果


###这是获取当前场景所有节点挂载脚本的ts代码代码对应的js代码
var scene = cc.director.getScene();
var nodeList = new Array();
var total = 0;
var startTime = new Date().valueOf();
var searchNode = function (node) {
nodeList.push(node);
total++;
for (var i = 0; i < node.childrenCount; i++) {
searchNode(node.children[i]);
}
};
var startSearchNode = function () {
total = 0;
startTime = new Date().valueOf();
nodeList = new Array();
searchNode(scene);
console.log(“searchNode total:” + total + " time:" + (new Date().valueOf() - startTime));
};
// let userScriptComponentNameList: Array = [];
// let searchUserScriptComponent = () => {
// userScriptComponentNameList = [];
// if (!CC_EDITOR) {
// return;
// }
// let registeredClassObj = cc.js[’_registeredClassNames’];
// for (let propertyStr in registeredClassObj) {
// if (registeredClassObj.hasOwnProperty(propertyStr)) {
// let cid = registeredClassObj[propertyStr].prototype.cid;
// let componentName = registeredClassObj[propertyStr].prototype.classname;
// if (cid !== componentName) {
// userScriptComponentNameList.push(componentName);
// }
// }
// }
// }
var userScriptComponentTotal = 0;
var nodeComponentMsglist = [];
var getComponentList = function () {
nodeComponentMsglist = [];
userScriptComponentTotal = 0;
nodeList.forEach(function (node) {
var obj = { nodeName: node.name, componentCount: node._components.length, componentNameListText: null };
var componentNameList = [];
node._components.forEach(function (component) {
var cid = component[‘proto’][‘cid’];
var userScriptComponentName = component[‘proto’][‘classname’];
if (cid !== userScriptComponentName) {
componentNameList.push(userScriptComponentName);
}
});
obj.componentNameListText = componentNameList.join(’ ');
obj.componentCount = componentNameList.length;
userScriptComponentTotal += componentNameList.length;
nodeComponentMsglist.push(obj);
});
};
var outputNodeList = function () {
startSearchNode();
getComponentList();
console.table(nodeComponentMsglist);
console.log("\u7528\u6237\u811A\u672C\u6570\u91CF\uFF1A" + userScriptComponentTotal);
};
outputNodeList();

1赞

cc-inspector可以考虑集成该功能:smile:

期待新版本

更新了一下,可以只显示用户定义的脚本了