first commit
This commit is contained in:
32
assets/scripts/CameraRig.ts
Normal file
32
assets/scripts/CameraRig.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user