说实话,用 applyForce/applyTorque 来模拟跟随比较麻烦,需要自己算力的大小和方向(本质上是写一个 PD 控制器),不推荐这个方案。
你的场景更适合用 FixedConstraint(固定约束)把盒子和盘子的刚体绑在一起,这样物理引擎会自动处理跟随和重力:
// 盘子需要是 Kinematic 刚体(isKinematic = true),盒子是普通动态刚体
let constraint = boxNode.addComponent(Laya.FixedConstraint);
constraint.ownBody = boxNode.getComponent(Laya.Rigidbody3D);
constraint.connectedBody = plateNode.getComponent(Laya.Rigidbody3D);
盘子设为 Kinematic 刚体后,你可以自由控制盘子的 transform 旋转,盒子会通过约束跟着动,同时还保留重力等物理效果。
如果不想用约束,最简单的办法就是每帧直接同步:
onLateUpdate() {
const rb = this.owner.getComponent(Laya.Rigidbody3D);
const transform = (this.owner as Laya.Sprite3D).transform;
rb.position = transform.position;
rb.orientation = transform.rotation;
}
但这种方式会覆盖物理模拟结果,重力效果会被吃掉。所以如果需要保留重力,还是用 FixedConstraint 方案。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。