// assets/scripts/CameraRig.ts import { _decorator, Component, Node, Vec3, math } from "cc"; const { ccclass, property } = _decorator; @ccclass("CameraRig") export class CameraRig extends Component { @property(Node) ball!: Node; @property({ tooltip: "跟随平滑(0~1,越小越平滑)" }) smooth = 0.1; @property(Vec3) offset = new Vec3(0, 2.5, -5); private _mode: "static" | "follow" = "static"; setModeFollow() { this._mode = "follow"; } setModeStatic() { this._mode = "static"; } lateUpdate(dt: number) { if (this._mode !== "follow" || !this.ball) return; const target = this.ball.worldPosition.clone().add(this.offset); const p = this.node.worldPosition.clone(); const lerp = new Vec3( math.lerp(p.x, target.x, 1 - this.smooth), math.lerp(p.y, target.y, 1 - this.smooth), math.lerp(p.z, target.z, 1 - this.smooth) ); this.node.setWorldPosition(lerp); this.node.lookAt(this.ball.worldPosition); } }