/******************************************************************************* * 创建: 2022年11月23日 * 作者: 水煮肉片饭(27185709@qq.com) * 描述: 数据看板 * 节点挂上该组件,就可以在游戏运行过程中,直观看到节点任意属性(包括节点脚本中的属性) * 可以图形化展示以下四种数据: * 轮廓盒子: 随节点旋转,代表节点的实时矩形 * 碰撞盒子: 不随节点旋转,一般代表碰撞范围 * 自定义参数: 节点自身属性,以及节点任意脚本中的属性 * 锚点: 锚点位置会显示一个小红点 * 自定义参数(配置想监控的数据): * wp: 世界坐标,即相对于屏幕左下角的坐标 * radian: 节点弧度,单位π * matrix: 变换矩阵 * parent: 父节点 * children: 子节点 * 自身属性: scale,width,opacity等 * 脚本属性: 脚本实例对象的属性 * ↓↓参数可以用3种分隔符隔开↓↓ * 英文逗号、英文冒号、空格 * ————————————————————————举个栗子———————————————————————— * 脚本: Hero * 参数: wp,scale,angle,#angle,#hp * 显示结果:世界坐标,节点scale,节点angle,Hero对象的angle,Hero对象的hp * ————————————————————————温馨提示———————————————————————— * 初始化的时候,设置全局变量window['DATABOARD'] = false可屏蔽本项目所有DataBoard,不会产生任何额外开销\n *******************************************************************************/ window['DATABOARD'] = true; const ANCHOR_SIZE = 20; //锚点的大小 const LINEHEIGHT = 1.2; //行高是字体大小的多少倍 const { ccclass, property, executeInEditMode, menu } = cc._decorator; @ccclass @executeInEditMode @menu('Comp/DataBoard') export default class DataBoard extends cc.Component { @property private _isOutlineBoxActive: boolean = false; @property({ displayName: CC_DEV && '轮廓盒子', tooltip: CC_DEV && '随节点旋转,代表实时轮廓' }) private get isOutlineBoxActive() { return this._isOutlineBoxActive }; private set isOutlineBoxActive(value: boolean) { this._isOutlineBoxActive = value; this.outlineBoxNode.active = value; } @property private _outlineBoxColor: cc.Color = new cc.Color(Math.random() * 255, Math.random() * 255, Math.random() * 255); @property({ displayName: CC_DEV && '······颜色', visible() { return this.isOutlineBoxActive } }) private get outlineBoxColor() { return this._outlineBoxColor }; private set outlineBoxColor(value: cc.Color) { this._outlineBoxColor = value; this.outlineBoxNode.color = value; } @property private _outlineBoxOpacity: number = 100; @property({ min: 0, max: 255, step: 1, slide: true, displayName: CC_DEV && '······透明度', visible() { return this.isOutlineBoxActive } }) private get outlineBoxOpacity() { return this._outlineBoxOpacity }; private set outlineBoxOpacity(value: number) { this._outlineBoxOpacity = value; this.outlineBoxNode.opacity = value; } @property private _isCollideBoxActive: boolean = true; @property({ displayName: CC_DEV && '碰撞盒子', tooltip: CC_DEV && '不随节点旋转,代表碰撞范围' }) private get isCollideBoxActive() { return this._isCollideBoxActive }; private set isCollideBoxActive(value: boolean) { this._isCollideBoxActive = value; this.collideBoxNode.active = value; } @property private _collideBoxColor: cc.Color = new cc.Color(Math.random() * 255, Math.random() * 255, Math.random() * 255); @property({ displayName: CC_DEV && '······颜色', visible() { return this.isCollideBoxActive } }) private get collideBoxColor() { return this._collideBoxColor }; private set collideBoxColor(value: cc.Color) { this._collideBoxColor = value; this.collideBoxNode.color = value; } @property private _collideBoxOpacity: number = 100; @property({ min: 0, max: 255, step: 1, slide: true, displayName: CC_DEV && '······透明度', visible() { return this.isCollideBoxActive } }) private get collideBoxOpacity() { return this._collideBoxOpacity }; private set collideBoxOpacity(value: number) { this._collideBoxOpacity = value; this.collideBoxNode.opacity = value; } @property private _isCustomLabelActive: boolean = true; @property({ displayName: CC_DEV && '自定义参数', tooltip: CC_DEV && '配置显示的属性内容' }) private get isCustomLabelActive() { return this._isCustomLabelActive }; private set isCustomLabelActive(value: boolean) { this._isCustomLabelActive = value; this.customLabelNode.active = value; } @property({ displayName: CC_DEV && '······脚本', tooltip: CC_DEV && '监控哪个脚本', visible() { return this.isCustomLabelActive; } }) private customComponentName: string = ''; @property private _customLabelString: string = 'x,y'; @property({ multiline: true, displayName: CC_DEV && '······参数', tooltip: CC_DEV && "—————支持的参数————\nwp:世界坐标\nradian:角度(单位:π)\nmatrix:变换矩阵\nparent:父节点\nchildren:子节点\n自身属性:scale,width,opacity等\n脚本属性:脚本实例对象的属性\n↓↓参数可以用3种分隔符隔开↓↓\n英文逗号、英文冒号、空格\n————举个栗子————\n脚本:Hero\n参数:wp,scale,angle,#angle,#hp\n显示结果:\n世界坐标,节点scale,节点angle,Hero对象的angle,Hero对象的hp\n————温馨提示————\n初始化的时候,设置全局变量\nwindow['DATABOARD'] = false\n可屏蔽本项目所有DataBoard,不会产生任何额外开销", visible() { return this.isCustomLabelActive } }) private get customLabelString() { return this._customLabelString }; private set customLabelString(value: string) { this._customLabelString = value; this.customLabelStringSplit = value .replace(/,/g, '_~_').replace(/:/g, '_!_').replace(/ /g, '_@_') .replace(/(?