2025-04-24 17:03:28 +08:00

62 lines
1.7 KiB
TypeScript

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);
}
}