@property属性装饰器。可通过编辑器对脚本属性做调整。

下方是常用类型的列举:

const { ccclass, property } = cc._decorator;
export enum xxxx { aaa, xxx }
import DialogGuide from "./modules/Game/guide/DialogGuide";
/**
 * 属性装饰器测试
 * @author 神兽白泽
 */
@ccclass
export default class PropertyTest extends cc.Component {
    //节点
    @property({ type: cc.Node })
    private stick: cc.Node = null;// private 只有自己能用
    //预制体组件
    @property({ type: cc.Prefab })
    protected pre1: cc.Prefab = null;// protected 只有被继承的类才能用
    //lbl组件
    @property({ type: cc.Label })
    public lbl_desc: cc.Label = null;// public 全都能用
    //动画组件
    @property({ type: cc.Animation })
    private BodyAnim: cc.Animation = null;
    //骨骼动画组件
    @property({ type: sp.Skeleton })
    private CocosAnim: sp.Skeleton = null;
    //坐标
    @property()// { type: cc.Vec3 } 指定 type 被警告,不知道为什么
    private pos_v3: cc.Vec3 = cc.Vec3.ZERO;
    @property({ type: cc.Vec3 })
    private arr_vec3: cc.Vec3[] = [];//如果要数组
    //数字
    @property
    private max_R: number = 80;
    @property({ type: cc.Integer, tooltip: '我也是整数' })
    private zhengshu: number = 100;
    //字符串
    @property()
    private str666: string = '';
    //精灵纹理
    @property({ type: cc.SpriteFrame })
    bulletSprite = null;
    //Texture2D
    @property({ type: cc.Texture2D })
    private texture: cc.Texture2D = null;
    //相机组件
    @property({ type: cc.Camera })
    private camera: cc.Camera = null;
    //回调函数
    @property({ type: cc.Component.EventHandler, tooltip: "这是一个回调" })
    private onComplete: cc.Component.EventHandler = null;
    @property({ type: [cc.Component.EventHandler], tooltip: '这是一个回调组' })
    private a_call_back: cc.Component.EventHandler[] = [];
    //this.a_call_back.forEach(c => c.emit([参数1, 参数2, ...]));//使用方法
    //枚举类型
    //export enum xxxx { aaa, xxx }//写到类上边,装饰器用到了,需要写在class前面。
    @property({ type: cc.Enum(xxxx) })
    private test_enum: xxxx = xxxx.aaa;
    //bool类型
    @property({ type: false })//这样不会报警告。用CCBoolean,cc.Boolean,Boolean都会被警告-或者不写type
    private test_bool = false;
    // 脚本类型 需要引入脚本 import DialogGuide from "./modules/Game/guide/DialogGuide";
    @property({ type: DialogGuide })
    private test_script: DialogGuide = null;
    //get 与 set
    private _edit_play: boolean = false;
    @property({ displayName: '勾选框' })
    get edit_play(): boolean {
        return this._edit_play;
    }
    set edit_play(value: boolean) {
        this._edit_play = value;
    }
    // 设置编辑器不可见 visible
    @property()// 加下划线_ 表示编辑器不可见
    private _visi: number = 80;
    @property({ visible: false })// 加属性 visible: false 表示编辑器不可见,优先级更高,超过下划线_
    private visi: number = 80;
}

属性装饰器的其他属性,摘抄自cc.d.ts

export interface IExposedAttributes {
    type?: any;//指定属性的类型。
    url?: string;
    visible?: boolean | (() => boolean);//控制是否在编辑器中显示该属性。
    displayName?: string;//该属性在编辑器中的显示名称。
    displayOrder?: number;
    tooltip?: string;//该属性在编辑器中的工具提示内容。
    multiline?: boolean;
    readonly?: boolean;//指定该属性是否为可读的。
    min?: number;//当该属性为数值类型时,指定了该属性允许的最小值。
    max?: number;//当该属性为数值类型时,指定了该属性允许的最大值。
    step?: number;//当该属性为数值类型时并在编辑器中提供了滑动条时,指定了滑动条的步长。
    range?: number[];//当该属性为数值类型时,指定了该属性允许的范围。
    slide?: boolean;//当该属性为数值类型时,是否在编辑器中提供滑动条来调节值。
    serializable?: boolean;//该属性是否参与序列化和反序列化。
    formerlySerializedAs?: string;//该属性的曾用名。
    editorOnly?: boolean;//该属性是否仅仅在编辑器环境中生效。
    override?: boolean;//是否覆盖基类中的同名属性。
    animatable?: boolean;
    unit?: string;
    radian?: boolean;//转换为弧度
}