const { ccclass, property } = cc._decorator; @ccclass export default class HSL extends cc.Component { editor: { executeInEditMode: true,//編輯器裡運行腳本代碼 } @property(cc.EffectAsset) effectAsset: cc.EffectAsset = null; @property({ range: [-180, 180], slide: true }) dH: number = 0; @property({ range: [-1, 1], slide: true }) dS: number = 0; @property({ range: [-1, 1], slide: true }) dL: number = 0; @property({ range: [0, 1], slide: true }) dA: number = 1; private render: cc.RenderComponent; private material: cc.Material; private isLoaded: boolean = false; onLoad() { if (!this.effectAsset) { cc.log("你需要拖進來一個效果"); return; } this.render = this.node.getComponent(cc.RenderComponent); if (!this.render) { cc.log("結點必須有RenderComponent組件"); return; } this.material = cc.Material.create(this.effectAsset, 0); this.material.name = this.effectAsset.name; if (this.material.getDefine("USE_TEXTURE")) { this.material.define("USE_TEXTURE", true); } if (this.material.getDefine("USE_EFFECT")) { this.material.define("USE_EFFECT", true); } this.render.setMaterial(0, this.material); this.isLoaded = true; this.reset(); } reset() { if (!this.isLoaded) { return; } if (!this.dH) { this.dH = 0; } this.material.setProperty("u_dH", this.dH); this.material.setProperty("u_dS", this.dS); this.material.setProperty("u_dL", this.dL); this.material.setProperty("u_dA", this.dA); } }