import { _decorator, Component, Node, Animation, UIOpacity, tween, Vec3 } from 'cc'; const { ccclass, property } = _decorator; @ccclass('RewardChest') export class RewardChest extends Component { @property(Node) chestNode: Node = null!; @property(Node) lightEffect: Node = null!; @property(UIOpacity) maskOpacity: UIOpacity = null!; @property(Node) particles: Node = null!; start() { // 初始化 if (this.particles) { this.particles.active = false; } this.playAppearAnimation(); } playAppearAnimation() { // 背景遮罩渐入 if (this.maskOpacity) { tween(this.maskOpacity) .to(0.3, { opacity: 180 }) .start(); } // 宝箱从小变大 if (this.chestNode) { this.chestNode.scale = new Vec3(0.1, 0.1, 0.1); tween(this.chestNode) .to(0.5, { scale: new Vec3(1, 1, 1) }, { easing: 'backOut' }) .start(); } // 光效旋转 if (this.lightEffect) { this.lightEffect.angle = 0; tween(this.lightEffect) .by(3, { angle: 360 }) .repeatForever() .start(); } } playOpenAnimation() { if (this.chestNode) { tween(this.chestNode) .by(0.1, { position: new Vec3(0, 5, 0) }) .by(0.1, { position: new Vec3(0, -5, 0) }) .by(0.1, { scale: new Vec3(0.1, 0.1, 0.1) }) .by(0.1, { scale: new Vec3(-0.1, -0.1, -0.1) }) .call(() => { if (this.particles) { this.particles.active = true; } }) .start(); } } }